WCF エラー処理
WCF アプリケーションで発生したエラーは次の 3 つのグループのいずれかに属します。
通信エラー
プロキシ/チャネル エラー
アプリケーション エラー
通信エラーは、ネットワークが利用できない場合、クライアントが無効なアドレスを使用している場合、またはサービス ホストが受信メッセージをリッスンしていない場合に発生します。 この種類のエラーは、クライアントに CommunicationException または CommunicationException 派生クラスとして返されます。
プロキシ/チャネル エラーは、チャネルまたはプロキシ自体に発生するエラーです。 この種類のエラーには、閉じられているプロキシまたはチャネルを使用しようとした、クライアントとサービス間にコントラクトの不一致が存在する、またはクライアントの資格情報がサービスによって拒否されたなどがあります。 このカテゴリには、ここに一覧を示せないほど多くのさまざまなエラーの種類があります。 この種類のエラーは、クライアントにそのままの状態で返されます (例外オブジェクトに対して変換は実行されません)。
アプリケーション エラーは、サービス操作の実行中に発生します。 この種類のエラーは、クライアントに FaultException または FaultException<TDetail> として送信されます。
WCF でのエラー処理は、次の 1 つ以上によって実行されます。
スローされた例外の直接処理。 これは、通信エラーとプロキシ/チャネル エラーに対してのみ行われます。
エラー コントラクトの使用
IErrorHandler インターフェイスの実装
ServiceHost イベントの処理
エラー コントラクト
エラー コントラクトでは、プラットフォームに依存しない方法で、サービス操作中に発生する可能性のあるエラーを定義できます。 既定では、サービス操作内からスローされたすべての例外はクライアントに FaultException オブジェクトとして返されます。 FaultException オブジェクトには、情報がほとんど含まれません。 エラー コントラクトを定義し、エラーを FaultException<TDetail> として返すことにより、クライアントに送信される情報を制御できます。 詳細については、「コントラクトおよびサービスのエラーの指定と処理」を参照してください。
IErrorHandler
IErrorHandler インターフェイスでは、WCF アプリケーションがエラーに応答する方法を詳細に制御できます。 クライアントに返されるエラー メッセージを制御し、ログ記録などのカスタム エラー処理を実行できるようにします。 詳細については、IErrorHandler に関するページと「エラー処理およびレポートに対する制御の拡張」を参照してください。
ServiceHost イベント
ServiceHost クラスはサービスをホストし、エラー処理に必要になる可能性のあるいくつかのイベントを定義します。 次に例を示します。
詳細については、ServiceHost を参照してください。