具有WCF职责和依赖关系的SOA

时间:2009-11-20 20:34:17

标签: c# wcf architecture soa

我正在转向一个使用SOA和WCF实现解决方案的新团队。这些服务都是非常垂直的,例如:CustomerService,AddressService,AccountService等。要返回完全填充的对象,服务可以通过wcf端点调用另一个服务。

有一些非常高级别的垂直区域,但在下面它们可以重用许多核心服务逻辑。

以下新架构的有效性如何:

webservices是处理远程调用的薄层;他们严格要求沟通。真正的功能将在一些叫做“业务或域名服务”的东西中实现。

域名服务职责:

  • 用于使用基础架构的参考数据访问/存储库接口
  • 调用多个存储库方法以创建完全填充的对象
  • 针对复杂业务规则处理数据
  • 调用其他域名服务(无需调用WCF)

这将为我们提供可以在特定WCF和SQL Server实现之外进行测试的域服务。

重复使用不同商业服务的网络服务似乎是最大的收获,但也是最大的潜在陷阱。

  • 一方面,逻辑可以重用于多个服务,从而消除了Web服务调用Web服务调用Web服务。
  • 另一方面,如果有人更改其中一个程序集,则需要更新多个服务,这可能会破坏多个应用程序。

有人试过这个并取得了成功吗?有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

乍一看,听起来你走进的设计可能是an SOA antipattern identified in this article:一组“聊天服务”,一个作者用来描述......的情况...... >

  开发人员通过实现一个实现服务   每个Web服务的数量   传达一小块数据。   同一反模式的另一种味道   是在执行时   服务最终在一个健谈的对话框中   传达微小的片断   信息而不是组成   数据在综合文档中   形式。

作者继续说道:

  

性能下降且成本高昂   发展是主要后果   这个反模式。另外,   消费者必须付出额外的努力   聚合这些太细粒度的   为实现任何利益而提供的服务   以及如何获得知识   一起使用这些服务。

答案 1 :(得分:0)

这可能是一种有效的方法。更新多项服务的缺陷取决于服务的相关程度。您是否有一个用例,如果客户服务更新并且地址服务不是客户端仍然可以工作,或者更常见的是所有服务由同一客户端使用,因此应该一起更新。请记住,只有在WSDL更改而不是实现时,服务才会更改。如果您设法不更改前端服务的DataContracts和OperationContracts,则无后顾之忧。
您可以调查的一种方法是为您的域服务使用进程内WCF服务。或者,前端Web服务可以在单独的y分层程序集中使用域管理器/引擎,而这些程序集又使用存储库。对于可实现mocakble和单元可测试的域实体,您可以拥有粗粒度的Web服务类实现和细粒度管理器。