大型 WCF 服务的最佳实践?
Posted
技术标签:
【中文标题】大型 WCF 服务的最佳实践?【英文标题】:Best practice for large WCF service? 【发布时间】:2010-09-19 00:20:20 【问题描述】:编写一个包含大量 OperationContract 和 DataContract 的大型 wcf 服务的最佳实践是什么?
我如何将功能区域分成几个合同,最好为每个功能区域创建一个端点?
有什么方法可以将不同部分的来源分开,但仍然只为所有这些部分使用一种服务?
我从哪里可以获得有关如何计划合同、包含哪些内容、如何拆分...的好信息?
【问题讨论】:
【参考方案1】:自服务成立以来,这一直是围绕服务的一个大问题。 SOA 成功完成是您所说的 SOA 计划。话虽如此,我一直更倾向于将服务拆分,但以复合方式使用它们。也就是说,当您有多个合同时,有几个端点,但其中大多数仅由非服务调用者使用的少数端点使用。 (哇,那是一口,它甚至有意义吗?)
另外,我建议尽可能少签订合同。太多的合同会导致可管理性差。良好的合约设计将有助于限制端点和服务调用的数量。从合同设计中删除 OO 概念是这样做的一种方法。合同设计本身就是一个庞大的话题,但可以说,通过良好的合同规划(预先),良好的服务设计就足够了。
Maarten Mullender writes a great blog 谈 WCF 设计,必读。还出现了一些很棒的 SOA/WCF 书籍。
一些好书:
Pro WCF: Practical Microsoft SOA Implementation Programming WCF【讨论】:
我同意其中的大部分内容。并且一定要将 Maarten Mullender 的博客添加到您的提要中! 太好了,谢谢 - 添加博客,现在阅读存档!【参考方案2】:我将在这里偏离轨道,说我使用了整体 WCF 合同、功能分离的合同(在他的书中 Juval 的指导方针中最多有十种方法),我还尝试了一个消息处理架构,其中服务有一个接收基本消息的方法,以及“知道”如何在消息通过网络后解包和处理消息的处理程序。
如果您在栅栏的两边都有 .NET,我是后者的忠实拥护者。 Oren 用代码对这个想法进行了截屏。我不知道您的需求是什么,但这对我有用。
http://ayende.com/Blog/archive/2008/03/30/Hibernating-Rhinos-8--Going-Distributed-amp-Building-our-own.aspx
也就是说,如果您已经来自“我需要大型 WCF 服务”,那么采用一种方法可能不会为您解决问题。如果这是真的,那么 Juval Lowy 的 Programming WCF Services 就是您在设计中应该坚持的标准。
【讨论】:
【参考方案3】:这对我很有帮助,它来自 idesign.net 网站,由 Juval Lowy 撰写:
WCF Coding Standard
【讨论】:
URL 已更改 idesign.net/Downloads/GetDownload/1987 或我所做的 idesign.net/Downloads 并在杂项部分中找到【参考方案4】:我在这里有一篇关于单个操作应该与传统代码操作有何不同的帖子:
http://www.iserviceoriented.com/blog/post/Introduction+to+Service+Oriented+Architecture.aspx
您最终应该只针对实际业务事件进行操作。如果您停下来想“我需要在我的 Web 服务上启用事务支持”,这意味着您没有设计足够广泛的操作。您永远不必启用 Web 服务事务支持。
我强烈推荐 Bill Poole 的博客以了解更高级别的 SOA 概念。这是一个开始的帖子:
http://feeds.feedburner.com/~r/BillPoolesCreativeAbrasion/~3/328955489/service-contract-stability.html
【讨论】:
【参考方案5】:我知道这是一篇旧文章,但我对服务的思考方式与我对编程中的对象的思考方式相同。
将他们必须做的事情保持在最低限度。当然不会走极端,但我是根据数据实体做出决定的。
一种服务用于帐户,一种用于产品等。
不知道大家会怎么想……
【讨论】:
以上是关于大型 WCF 服务的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章