3

我对如何使用 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 呢?您将如何处理业务规则错误?即:客户已经存在,订单项太多,不发货到该地区,付款方式不接受等?

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

4

1 回答 1

2

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

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

于 2009-05-03T21:11:08.667 回答