4

在我工作的公司中,有 3 个团队在从事不同的项目,当谈到在这些项目之间使用 Web 服务时,我有一个两难选择,是应该通过“添加服务参考”还是我们可以将合同作为程序集共享并使用 ChannelFactory 来叫它 ?任何推荐的解决方案或有没有比这更好的解决方案?

4

2 回答 2

3

就像关于软件开发的大多数问题一样,这取决于:)。

如果您的服务是保持您的核心/业务逻辑的东西,并且构建客户端是为了为服务制作 UI,我看不到耦合客户端和服务的问题,因为客户端的目的是耦合到某些服务。

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

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

基本上答案在于问题是单独开发的客户端和服务还是它们是同一个项目/应用程序的一部分..

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

于 2012-09-17T21:57:27.980 回答
2

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

于 2012-09-17T20:16:36.503 回答