2009-08-20 8 views
0

私は、HTTPリクエストを処理する小さなWCFサービスを開発しました。私はたまたま、すべての障害を認識することにしたいすべての内部サーバーエラーをWindowsイベントログに挿入する

:契約から500内部サーバーエラーが発生し

  • すべてが(私はAを書いたバインディングビューからて、CommunicationExceptionが発生し
  • すべてを表示しますカスタムものも標準のものを使用しています)

エラーは、Windowsイベントログに記録する必要があります。

私の質問は:

  • は、すべての例外をキャプチャし、イベントログにそれらを印刷し、全体WCFスタックのための中央のイベントハンドラを追加するために、いくつかの可能性はありますか?

ご挨拶。

答えて

1

サーバー側で - はい、Johnがすでに指摘しているように、基本的にサービスクラスにIErrorHandlerインターフェイスを実装し、その側のすべてのエラーをキャプチャできます。

ただし、クライアント側で、あなたはすべてのサービスコールを確保するために、古き良き.NET try {...} catch {...}を使用するだけ必要があります - 結局のところ、あなたは可能性が潜在的に

  • コールに存在しないサーバーを
  • 緩いネットワークconnectitivity一時的に使用できないすべての
  • コールサーバー物事のこれらの種類の
  • 以上(大きなブルドーザーを持つ男は、ネットワークのワイヤ:-)をカット)

これらはCommunicationExceptions(またはその子孫)であり、クライアント側で処理される必要があります。

メッセージのサーバー側を(少なくともメッセージがサービスクラスに送られて処理されている限り)処理できます。他のものは別に処理する必要があります。

マルク・

+0

は、私は、カスタムの結合チャネルのにReceiveRequestメソッドに「(エラーが起こった「)」の新しいて、CommunicationExceptionを投げる」を挿入しました。カスタムエラーハンドラは、 "foreach(ChannelDispatcher cd in h.ChannelDispatchers){cd.ErrorHandlers.Add(new MyErrorHandler());}を介して挿入されましたが、私のカスタムエラーハンドラはいつでも呼び出されません。 – Etan

+0

私は正しく覚えていれば、サーバー側のディスパッチャがサービスオブジェクトのメソッドにメッセージをディスパッチした後でIErrorHandlerインターフェイスが起動するだけです。それ以前のものはクライアントに直接返されます –

+0

"新しいCommunicationExceptionをスローする("エラー ")"は契約の実装にも反映されません。ディスパッチ前のエラーハンドラではなく、ディスパッチ後のエラーハンドラではない場合、エラーハンドラによってどのような例外が処理されますか? – Etan

関連する問題