WCF使用SOAP进行故障

时间:2009-05-03 21:07:50

标签: wcf soap faults

我对如何使用SOAP将错误返回给客户端感到困惑。

我有一个wcf服务,但我不确定客户端使用的是什么技术,所以我想坚持使用SOAP规范。

据我所知,故障消息似乎是解决此问题的最佳方法。

我可以看到我的服务有许多不同的可能错误:

  • 空\预期数据错误
  • 数据格式错误(即:db只允许3个字符)
  • 数据范围错误“客户已存在”,“无法处理您的请求”类型错误

为每个故障创建一个新对象并按原样抛出是否合适:

FaultException<NullFault>(nf);  
FaultException<InvalidDataFault>(idf);  
FaultException<ArguementFault>(af);  
FaultException<RangeFault>(rf);  

客户端将具有许多属性的大对象传递给几乎所有方法 (即:客户,订单等)。

这是处理错误并发送回客户端的正确方法吗?

将每个错误添加到方法上方的属性似乎不合适。

IE:

[OperationContract]  
[FaultContract(typeof(NullFault))]  
[FaultContract(typeof(InvalidDataFault))]  
[FaultContract(typeof(ArguementFault))]  
[FaultContract(typeof(RangeFault))]  
void CreateCustomer(Customer customer);  

另外,GenericFault怎么样?您将如何处理业务规则错误?即:客户已经存在,订单项太多,没有发货到那个区域,付款方式不被接受等等?

如果此方法正确或是否有其他已接受的解决方案以及您将如何处理“业务规则”情况,请告知我们。

1 个答案:

答案 0 :(得分:2)

返回故障是一般的正确方法,但您也应该问自己客户端程序将如何处理您在故障中返回的信息。如果客户只需要知道发生了故障,那么您所需要的只是一个故障。该错误可能包括客户端可以向其用户显示的消息文本。

如果客户端需要根据NullFault或RangeFault采取不同的操作,那么就需要单独的故障。但是如果彼此之间没有区别,那么请节省自己和客户端程序一些时间和精力,只定义一个故障。