我正在使用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)));
}
}
答案 0 :(得分:0)
来自Elmah网站:
(http://code.google.com/p/elmah/wiki/MSAjax)
潜在问题
不幸的是, MsAjaxDeltaErrorLogModule不是 完美解决方案由于它的方式 工作,有一个非常小的 错误的可能性 在ELMAH中记录两次。为了这个 发生,必须发生以下情况:
- 在Partial PostBack
期间必须发生未处理的异常- 必须在OnInit方法之前发生 System.Web.UI.PageRequestManager是 调用。
醇>这将意味着两者的标准 ELMAH模块和 MsAjaxDeltaErrorModule将捕获 例外。
实际上,这有可能 发生的事情会很公平 修长。 .NET Framework 3.5
Microsoft Ajax的更新版本 与版本3.5一起发货 .NET Framework。这个新版本 改变了意外错误的方式 在部分PostBacks处理, 删除对Response.End的调用。 因此,如果你继续使用 MsAjaxDeltaErrorLogModule用这个 你会看到框架的版本 Partial中所有未处理的错误 PostBacks在ELMAH中被记录两次。*
我和你在同一个位置上,每当我得到一个asyn错误时,我都会把问题记录下来,但是我猜想除非我们修改ELMAH的源代码而被卡住了