3

私は石鹸ベースのサービスを呼び出しているプロジェクトを持っています。これらの例外のほとんど 2 つが API の呼び出しで発生するため、障害と通信の例外を使用しています。しかし、soap api でこれら 2 つの例外の代わりに他の例外が発生した場合はどうなるでしょうか。

    try
    {
      //soap api
    }
    catch(FaultException ex)
    {
    }
    catch(CommunicationException ex)
    {
    }

後で、SOAP例外クラスについてインターネットで読みました。そして、私は自分のコードを次のように変更することを検討しています:

     try
    {
      //soap api
    }

    catch(SoapException ex)
    {
    }

今私が知る必要があるのは、 fault と communication exception の代わりに Soap Exception を使用するかどうかです。いいですか?必要なのは、SOAP API で例外が発生した場合に例外をキャッチすることだけです。ただし、soap api が障害と通信例外も処理するのか、それともコードを明示的に定義する必要があるのか​​を知りたいですか?

 try
    {
      //soap api
    }
    catch(FaultException ex)
    {
    }
    catch(CommunicationException ex)
    {
    }
    catch(SoapException ex)
    {
    }
4

3 に答える 3

4

MSDN に記載されているとおり:

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

  • 通信エラー
  • プロキシ/チャネル エラー
  • アプリケーション エラー

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

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

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

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

  • スローされた例外を直接処理します。これは、通信エラーとプロキシ/チャネル エラーの場合にのみ行われます。
  • 障害契約の使用
  • IErrorHandler インターフェイスの実装
  • ServiceHost イベントの処理

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

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

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

1.故障

2.不明なメッセージを受け取りました

同様の質問を参照することもできます。これには多くの適切な回答があります: WCF サービスで例外を処理するための最良の方法は何ですか?

于 2014-01-02T06:22:23.407 に答える
4

は表示されませんSoapException。これは、時代遅れの ASMX テクノロジーの一部です。

コントラクトとサービスの障害の指定と処理を参照してください。

于 2014-01-02T06:15:53.003 に答える