2009-07-12 4 views
0

Ich habe eine Anwendung gehostet auf IIS7 im integrierten Modus ausgeführt. Ich bin Umgang mit Fehlern, die durch die folgende in Web.config setzen: (. Da dieser Modus die < custom integriert> Block wird nicht verwendet)Ausnahmebehandlung im integrierten IIS7-Pipeline-Modus

<httpErrors errorMode="DetailedLocalOnly" existingResponse="Replace" 
      defaultResponseMode="ExecuteURL" defaultPath="/Error.aspx"> 
    <remove statusCode="500" /> 
    <error statusCode="500" path="/Error.aspx" responseMode="ExecuteURL" /> 
</httpErrors> 

Ich möchte jedes Mal, E-Mails senden automatisch eine Ausnahme wird generiert. Aber das Problem ist, dass ich in Error.aspx nicht herausfinden kann, wie Sie einen Verweis auf die Ausnahme erhalten. Ich habe es versucht:

Dim oEx As Exception = Server.GetLastError() 

Aber es gibt nichts zurück. Ich habe auch versucht HttpContext.Current.Error() und HttpContext.Current.AllErrors und diese funktionieren auch nicht.

In einer benutzerdefinierten Fehlerseite, die unter dem integrierten IIS7-Modus ausgeführt wird, wie bekomme ich einen Verweis auf die behandelte Ausnahme?

Antwort

0

Sie müssen die Fehler abzufangen, entweder in Global.asax oder einem benutzerdefinierten IHttpModule Implementierung wie folgt:

public class UnhandledExceptionHandlerModule : IHttpModule { 
    private HttpApplication application; 

    public void Init(HttpApplication application) 
    { 
     this.application = httpApplication; 
     this.application.Error += Application_Error; 
    } 

    public void Dispose() 
    { 
     application = null; 
    } 

    protected internal void Application_Error(object sender, EventArgs e) 
    { 
     application.Transfer("~/Error.aspx"); 
    } 
} 

Dann in Error.aspx.cs:

protected void Page_Load(object sender, EventArgs e) { 
    Response.StatusCode = 500; 

    // Prevent IIS from discarding our response if 
    // <system.webServer>/<httpErrors> is configured. 
    Response.TrySkipIisCustomErrors = true; 

    // Send error in email 
    SendEmail(Server.GetLastError()); 

    // Prevent ASP.NET from redirecting if 
    // <system.web>/<customErrors> is configured. 
    Server.ClearError(); 
}