WCF エラー処理

WCF アプリケーションで発生したエラーは次の 3 つのグループのいずれかに属します。

  1. 通信エラー

  2. プロキシ/チャネル エラー

  3. アプリケーション エラー

通信エラーは、ネットワークが利用できない場合、クライアントが無効なアドレスを使用している場合、またはサービス ホストが受信メッセージをリッスンしていない場合に発生します。 この種類のエラーは、クライアントに CommunicationException または CommunicationException 派生クラスとして返されます。

プロキシ/チャネル エラーは、チャネルまたはプロキシ自体に発生するエラーです。 この種類のエラーには、閉じられているプロキシまたはチャネルを使用しようとした、クライアントとサービス間にコントラクトの不一致が存在する、またはクライアントの資格情報がサービスによって拒否されたなどがあります。 このカテゴリには、ここに一覧を示せないほど多くのさまざまなエラーの種類があります。 この種類のエラーは、クライアントにそのままの状態で返されます (例外オブジェクトに対して変換は実行されません)。

アプリケーション エラーは、サービス操作の実行中に発生します。 この種類のエラーは、クライアントに FaultException または FaultException<TDetail> として送信されます。

WCF でのエラー処理は、次の 1 つ以上によって実行されます。

  • スローされた例外の直接処理。 これは、通信エラーとプロキシ/チャネル エラーに対してのみ行われます。

  • エラー コントラクトの使用

  • IErrorHandler インターフェイスの実装

  • ServiceHost イベントの処理

エラー コントラクト

エラー コントラクトでは、プラットフォームに依存しない方法で、サービス操作中に発生する可能性のあるエラーを定義できます。 既定では、サービス操作内からスローされたすべての例外はクライアントに FaultException オブジェクトとして返されます。 FaultException オブジェクトには、情報がほとんど含まれません。 エラー コントラクトを定義し、エラーを FaultException<TDetail> として返すことにより、クライアントに送信される情報を制御できます。 詳細については、「コントラクトおよびサービスのエラーの指定と処理」を参照してください。

IErrorHandler

IErrorHandler インターフェイスでは、WCF アプリケーションがエラーに応答する方法を詳細に制御できます。 クライアントに返されるエラー メッセージを制御し、ログ記録などのカスタム エラー処理を実行できるようにします。 詳細については、IErrorHandler に関するページと「エラー処理およびレポートに対する制御の拡張」を参照してください。

ServiceHost イベント

ServiceHost クラスはサービスをホストし、エラー処理に必要になる可能性のあるいくつかのイベントを定義します。 次に例を示します。

  1. Faulted

  2. UnknownMessageReceived

詳細については、ServiceHost を参照してください。