2009-07-12 35 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() 

しかし、それは何も返しません。私も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(); 
}