Application.ThreadException
WCF サービスでリッスンするイベントが見つかりません。これは WinForms 用だと思いますが、ThreadException
WCF サービス用のイベントはありますか? それとも彼らはで終わるのAppDomain.CurrentDomain.UnhandledException
だろうか?
3 に答える
IErrorHandlerを実装する必要があるようです:http: //msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.ierrorhandler.aspx
次に、ハンドラーをServiceHostに登録します:http: //msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.channeldispatcher.errorhandlers.aspx
http://msdn.microsoft.com/en-us/library/ms751439.aspxで説明されているように、カスタム属性を使用してIErrorHandlerを接続することもできるようです。
クライアントのフレームワークによって異なります。WCF エラーはクライアント側で例外としてスローされるため、他のグローバル例外ハンドラーと同様に処理します。
Winform の使用
Application.ThreadException
WPF は以下を使用します。
Application.DispatcherUnhandledException
クリスチャンが述べているように、これらは「GUI」スレッドでスローされた例外のみを対象としていますが、WCF はデフォルトで二重サービスのコールバックをこれらにマーシャリングします。
このイベントは、「 Windows フォーム スレッドApplication.ThreadException
で発生する未処理の例外を処理する」ためだけに使用されるため(強調を追加、MSDN )、WCF サービスではあまり役に立ちません。
あなたの最善の策は、実際に使用することAppDomain.CurrentDomain.UnhandledException
です。ただし、プロセスの終了を防ぐことはできないことに注意してください。このイベントは、「システムのデフォルト ハンドラーがユーザーに例外を報告し、アプリケーションを終了する」前に、何らかのログ記録またはエラー報告を行うことを許可するだけです。( MSDN )。
独自の を実装したいと考える人も多いでしょうIErrorHandler
。また、WCF エラー処理のベスト プラクティスに関するこのブログ エントリもチェックしてください。