2010-11-02 12 views
14

Chcę wiedzieć, które części cyklu życia żądania ASP.NET się zdarzą po wystąpieniu błędu za pośrednictwem zdarzenia HttpApplication.Error. Konkretnie, które z wydarzeń wymienionych pod numerem http://msdn.microsoft.com/en-us/library/bb470252.aspx#Stages są wywoływane po błędzie? Wiem, że EndRequest wciąż strzela, i podejrzewam, że PreSendRequestHeaders i PreSendRequestContent również wystrzeliwują, ale poza tym nie mam pojęcia.Które zdarzenia cyklu życia programu ASP.NET są uruchamiane po HttpApplication.Error?

Czy zależy od tego, kiedy w cyklu życia wystąpi błąd? Czy zależy to od tego, czy wywołuję Server.ClearError() w procedurze obsługi błędów?

Zadaję to pytanie, ponieważ nie wiem, czy powinienem wywoływać HttpApplication.CompleteRequest() z mojej obsługi błędu.

+1

Szkoda, że ​​nikt tak naprawdę nie odpowiedział na to pytanie ** które zdarzenia ** uruchamiają się po wystąpieniu błędu. –

Odpowiedz

0

Zdarzenie LogRequest zostaje podniesione, nawet jeśli wystąpi błąd. Można udostępnić obsługę zdarzeń dla zdarzenia LogRequest, aby zapewnić niestandardowe rejestrowanie dla żądania. celu uzyskania dalszych informacji na http://msdn.microsoft.com/en-us/library/system.web.httpapplication.logrequest.aspx

Jeśli aplikacja generuje niestandardowe wyjście błędu, tłumią domyślny komunikat o błędzie, który jest generowany przez ASP.NET przez wywołanie metody ClearError w HttpApplication.Error Event.

0

Nie sprawdziłem, ale myślę, że to zależy.

Błąd może zostać zgłoszony w dowolnym zdarzeniu na stronie (Init/Load/PreRender). Po zgłoszeniu błędu, jeśli usuniesz błąd, cykl życia strony jest kontynuowany od miejsca, w którym był.

0

Do wyjątku wywołującego zdarzenie Błąd można uzyskać dostęp za pomocą metody GetLastError. Jeśli twoja aplikacja generuje niestandardowe wyjście błędów, pomiń domyślny komunikat o błędzie wygenerowany przez ASP.NET przez wywołanie metody ClearError.

3

Najlepszym sposobem jest złapać serwer ostatnim błędzie i AppDomain wyjątki.

Wszystkie z nich można wykonać w pliku Global.asax.cs.

Sprawdź następujące kroki:

1- W Global.asax.cs, złapać ostatni błąd i zalogować się.

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

2- Dodawanie obsługi zdarzeń dla zdarzenia UnhandledException na AppDomain, to powinno zostać dodane do Application_Start:

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

3- i tutaj jest wdrożenie CurrentDomain_UnhandledException:

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

Szczęśliwe kodowanie :)

Powiązane problemy