Ошибки Ajax регистрируются дважды ELMAH - PullRequest
0 голосов
/ 14 декабря 2010

Я использую ELMAH для регистрации ошибок, и если ошибка возникает во время частичной обратной передачи (из обработчика событий элемента управления, помещенного в панель обновления), она регистрирует ошибки дважды. Я НЕ использую модуль «MsAjaxDeltaErrorLog», а вместо этого программно регистрирую ошибки из обработчика событий «AsyncPostBackError» элемента управления ScriptManager. Я делаю это, чтобы избежать перенаправления на общую страницу для ошибок, произошедших во время частичной обратной передачи. Я отключил перенаправление в 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 голосов
/ 14 апреля 2011

С веб-сайта Elmah:
(http://code.google.com/p/elmah/wiki/MSAjax)

Потенциальные проблемы

К сожалению, MsAjaxDeltaErrorLogModule не является идеальным решением.Как это работает, существует очень малая вероятность того, что ошибки будут дважды регистрироваться в ELMAH. Для этого должно произойти следующее:

  1. Необработанное исключение должно возникать во время частичной отправки обратно
  2. Это должно произойти до вызова метода OnInit System.Web.UI.PageRequestManager.

Это будет означать, что как стандартные модули ELMAH, так и MsAjaxDeltaErrorModule будут захватывать исключение.

На самом деле шансы на это будут довольно незначительными. .NET Framework 3.5

Обновленная версия Microsoft Ajax поставлялась с версией 3.5 .NET Framework. Эта новая версия изменилатаким образом, что непредвиденные ошибки в Частичных PostBacks были обработаны, удаляя вызов Response.End. Поэтому, если вы продолжитеo используя MsAjaxDeltaErrorLogModule с этой версией фреймворка, вы увидите, что все необработанные ошибки в Partial PostBacks дважды регистрируются в ELMAH. *

Я на той же позиции, что и вы, и каждый раз, когда я получаю асинхронностьошибка я получаю записанную проблему дважды, но я думаю, что застряли, если мы не изменим исходный код ELMAH

...