5

例外をキャッチしてデータベースに記録するように設計された HttpModule があります。次のようになります。

public class ExceptionLoggingModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.Error += OnError;
    }

    private static void OnError(object sender, EventArgs e)
    {
        try
        {
            var context = (HttpApplication) sender;
            var exception = context.Server.GetLastError();

            if (exception != null)
            {
                // Log exception
            }
        }
        catch(Exception)
        {
        }
    }
}

これは一般的に機能しますが、ページ メソッド(つまり、WebMethod 属性でマークされたコード ビハインド ファイル内のメソッド)内でエラーが発生した場合、OnError メソッドが起動しないことに気付きました。

どうして?

ページメソッド自体の内部で例外ログを再実装する以外に、これについてできることはありますか?

4

1 に答える 1

2

私はここで私のために働いた解決策を見つけました:

http://blogs.microsoft.co.il/blogs/oshvartz/archive/2008/05/17/asp-net-error-handling-using-httpmodule-full-and-partial-post-back-ajax-updatepanel. aspx

私が書いたハンドラの重要なポイントは次のとおりです。

public class PathfinderModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.PostMapRequestHandler += this.OnPostMapRequestHandler;
        context.Error += OnError;
    }

    private void OnPostMapRequestHandler(object sender, EventArgs e)
    {
        Page aux = HttpContext.Current.Handler as Page;

        if (aux != null)
        {
            aux.Error += this.OnPageError;
        }
    }

    private static void OnError(object sender, EventArgs e)
    {
        // Blah..
    }

    private void OnPageError(object sender, EventArgs e)
    {
        // Blah...
    }        
}
于 2012-11-12T17:13:04.283 に答える