wcf决定:一个服务多个合同或许多服务

Pri*_*nes 8 c# architecture wcf

我使用.NET 4为客户创建一个小型客户端服务器应用程序.我应该创建一个实现许多合同的巨型服务(IInvoice,IPurchase,ISalesOrder等),还是应该创建许多服务,在许多端口上运行一个合同?我的问题特别感兴趣的是两种选择的优缺点.另外,回答这个问题的常用方法是什么?

我真正的困境是我没有做出这个决定的经验,而且我对wcf的经验不足以至于我需要帮助理解这个决定的技术含义.

Big*_*ddy 6

不要创建一个实现n个服务契约的大型服务.这些类型的服务很容易创建,但最终会成为一个维护问题,并且不会很好地扩展.另外,如果有一个开发小组竞争签到/签出,你会得到各种代码合并冲突.

也不要创建太多服务.避免使您的服务过于细化的陷阱.尝试基于功能创建服务.这些服务所暴露的方法也不应该是细粒度的.你做的更少的方法更少.通过创建GetUser(userObject用户),避免创建类似GetUserByID(int ID),GetUserByName(string Name)的函数.您将拥有更少的代码,更轻松的维护和更好的可发现性.

最后,无论你做什么,你可能只需要一个端口.

更新12/2018自从我写这篇文章以来,事情发生了变化.现在有了微服务模式,我用繁琐的API创建了很多服务:)

  • 感谢您的回答,但我的问题更多的是"为什么"这可能是性能问题,而不是"什么"是性能问题.你说"瓶颈":我知道在ISS/WCF中,每个Web请求都是一个新的Service实例.对一个单一大服务的多个请求仍然是多个实例,而不是一个服务所有实例的实例.所以没有扩展问题.这个推理是对的吗? (2认同)