wcf - SOA 实现中的请求/响应模式

标签 wcf soa

在一些类似企业的项目(.NET、WCF)中,我发现所有服务契约都接受单个 Request 参数并始终返回 Response:

[DataContract]
public class CustomerRequest : RequestBase {
        [DataMember]
        public long Id { get; set; }
}

[DataContract]
public class CustomerResponse : ResponseBase {
        [DataMember]
        public CustomerInfo Customer { get; set; }
}

其中 RequestBase/ResponseBase 包含常见的内容,例如 ErrorCode、Context 等。服务方法和代理的主体都包装在 try/catch 中,因此检查错误的唯一方法是查看 ResponseBase.ErrorCode(枚举)。

我想知道如何调用此技术以及为什么它比将所需内容作为方法参数传递并使用标准 WCF 上下文传递/故障机制更好?

最佳答案

您所讨论的模式是基于契约(Contract)优先开发的。但是,您不必在 WCF 中使用 Error block 模式,您仍然可以将错误异常抛出回客户端,而不是使用 Error Xml block 。 Error block 已经使用了很长时间,因此很多人都习惯了它的使用。此外,其他平台开发人员(例如 java)对故障异常并不熟悉,尽管它是行业标准。
http://docs.oasis-open.org/wsrf/wsrf-ws_base_faults-1.2-spec-os.pdf

请求/响应模式在 SOA(面向服务的架构)中非常有值(value),我建议使用它,而不是创建接受参数并传回值或对象的方法。当您开始创建消息时,您就会看到好处。如前所述,它们从契约(Contract)优先开发演变而来,首先使用 XSD 创建消息并根据 XSD 生成类。此过程用于经典 Web 服务中,以确保所有数据类型都能在 SOAP 中正确序列化。随着 WCF 的出现,datacontractserializer 变得更加智能,并且知道如何序列化以前无法正确序列化的类型(例如 ArrayLists、List 等)。

请求-响应模式的好处是:

  • 您可以从基础对象继承所有请求和响应,在这些对象中您可以保持公共(public)属性(例如错误 block )的一致性。
  • 网络服务本质上应该需要尽可能少的文档。这种模式正是允许这样的。以像 public BusScheduleResponse GetBusScheduleByDateRange(BusDateRangeRequest request); 这样的方法为例,客户端默认情况下会知道要传入什么以及要返回什么,并且当他们构建请求时,他们可以看到什么是必需的,什么是可选的。假设此请求具有诸如 Carriers [Flag Enum](必需)、StartDate(必需)、EndDate(必需)、PriceRange(可选)、MinSeatsAvailable(选项)等属性...您明白了。
  • 当用户收到响应时,它可以包含比通常的返回对象更多的数据。错误阻止、跟踪信息等等,发挥你的想象力。
    在 BusScheduleResponse 示例中,这可以返回多个运营商的公交车时刻表信息的多个数组。

希望这有帮助。

请注意一点。不要感到困惑,以为我正在谈论生成您自己的 [MessageContract]。您的请求和响应是数据契约(Contract)。我只是想确保我没有让你感到困惑。任何人都不应该在 WCF 中创建自己的 MessageContracts,除非他们有充分的理由这样做。

关于wcf - SOA 实现中的请求/响应模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3051326/

相关文章:

android - 如何使用 Eclipse Indigo 在 Android 中导入 Web 服务引用?

c# - 什么时候在 WCF 服务中调用析构函数

c# - 从 UWP 中的数据库检索数据

jquery - ASP.NET JSON WCF 服务截断响应

ssl - 在 weblogic 中为出站 https 连接安装合作伙伴的 key +证书 (PFX)

ruby-on-rails - 使用 Rails 的 SAAS 架构

WCF 服务契约设计。用例 Controller 合适吗?

testing - SOA 测试

architecture - SOA 六边形/洋葱架构中的适配器模式

wcf - WCF 中的复杂数据类型?