2012-04-08 14 views
12

Mam następujących w moim Global.aspx która jest przeznaczona dla obsługi błędów:Catching błędy w Global.asax

void Application_Error(object sender, EventArgs e) 
{ 
    Exception exception = Server.GetLastError(); 
    if (exception != null) 
    { 
     //Log 
     if (HttpContext.Current.Server != null) 
     { 
      HttpContext.Current.Server.Transfer("/siteerror.aspx"); 
     } 
    } 
} 

Działa to w większości przypadków, ale czasami nie dostać się Server.Transfer. Z jakiegoś powodu HttpContext.Current.Server ma wartość null. Zorientowałem się, gdzie to się dzieje: kiedy pojawiają się błędy w kontroli użytkownika i na moich zajęciach logiki biznesowej. Czy coś mi umyka?

Dzięki

+2

jakiegokolwiek powodu nie jest używany Zamiast tego raczej 'Response.Redirect'? – leppie

+1

Gdzie w global.asax jest to? –

+0

@leppie Nie dodałem tego, więc nie jestem do końca pewien, dlaczego poprzednia osoba wybrała Server.Transfer, to nie powinno mieć znaczenia, czy powinno tak być? – Peuge

Odpowiedz

1

Błędy aplikacji mogą pojawić się w dowolnym momencie - w tym przypadku nie ma żadnego połączenia jest obecny.

Na przykład, jeśli wątek w tle przetwarza i powoduje wyjątek.

2

Blok Application_Error może wychwycić wyjątek w dowolnym momencie między cyklem życia aplikacji.

Cykl życia aplikacji jest nadrzędny w cyklu życia sesji, ponieważ można zrozumieć, że w jednej aplikacji może być wiele sesji.

W ten sposób możesz mieć HttpContext.Current null przy pewnych błędach, które wystąpiły przed utworzeniem sesji lub po wygaśnięciu sesji.

Jeśli chcesz zapisać specyficzne dla sesji przekierowania, powinieneś zawsze sprawdzać wartość Null bieżącego HttpContext.

Można również użyć Server.GetLastError poznać szczegóły błąd i napisać swoją stronę błędu przekierowania przez tag CustomErrors w web.config

Patrz na poniższy link

http://weblogs.asp.net/scottgu/archive/2006/08/12/Tip_2F00_Trick_3A00_-Show-Detailed-Error-Messages-to-Developers.aspx

Powiązane problemy