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