ASP.NET アプリケーションでのアプリケーション プールのリサイクルの直後に、次の例外が断続的に発生します。
System.Configuration.ConfigurationErrorsException: Could not load file or assembly 'Microsoft.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Failed to grant permission to execute. (Exception from HRESULT: 0x80131418) ---> System.IO.FileLoadException: Could not load file or assembly 'Microsoft.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Failed to grant permission to execute. (Exception from HRESULT: 0x80131418)
File name: 'Microsoft.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' ---> System.Security.Policy.PolicyException: Execution permission cannot be acquired.
at System.Security.SecurityManager.ResolvePolicy(Evidence evidence, PermissionSet reqdPset, PermissionSet optPset, PermissionSet denyPset, PermissionSet& denied, Boolean checkExecutionPermission)
at System.Security.SecurityManager.ResolvePolicy(Evidence evidence, PermissionSet reqdPset, PermissionSet optPset, PermissionSet denyPset, PermissionSet& denied, Int32& securitySpecialFlags, Boolean checkExecutionPermission)
at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.Load(String assemblyString)
at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)
読み込みに失敗する特定の DLL はインシデントごとに異なりますが、常にメイン アセンブリによって参照されるものです。
Windows Server 2008 で ASP.NET 3.5 を実行しています。これは、同じアプリケーション プールのすべてのサイトではなく一部のサイトに影響するバッチで発生するようです。すべて同じコードを実行している多数のサイトがあります。
サイトが DLL の読み込みに失敗すると、次のアプリケーション プールのリサイクルまでイエロー スクリーン オブ デスがスローされます。この動作を再現することはできず、サイトは一度に数日または数週間 (および多くのアプリケーション プールのリサイクル) 正常に機能しているように見えますが、失敗します。
他の誰かが同様の行動を見たことがありますか?
アップデート:
数百のサイトをセットアップし、数分ごとにアプリケーション プールをリサイクルしながら、それらのサイトを繰り返しヒットするスクリプトを作成することで、失敗を再現しようとしましたが、サーバーの CPU を数日連続でダウンさせる以外に多くのことを達成できませんでした。 .
次に、ASP.NET が作成する DLL のコピーをいじってみました (DLL の 1 つをロックし、ファイルのアクセス許可を変更します)。同様の動作を再現することができましたが、同じ例外は発生しませんでした。
System.Security.Policy.PolicyException: Execution permission cannot be acquired.
特定の DLL をロードするときにセキュリティ ポリシーをスローするようにセキュリティ ポリシーを調整する方法についてのアイデアはありますか?