SOAP 故障是一种将错误或故障条件从服务传输到消费者的机制。SOAP 规范包括对 SOAP 错误的定义,当错误发生时为消息体的内容提供结构。这使得所有不同的 SOAP 堆栈都可以以标准方式发出错误。
FaultException
用于将无类型的故障数据发送回消费者。
FaultException<TDetail>
用于将类型化的故障数据发送回客户端的通用版本,其中 TDetail 表示要作为 SOAP 故障消息的一部分序列化回消费者的详细故障信息的类型参数。
同样在 System.ServiceModel 中定义的FaultContractAttribute
FaultContractAttribute 使服务开发人员能够声明如果出现问题,给定的服务操作可能会发出哪些故障。以下是与使用 FaultContractAttribute 相关的关键信息:
该属性只能应用于操作。
该属性不被继承。
该属性可以多次应用;例如,如果您的服务操作可能会返回不同类型的故障,那么您将拥有FaultContractAttribute
每种故障类型的声明。
该属性的构造函数采用一个 Type 对象,该对象用于引用 Detail 对象的 .NET 类型,即您希望与故障捆绑的故障信息详细信息的类型。
[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;
}
}
*请注意,在此示例中,您可以定义自己的自定义异常类,而不是字符串类。