Wcf-exception-handling

提供:Dev Guides
移動先:案内検索

WCF-例外処理

WCFサービス開発者は、適切な方法でクライアントに報告する必要がある予期しないエラーに遭遇する場合があります。 *例外*として知られるこのようなエラーは、通常、try/catchブロックを使用して処理されますが、これも非常に技術特有です。

クライアントの関心領域は、エラーの発生方法やエラーの原因に関するものではないため、SOAP Faultコントラクトを使用して、WCFでサービスからクライアントにエラーメッセージを伝達します。

フォールトコントラクトにより、クライアントはサービスで発生したエラーの文書化されたビューを持つことができます。 次の例は、より良い理解を提供します。

  • ステップ1 *-一般的な例外を生成する除算操作で簡単な電卓サービスが作成されます。
using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Runtime.Serialization;
usingSystem.ServiceModel;
usingSystem.Text;

namespace Calculator {
  //NOTE: You can use the "Rename" command on the "Refactor" menu to change
  //the interface name "IService1" in both code and config file together.

   [ServiceContract]

   public interface IService1 {
      [OperationContract]
      int divide(int num1, int num2);
     //TODO: Add your service operations here
   }
}

クラスファイルのコーディングは以下に示されています-

Wcf例外処理2

ここで、数値10をゼロで除算しようとすると、電卓サービスは例外をスローします。

Wcf例外処理3

Wcf例外処理4

例外は、try/catchブロックで処理できます。

Wcf例外処理5

整数を0で除算しようとすると、catchブロックで処理したため、値10が返されます。

Wcf例外処理6

  • ステップ2 *-このステップでは、FaultExceptionを使用して、サービスからクライアントに例外情報を伝えます。
public int Divide(int num1, int num2) {
  //Do something
   throw new FaultException("Error while dividing number");
}

Wcf例外処理7

  • ステップ3 *-FaultContractを使用してエラーメッセージを送信するカスタムタイプを作成することもできます。 カスタムタイプを作成するために不可欠な手順は以下に記載されています-

タイプはデータコントラクトの使用によって定義され、返されることを目的としたフィールドが指定されます。

サービス操作は、FaultContract属性によって装飾されます。 タイプ名も指定されます。

サービスインスタンスが作成されて例外が発生し、カスタム例外プロパティが割り当てられます。