【发布时间】:2012-09-10 02:04:36
【问题描述】:
在我工作的公司中,有 3 个团队在从事不同的项目,当涉及到在这些项目之间使用 Web 服务时,我很纠结是应该通过“添加服务参考”还是我们可以将合同作为程序集共享并使用 ChannelFactory 来调用它吗?任何推荐的解决方案或有没有比这更好的解决方案?
【问题讨论】:
标签: wcf web-services design-patterns
在我工作的公司中,有 3 个团队在从事不同的项目,当涉及到在这些项目之间使用 Web 服务时,我很纠结是应该通过“添加服务参考”还是我们可以将合同作为程序集共享并使用 ChannelFactory 来调用它吗?任何推荐的解决方案或有没有比这更好的解决方案?
【问题讨论】:
标签: wcf web-services design-patterns
我建议添加服务引用来生成客户端代理,而不是将合同作为程序集共享。它在服务和客户端之间提供了较弱的耦合。在这两种情况下,您都可以使用ChannelFactory<T> 来调用服务,只是在第一种情况下T 将由svcutil.exe 为您生成,而在第二种情况下它将来自共享程序集。
【讨论】:
喜欢关于软件开发的大多数问题,这取决于:)。
如果您的服务是保持您的核心/业务逻辑的东西,并且构建客户端是为了为服务制作 UI,我看不到客户端和服务耦合的问题,因为客户端的目的是耦合到某些服务。
如果不是这种情况,并且客户有更广泛的目的,并且考虑到以下因素,使用服务只是其功能的一小部分,而不是我想的: - 在共享合同的情况下,您不必在合同更改的情况下更改/重新生成客户端,因为它会自动传播,因为双方都使用相同的类型。这还有一个好处,那就是,如果在服务端发生了一些变化(消息字段被删除/重命名),它将自动破坏客户端的构建,并且通常整个事情可以更快地修复。否则您必须等待第一次调用(或系统测试)以通知服务已更改并且某些内容不正常(使用添加服务引用方法也有实现此目的的方法)。
在某些情况下,您不希望新版本的服务合同影响客户端代码,并且希望客户端独立工作(构建)。在这种情况下,生成客户端将是更好的方法。
基本上答案在于客户端和服务是分开开发的还是它们是同一个项目/应用程序的一部分..
是的,在这两种情况下你都可以使用 ChannelFactory
【讨论】: