2009-07-12 49 views
0

我有一个运行在集成模式下的IIS7上托管的应用程序。我通过将以下到Web.config中的错误处理:(因为这是整合模式的<的customErrors>未使用的块)IIS7集成管道模式下的异常处理

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

我想要一个每次都自动发送电子邮件生成异常。但问题是,在Error.aspx中,我无法弄清楚如何获得对异常的引用。我试过这个:

Dim oEx As Exception = Server.GetLastError() 

但它返回Nothing。我也尝试过HttpContext.Current.Error()和HttpContext.Current.AllErrors,这些都不起作用。

在IIS7集成模式下运行的自定义错误页面中,如何获取对已处理异常的引用?

回答

0

你需要拦截的错误,无论是在Global.asax中或自定义的IHttpModule实现如下:

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"); 
    } 
} 

然后,在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(); 
} 
相关问题