WCF在项目之间“添加服务引用”或“共享合同程序集”?

时间:2012-09-17 20:04:34

标签: wcf web-services design-patterns

在我工作的公司中,有3个团队负责不同的项目。当涉及到在这些项目之间使用Web服务时,我是否应该通过“添加服务参考”或我们可以作为程序集共享合同并使用ChannelFactory来调用它吗?任何推荐的解决方案或有没有比这更好的解决方案?

2 个答案:

答案 0 :(得分:3)

关于软件开发的大多数问题,取决于:)。

如果您的服务是保持您的核心/业务逻辑和客户端构建为服务创建UI的东西,我没有看到耦合客户端和服务的问题,因为客户端的目的是耦合到某些服务。 / p>

如果不是这种情况并且客户有更广泛的目的,并且消费服务只是其功能的一小部分而不是我想到的,考虑到这些因素: - 在共享合同的情况下,您不必在合同更改的情况下更改/重新生成客户端,因为它会自动传播,因为双方都使用相同的类型。这还有一个好处,那就是,如果服务端的某些内容被更改(消息字段被删除/重命名),它将自动打破客户端的构建,通常整个事情可以更快地修复。否则你必须等待第一次调用(或系统测试)来通知服务已被更改并且某些内容不正确(使用添加服务引用方法也有办法实现此目的)。

在某些情况下,您不希望新版本的服务合同对客户端代码产生影响,并且您希望客户端独立工作(构建)。在这种情况下,生成客户端将是更好的方法。

基本上回答的问题是客户和服务是单独开发的,还是属于同一项目/应用程序的一部分。

是的,在这两种情况下你都可以使用ChannelFactory

答案 1 :(得分:2)

我建议添加服务引用以生成客户端代理,而不是将合同作为程序集共享。它在服务和客户端之间提供较弱的耦合。在这两种情况下,您都可以使用ChannelFactory<T>来调用服务,只是在第一种情况下T将由svcutil.exe为您生成,而在第二种情况下,{{1}}将来自共享大会。