2013-02-13 16 views
7

Application_End() viene richiamato quando il pool di applicazioni viene arrestato e ciò può accadere per una serie di motivi, tra cui il riciclo automatico del pool o le modifiche nella cartella da cui viene fornita l'applicazione.Come faccio a trovare a livello di codice perché viene richiamato Application_End()?

Lo stack di chiamate in genere si presenta in questo modo:

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() 

che è completamente inutile.

Come individuare il motivo per cui è stato chiamato?

risposta

17

C'è la proprietà System.Web.Hosting.HostingEnvironment.ShutdownReason che indica il motivo per cui l'applicazione viene interrotta. Il suo valore può essere recuperato dall'interno di Application_End().

+0

Grazie per la tua risposta, questo mi ha davvero aiutato! Sembrava che stavo modificando un file nella directory dell'applicazione/bin all'avvio che ha attivato Application_End(). – Thomas

Problemi correlati