2017-04-26 28 views
0

私は中程度の信頼環境でホストされているASP MVCアプリケーションを持っています。つまり、実行できるコードは、アプリケーションの信頼ファイルのコードパーミッションで定義されているコードだけです。新しいMVCアプリケーションでは、メソッドExecutePreAppStart()が呼び出されています。このメソッドは、LoadAllAssembliesFromAppDomainBinDirectory()を実行しようとします。これが発生するとアプリがそのアセンブリを実行するための明示的な許可を付与されていない場合は権限エラーがPreApplicationStartMethodで生成された例外をキャッチするにはどうすればよいですか?

[PolicyException: Execution permission cannot be acquired.]

が生成されます。これは期待される結果です。

ここでの問題は、PreApplicationStartMethodの実装に先立って、このエラーがglobal.asaxのApplication_Errorまでバブルすることです。 PreApplicationStartMethodでは、これはもはやケースではありません。 PreApplicationStartMethodは私が制御するコードに含まれていないので、発生する可能性があるエラーをトラップするにはどうすればよいですか?

例外をキャッチするために私自身のPreApplicationStartMethodを作成しようとしましたが、アプリケーションが完全にロードされないため、ブレークポイントに達しませんでした。

他の人のPreApplicationStartMethodのエラーを捕まえる方法はありますか?私の最終目標は例外を公開することだけです。エラーをキャッチで

試み:

[assembly: System.Web.PreApplicationStartMethod(typeof(mynamespace.Initializer), "Initialize")] 

namespace mynamespace 
{ 
    public static class Initializer 
    { 
     public static void Initialize() 
     { 
      //Do something here to catch errors/bind event? but I never get this far at runtime 
     } 
    } 
} 

スタックトレース:

System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +772
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +259 System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +163
System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +230
System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +76 System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +343
System.Web.Compilation.BuildManager.ExecutePreAppStart() +176
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +734

答えて

-1

あなたはメディアの信頼環境でアプリケーションを実行する必要がある理由私はわかりません。 preapplicationstartメソッドは、いつも私のために働き、エラーが発生したときに例外をキャッチすることができました。通常、私は無限のwhileループを実行し、x分ごとに演算を実行します。あなたのコードと私の唯一の違いは、私は通常静的ではないパブリッククラスとしてInitializerクラスを定義することです、私は静的なinitializeメソッドを設定します。

これは、空白のWebアプリケーション環境でも機能します。したがって、環境の信頼レベルを上げる方法を作ってください。しかし、これを開発マシンでテストしてから、それが動作することを確認してから、サーバーセキュリティポリシーからエラーが発生していることを確認してください。

関連する問題