2010-12-14 2 views
0

Я использую ELMAH для регистрации ошибок, и если ошибка возникает во время частичной обратной передачи (из обработчика события элемента управления, завернутого в панель обновления), тогда он регистрирует ошибки дважды. Я НЕ использую модуль «MsAjaxDeltaErrorLog», но вместо этого программно регистрирую ошибки из обработчика событий «AsyncPostBackError» элемента управления ScriptManager. Я делаю это, чтобы избежать перенаправления на общую страницу за ошибки, возникшие во время частичных обратных передач. Я отключил перенаправление в web.config. Вот код, который регистрирует за исключениемОшибки Ajax регистрируются дважды ELMAH

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

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

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

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

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

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

В действительности, шансы на это происшествия будут довольно стройными. .NET Framework 3.5

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

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

Смежные вопросы