我对如何使用SOAP将错误返回给客户端感到困惑。
我有一个wcf服务,但我不确定客户端使用的是什么技术,所以我想坚持使用SOAP规范。
据我所知,故障消息似乎是解决此问题的最佳方法。
我可以看到我的服务有许多不同的可能错误:
为每个故障创建一个新对象并按原样抛出是否合适:
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怎么样?您将如何处理业务规则错误?即:客户已经存在,订单项太多,没有发货到那个区域,付款方式不被接受等等?
如果此方法正确或是否有其他已接受的解决方案以及您将如何处理“业务规则”情况,请告知我们。
答案 0 :(得分:2)
返回故障是一般的正确方法,但您也应该问自己客户端程序将如何处理您在故障中返回的信息。如果客户只需要知道发生了故障,那么您所需要的只是一个故障。该错误可能包括客户端可以向其用户显示的消息文本。
如果客户端需要根据NullFault或RangeFault采取不同的操作,那么就需要单独的故障。但是如果彼此之间没有区别,那么请节省自己和客户端程序一些时间和精力,只定义一个故障。