2013-02-13 8 views
7

Application_End()は、アプリケーションプールが停止したときに呼び出されます。これは、自動プールリサイクルやアプリケーションの提供元のフォルダの変更など、さまざまな理由で発生します。Application_End()が呼び出された理由をプログラムで確認するにはどうすればよいですか?

コールスタックは、一般的に次のようになります:

my Application_End(Object sender, EventArgs e) 
at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner) 
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) 
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) 
at System.Web.HttpApplication.InvokeMethodWithAssert(MethodInfo method, Int32 paramCount, Object eventSource, EventArgs eventArgs) 
at System.Web.HttpApplication.ProcessSpecialRequest(HttpContext context, MethodInfo method, Int32 paramCount, Object eventSource, EventArgs eventArgs, HttpSessionState session) 
at System.Web.HttpApplicationFactory.Dispose() 
at System.Web.HttpRuntime.Dispose() 
at System.Web.HttpRuntime.ReleaseResourcesAndUnloadAppDomain(Object state) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
at System.Threading.ThreadPoolWorkQueue.Dispatch() 
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() 

完全に無用です。

どのように呼び出されたのかをプログラムで確認するにはどうすればよいですか?

答えて

17

アプリケーションが終了する理由を示すSystem.Web.Hosting.HostingEnvironment.ShutdownReasonプロパティがあります。その値はApplication_End()から取得できます。

+0

あなたの答えをありがとう、この1つは本当に私を助けた!起動時にApplication_End()をトリガしたアプリケーションの/ binディレクトリにあるファイルを変更しているように見えました。 – Thomas

関連する問題