让客户端通过添加对服务的引用(基本上是为您生成所有内容)或让客户端实现共享接口并且必须手动编写类代码来使用WCF服务有什么利弊?
谢谢!
答案 0 :(得分:2)
如果您自动生成代码,则会出现维护问题。 每当您更改界面或任何服务器配置时,都必须重新生成它。
出于这个原因,我永远不会从公开的元数据生成客户端。
接口应在一个库中定义。我们称这个库为 MyContractsLib 。服务实现应该在一个单独的程序集中(我称之为 MyContractsImplementation )。客户应该进入另一个集会。
然后,客户端应使用ChannelFactory来创建服务。
var cf = new ChannelFactory<MyContractsLib.MyContract>(this.EndpointName);
MyContractsLib.MyContract serviceProxy = cf.CreateChannel();
唯一需要保证的服务是由第三方开发,并且您独立编写客户端应用程序。
如果您有时间和倾向,请参阅this presentation深入探讨。
答案 1 :(得分:2)
一般来说,如果你不使用代码生成,那么你必须手动编写将为你生成的内容。
当服务合同发生变化时,简单地使用“更新服务参考”解决了安德鲁提到的“维护问题”。如果这变得很麻烦,那么创建一个单独的项目来包含所有代理类。然后,您只需在一个地方使用“更新服务参考”。
当然,如果服务合同或相关合同以不可比的方式发生变化,那么您的客户代码将不得不改变。无论您使用哪种技术,都是如此。