ELMAH记录两次Ajax错误

时间:2010-12-14 14:40:03

标签: asp.net error-handling elmah

我正在使用ELMAH进行错误记录,如果在部分回发期间发生错误(来自更新面板中包含的控件的事件处理程序),则会记录错误两次。我没有使用“MsAjaxDeltaErrorLog”模块,而是以编程方式记录ScriptManager控件的“AsyncPostBackError”事件处理程序中的错误。我这样做是为了避免重定向到通用页面,以防止在部分回发期间发生错误。我在web.config中关闭了重定向。这是记录异常的代码

    protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
    {
        HttpContext.Current.Items["AjaxError"] = "Ajax";
        ErrorSignal.FromCurrentContext().Raise(e.Exception,HttpContext.Current);
    }

    and in Global.asax, I am redirecting manually

protected void ErrorLog_Logged(object sender, ErrorLoggedEventArgs e)
{
  if (!HttpContext.Current.Items.Contains("AjaxError"))
  {
                    var pageName = e.Entry.Error.StatusCode == 404 ? "FileNotFoundPage" : "GenericErrorPage";
                    var redirectPage = ConfigurationManager.AppSettings[pageName];
                    Response.Redirect(String.Format("{0}?ExceptionId={1}&ExceptionMessage={2}", redirectPage, Server.UrlEncode(e.Entry.Id),
                                      Server.UrlEncode(e.Entry.Error.Message)));
  }
}

1 个答案:

答案 0 :(得分:0)

来自Elmah网站:
(http://code.google.com/p/elmah/wiki/MSAjax)

  

潜在问题

     

不幸的是,   MsAjaxDeltaErrorLogModule不是   完美解决方案由于它的方式   工作,有一个非常小的   错误的可能性   在ELMAH中记录两次。为了这个   发生,必须发生以下情况:

     
      
  1. 在Partial PostBack
  2. 期间必须发生未处理的异常   
  3. 必须在OnInit方法之前发生   System.Web.UI.PageRequestManager是   调用。
  4.         

    这将意味着两者的标准   ELMAH模块和   MsAjaxDeltaErrorModule将捕获   例外。

         

    实际上,这有可能   发生的事情会很公平   修长。 .NET Framework 3.5

         

    Microsoft Ajax的更新版本   与版本3.5一起发货   .NET Framework。这个新版本   改变了意外错误的方式   在部分PostBacks处理,   删除对Response.End的调用。   因此,如果你继续使用   MsAjaxDeltaErrorLogModule用这个   你会看到框架的版本   Partial中所有未处理的错误   PostBacks在ELMAH中被记录两次。*

我和你在同一个位置上,每当我得到一个asyn错误时,我都会把问题记录下来,但是我猜想除非我们修改ELMAH的源代码而被卡住了