Global.asax Application_Error triggert nicht mehr

09/07/2008 - 12:42 von Henry Habermacher | Report spam
ASP.NET 2.0, IIS 6, Windows Server 2003

Ich habe hier ein merkwürdiges Verhalten:

Ich habe folgenden Code im Global.asax drin:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when an unhandled error occurs
Call Server.Transfer("~\ViPError.aspx", True)
End Sub

In der Seite ViPError.aspx untersuche ich beim Page_Load Event den Fehler
und gebe die Exception in einem Label aus. (Code untenangefügt).
Anschliessend wird noch die aktuelle Session gedumpt (um allfàllige
Rückschlüsse auf fehlerhaft initialisierte Session Variablen zu bekommen.

Soweit also nichts besonderes.

Das hat bisher auch immer problemlos funktioniert. Nun aber
merkwürdigerweise auf einem Server nicht mehr. Dummerweise ist das gerade
der Server des Kunden und die Produktion. Ich bekomme dann die unsàglichen
ASP.NET Runtime Fehlermeldungen, welche überhaupt nichts aussagen. Den IIS
neu zu starten hat auch nichts gebracht, ebensowenig, wie die ganze
Anwendung neu zu installieren. Wir machen hier ein Source Deployment, das
heisst, wir kopieren die Source auf den Server und der kompiliert dann beim
ersten Aufruf selber. Assemblies werden hier keine deployed, nur Source.

Was kann der Grund sein, dass der Application_Error nicht mehr abgefeuert
wird oder wo soll ich suchen, wieso der Fehler auf dieser Maschine nicht
mehr zu ViPError.aspx verzweigt? Gibt es überhaupt eine Möglichkeit, den
Application_Error zu deaktivieren, wenn dieser in der Global.asax drin ist?

Danke für jegliche Hinweise, wo ich noch suchen könnte.

Gruss
Henry



erwàhnter Code:
Option Compare Text
Option Explicit On

Partial Class ViPError
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
Dim LastError As Exception
Dim strMsg As String
LastError = Server.GetLastError()
Me.lblDateTime.Text = "Date/Time: " & DateTime.Now.ToString
Me.lblPID.Text = "User: " & Session("PID")
If Not LastError Is Nothing Then
strMsg = "<b>Error Information:</b>"
If Not LastError.InnerException Is Nothing Then
strMsg &= "<br />Inner Exception:<br /><b>" &
LastError.InnerException.Message & "</b>"
strMsg &= "<br /><br />Inner Exception Type:<br />" &
LastError.InnerException.GetType.ToString
strMsg &= "<br /><br />Inner Source:<br />" &
LastError.InnerException.Source
If Not LastError.InnerException.StackTrace Is Nothing Then
strMsg &= "<br /><br />Inner Stack Trace:" &
Replace(LastError.InnerException.StackTrace, " at", "<br />at")
End If
End If
strMsg &= "<br /><br />ExceptionType:<br />" &
LastError.GetType.ToString
strMsg &= "<br /><br />Exception:<br />" & LastError.Message
strMsg &= "<br /><br />Source:<br />" & LastError.Source
strMsg &= "<br /><br />Stack Trace:"
If Not LastError.StackTrace Is Nothing Then
strMsg &= Replace(LastError.StackTrace, " at", "<br />at")
End If
Me.lblErrorDetails.Text = strMsg
Else
Me.lblErrorDetails.Text = "No Errors found!"
End If
Me.lblSessionDump.Text = "<b>Session Dump:</b>"
Dim I As Long = Session.Keys.Count - 1
If I > 0 Then
strMsg = "<table>"
For I = 0 To Session.Keys.Count - 1
strMsg &= "<tr><td>" & Session.Keys(I).ToString & "</td><td>" &
Session(Session.Keys(I).ToString) & "</td></tr>"
Next
strMsg &= "</table>"
Me.lblSessionDump.Text &= strMsg
Else
Me.lblSessionDump.Text &= " no session available."
End If
End Sub
End Class


Keine E-Mails auf Postings in NGs. Danke.
 

Lesen sie die antworten

#1 Peter Bucher [MVP]
09/07/2008 - 13:07 | Warnen spam
Salute Henry

ASP.NET Runtime Fehlermeldungen, welche überhaupt nichts aussagen.


Na dann her damit.
Oder in der web.config mal einstellen, dass der richtige Fehler auch in der
Produktion angezeigt wird.

Gibt es überhaupt eine Möglichkeit, den Application_Error zu deaktivieren,
wenn dieser in der Global.asax drin ist?


Wo und wie wirfst du bzw. wird eine Exception geworfen?
AFAIK gibts da nichts, um das zu deaktivieren.

Die Handler werden sowieso automatisch angehàngt.

Produktion und Entwicklung 1:1 gleicher Code,
nur mit derm Unterschied das die Produktion nicht mehr Debug ist?

Wenn ja, mach in der Entwicklung auch mal einen Release-Build und schau mal
was passiert.

Gruss, Peter Bucher
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
http://www.aspnetzone.de/blogs/peterbucher/ - Auf den Spuren von .NET

Ähnliche fragen