我有一個相當穩定的服務器應用程序版本,已經爲數十位客戶部署了將近一年。通過安全透明方法X嘗試訪問安全關鍵方法Y失敗
一個新的客戶最近安裝的應用程序,並且正在以下錯誤:
System.MethodAccessException: Attempt by security transparent method [SomeMethod] to access security critical method [SomeOtherMethod] failed.
雙方的someMethod和SomeOtherMethod是我寫組件的方法,這是對.NET 4建成,正在運行的內一個Windows服務。如果它有所作爲,SomeOtherMethod會引用來自第三方程序集(EntLib 4.1)的類型,這些程序集是針對.NET 2.0構建的。看看EntLib 4.1的代碼,我確實看到它們同時使用了SecurityTransparent和APTC屬性,但這從來沒有引起其他客戶端的問題。
這些程序集是從.NET 2.0 CLR升級而來的,但很久以前。這個確切的代碼在其他客戶上運行得很好,我沒有明確使用APTC屬性,也沒有在任何地方使用SecurityCritical屬性。
這使我得出這樣的結論:這是一個配置問題或.NET Framework修補程序問題。是否有一個針對.NET發佈的補丁會導致這種重大變化?有沒有一個配置設置一些強制執行這種類型的檢查,默認情況下是關閉的,但我的客戶可能已啓用?
最後一點。我的服務使用SSRS RDLC來生成PDF。由於.NET 4中的一些變化,我必須強制服務通過以下配置使用傳統的安全策略:
<runtime>
<NetFx40_LegacySecurityPolicy enabled="true" />
</runtime>
詳情爲什麼我要做這個,看到這個計算器帖子:Very High Memory Usage in .NET 4.0
重要的一點是,我在所有其他客戶也這樣做。只有這個客戶有問題。
這是有道理的。我今天檢查這個。我的首先想到的是,由於Windows中的功能,標記通過電子郵件或IE下載的文件是不安全的,因此組件被封鎖。我以前曾經咬過我。 – RMD 2012-08-20 15:12:49
您的回答非常有幫助。事實上,事實證明,這是被阻塞的組件。刪除文件阻塞(屬性 - >解除阻止)解決了問題。 – RMD 2012-08-20 18:14:35
@RMD謝謝!該死的你的Windows。 – JefClaes 2014-06-26 10:46:59