2010-12-14 12 views
0

エラーログにELMAHを使用しています。エラーが部分的なポストバック(更新パネルにラップされたコントロールのイベントハンドラから)で発生した場合は、エラーを2回記録しています。私は "MsAjaxDeltaErrorLog"モジュールを使用していませんが、代わりにScriptManagerコントロールの "AsyncPostBackError"イベントハンドラからエラーをプログラムでログに記録します。私は部分的なポストバック中に発生したエラーのために汎用ページへのリダイレクトを避けるためにこれをやっています。 web.configでリダイレクトを無効にしました。ここでELMAHのウェブサイトから、例外ELMAHによって2回ログされたAjaxエラー

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

をログに記録するコードは次のとおりです。
(http://code.google.com/p/elmah/wiki/MSAjax)

潜在的な問題

残念ながら、 MsAjaxDeltaErrorLogModuleは 完璧なソリューションではありません。方法は、 のため、エラーが をELMAH内で2回記録する可能性が非常に小さい 可能性があります。このため が発生するには、次が起こる必要があります。

  1. 未処理の例外が部分ポストバック
  2. System.Web.UI.PageRequestManagerののOnInitメソッドが呼び出さ される前に発生しなければならない時に発生する必要があります。

これは、標準の ELMAHモジュールと MsAjaxDeltaErrorModule両方が 例外取り込むことを意味します。

実際には、この の可能性はかなり細くなるでしょう 細いです。 .NET Framework 3.5

Microsoft Ajax の更新版は、 .NET Frameworkのバージョン3.5に付属しています。この新しいバージョン は、Partial PostBacksの予期しないエラー が処理された方法を変更しました。 Response.Endへの呼び出しを削除しました。 あなたは、フレームワークのこの バージョンで MsAjaxDeltaErrorLogModuleを引き続き使用する場合はそのため、あなたはELMAHに2回記録されている部分 ポストバックで すべての未処理のエラーが表示されます。*

イム同じ位置にあなたがいます毎回asynエラーが発生するたびに問題が記録されますが、ELMAHのソースコードを修正しない限り縮まってしまったようです。

関連する問題