2010-11-02 14 views
14

Desidero sapere quali parti del ciclo di vita della richiesta ASP.NET si verificano dopo che un errore è stato gestito tramite l'evento HttpApplication.Error. In particolare, quale degli eventi elencati a http://msdn.microsoft.com/en-us/library/bb470252.aspx#Stages si attiva dopo un errore? So che EndRequest continua a sparare e sospetto che anche PreSendRequestHeaders e PreSendRequestContent si attivino, ma a parte questi non ne ho idea.Quali eventi ciclo di vita ASP.NET si attivano dopo HttpApplication.Error?

Dipende da quando si verifica l'errore nel ciclo di vita? Dipende dal fatto che io chiami Server.ClearError() nel gestore degli errori?

Sto chiedendo questa domanda perché non so se dovrei chiamare HttpApplication.CompleteRequest() dal mio gestore degli errori.

+1

Peccato che nessuno abbia risposto direttamente alla domanda di ** quali eventi ** sparano dopo che un errore è stato gestito. –

risposta

0

L'evento LogRequest viene generato anche se si verifica un errore. È possibile fornire un gestore di eventi per l'evento LogRequest per fornire la registrazione personalizzata per la richiesta. per ulteriori dettagli su http://msdn.microsoft.com/en-us/library/system.web.httpapplication.logrequest.aspx

Se l'applicazione genera un output di errore personalizzato, sopprimere il messaggio di errore predefinito generato da ASP.NET da una chiamata al metodo ClearError nel HttpApplication.Error evento.

0

Non ho controllato, ma penso che dipenda.

Un errore può essere generato in qualsiasi evento di pagina (Init/Load/PreRender). Dopo l'errore, se si cancella l'errore, il ciclo di vita della pagina viene continuato da dove era.

0

L'eccezione che genera l'evento Errore è accessibile tramite una chiamata al metodo GetLastError. Se l'applicazione genera un errore personalizzato, sopprime il messaggio di errore predefinito generato da ASP.NET con una chiamata al metodo ClearError.

3

Il modo migliore è quello di catturare server di ultimo errore e eccezioni AppDomain.

Tutti possono essere eseguiti nel file Global.asax.cs.

Controllare i seguenti passaggi:

1- In Global.asax.cs, prendere l'ultimo errore e la sua registrazione.

protected void Application_Error(object sender, EventArgs e) 
    { 
     Exception exception = Server.GetLastError(); 
     Server.ClearError(); 
     log.Error("Application Error caught in Global ", exception); 
    } 

2- Aggiungere un gestore di eventi per l'evento UnhandledException su AppDomain, questo dovrebbe essere aggiunto al Application_Start:

protected void Application_Start(object sender, EventArgs e) 
    { 
     //.... 
     AppDomain.CurrentDomain.UnhandledException 
       += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 
    }  

3- E qui è la realizzazione di CurrentDomain_UnhandledException:

void CurrentDomain_UnhandledException(object sender, 
                UnhandledExceptionEventArgs e) 
    { 
     if (e != null) 
     log.Error("Domain Unhandled Exception: ", e.ExceptionObject as Exception); 
    } 

Happy coding :)