次の方法で共有


WCF エラー処理

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

  1. 通信エラー

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

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

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

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

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

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

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

  • 障害コントラクトの使用

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

  • ServiceHost イベントの処理

障害コントラクト

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

IErrorHandler

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

ServiceHost イベント

ServiceHost クラスはサービスをホストし、エラーの処理に必要なイベントをいくつか定義します。 例えば次が挙げられます。

  1. Faulted

  2. UnknownMessageReceived

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