WCF-例外処理
WCFサービス開発者は、適切な方法でクライアントに報告する必要がある予期しないエラーに遭遇する可能性があります。として知られているそのようなエラーexceptions、通常はtry / catchブロックを使用して処理されますが、これもテクノロジー固有です。
クライアントの関心領域は、エラーの発生方法やエラーの原因となる要因ではないため、SOAP障害コントラクトを使用して、WCFでサービスからクライアントにエラーメッセージを伝達します。
フォールトコントラクトを使用すると、クライアントはサービスで発生したエラーを文書化して表示できます。次の例は、より良い理解を提供します。
Step 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
}
}
クラスファイルのコーディングを以下に示します-

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


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

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

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

Step 3−FaultContractを使用してエラーメッセージを送信するカスタムタイプを作成することもできます。カスタムタイプを作成するために不可欠な手順を以下に示します-
タイプはデータコントラクトを使用して定義され、返されることを目的としたフィールドが指定されます。
サービス操作は、FaultContract属性によって装飾されます。タイプ名も指定されます。
例外を発生させるためにサービスインスタンスが作成され、カスタム例外プロパティが割り当てられます。