服务响应上下文与否

时间:2011-11-23 06:31:54

标签: wcf soa

调用状态更改服务时,例如

void SaveCustomer(Customer customer)

可能会发生以下情况

  1. 参数无效
  2. 发生异常
  3. 授权不成功
  4. 违反了商业规则
  5. 一切都很好
  6. 对于条件1-3,我认为服务应该返回一个适当的例外 对于#4,我也认为该服务应该返回一个异常,但有些人认为它应该返回一个反映调用成功与否的对象(一个响应对象)。

    在我们的案例中,违反业务规则是最终用户选择替代操作的机会。我认为列出错误代码的自定义异常可以由客户端解析并进行本地化。响应对象可以以更强类型的方式执行相同的操作。

    使用响应对象,我们需要满足将堆栈备份到服务的路径(if(ok)等),并且我们不能依赖于取消事务的异常。

    这些选项中的任何一个都是反模式吗?

1 个答案:

答案 0 :(得分:1)

您的商家信息中还没有提到第三种方法。该方法称为预期异常。 Web服务中的请求 - 响应操作提供了三种类型的消息的定义:

  • 输入=请求。每次操作只能定义一次。
  • 输出=成功回复。每次操作只能定义一次。
  • 错误=预计响应不成功。您可以为每个操作定义零个或多个故障。

使用故障时,告诉客户端由于某些明确定义的原因操作可能会失败。例如,不完整的客户定义和客户端可以以与常见的意外SOAP故障不同的方式处理此故障。

在WCF中,预期的错误通过FaultContract和通用FaultException<>来处理。检查this article及其子文章以了解故障处理。

错误处理的实现主要取决于您。返回自定义对象在操作只能部分成功的复杂场景中尤其有用,您必须报告成功和失败的部分。