7

Global.asax に次のコードを持つ WCF サービスがあります。

protected void Application_Start(object sender, EventArgs e)
{
    // Make sure that any exceptions that we don't handle at least get logged.
    AppDomain.CurrentDomain.UnhandledException += LogUnhandledException;
}

private void LogUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    Log.Error.LogException("UnhandledException", e.ExceptionObject as Exception);
}

アイデアは、少なくとも未処理のすべての例外をログに記録することです。

しかし、それは決して呼び出されていないようです。サービス操作の 1 つで 0 による除算を実行しようとしましたが、例外が発生した後にサービスを停止するだけです。

int zero = 0;
int result = 100 / zero;

LogUnhandledException メソッドが呼び出されることはありません。

IIS とデバッガーでの実行の両方でこれを試しました。

このイベントを WCF サービスで機能させるにはどうすればよいですか?

4

3 に答える 3

2

ThreadException もキャッチしてみてください。

        Application.ThreadException += Application_ThreadException;
        AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

少し前にWinFormsアプリで同じ問題が発生しました。UnhandledExceptionは、通常はプロセス全体を即座に終了させる真に未処理の例外に対して発生します。通常、それを起こさせず、いくつかのデフォルトの動作を提供するグローバル ハンドラーがあります。そのため、そのハンドラーに送られる前に例外をキャッチする必要があります。これは、ThreadException を介して行うことができます。

于 2013-05-03T02:11:57.713 に答える
0

これを試しましたか?http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx
から

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(LogUnhandledException);

「+= new」を使用して、あなたの呼び出しとこの呼び出しの違いは何だろうと思っていますが、試してみる価値があります。

于 2013-05-02T22:36:37.960 に答える