SOAP 障害は、エラーまたは障害の状態をサービスからコンシューマーに転送するためのメカニズムです。SOAP 仕様には、SOAP 障害の定義が含まれており、エラーが発生した場合のメッセージ本文の内容に構造を提供します。これにより、すべての異なる SOAP スタックが標準的な方法で障害を発行できるようになります。
FaultException
型指定されていない障害データをコンシューマに送り返すために使用されます。
FaultException<TDetail>
型指定された障害データをクライアントに送り返すために使用される汎用バージョン。ここで、TDetail は、SOAP 障害メッセージの一部としてコンシューマーにシリアル化される詳細な障害情報の型パラメーターを表します。
System.ServiceModel にも定義されているFaultContractAttribute
FaultContractAttribute を使用すると、サービス開発者は、問題が発生した場合に特定のサービス操作が発行する可能性のあるエラーを宣言できます。以下は、FaultContractAttribute の操作に関連する重要な情報です。
この属性は操作にのみ適用できます。
属性は継承されません。
この属性は複数回適用できます。たとえば、サービス操作がさまざまな種類のエラーを返す可能性がある場合は、エラーの種類FaultContractAttribute
ごとに宣言を行います。
属性のコンストラクターは、Detail オブジェクトの .NET 型、つまり、障害にバンドルする障害情報の詳細の型を参照するために使用される Type オブジェクトを受け取ります。
[ServiceContract()]
public interface ICalculatorService{
[OperationContract()]
[FaultContract(typeof(string))]
double Divide(double numerator, double denominator);
}
public class CalculatorService : ICalculatorService {
public double Divide(double numerator, double denominator) {
if (denominator == 0.0d) {
string faultDetail = "You cannot divide by zero";
throw new FaultException<string>(faultDetail);
}
return numerator / denominator;
}
}
*この例の文字列クラスの代わりに、独自のカスタム例外クラスを定義できることに注意してください。