调用状态更改服务时,例如
void SaveCustomer(Customer customer)
可能会发生以下情况
对于条件1-3,我认为服务应该返回一个适当的例外 对于#4,我也认为该服务应该返回一个异常,但有些人认为它应该返回一个反映调用成功与否的对象(一个响应对象)。
在我们的案例中,违反业务规则是最终用户选择替代操作的机会。我认为列出错误代码的自定义异常可以由客户端解析并进行本地化。响应对象可以以更强类型的方式执行相同的操作。
使用响应对象,我们需要满足将堆栈备份到服务的路径(if(ok)等),并且我们不能依赖于取消事务的异常。
这些选项中的任何一个都是反模式吗?
答案 0 :(得分:1)
您的商家信息中还没有提到第三种方法。该方法称为预期异常。 Web服务中的请求 - 响应操作提供了三种类型的消息的定义:
使用故障时,告诉客户端由于某些明确定义的原因操作可能会失败。例如,不完整的客户定义和客户端可以以与常见的意外SOAP故障不同的方式处理此故障。
在WCF中,预期的错误通过FaultContract
和通用FaultException<>
来处理。检查this article及其子文章以了解故障处理。
错误处理的实现主要取决于您。返回自定义对象在操作只能部分成功的复杂场景中尤其有用,您必须报告成功和失败的部分。