在WCF服务中,如果在客户端(使用服务的客户端)完成实现后添加了方法作为操作合同,会发生什么情况?即使他们不使用新的操作契约方法,现有客户端是否必须修改他们的实现?编辑:即使客户端不使用新合同,他们是否必须更新代理?
不会的,服务中的新操作契约不会破坏客户端的接口。只要客户端依赖的方法签名保持不变,您就可以自由更改接口。这意味着您可以添加任意数量的新接口成员。
我刚刚实现了一个类似的解决方案。最初,我创建了一个新接口来扩展当前的ServiceContract,使用“服务契约继承”,更新端点定义以提供新派生接口 (如本文所建议的)。
对于连接的其他.Net应用程序来说这是好的,那些寻找“旧”接口的应用程序得到了它,而那些寻找“新”的应用程序则获得了新接口。
问题在于,我有一个非.NET应用程序,它正在寻找一个明确硬编码的绑定,“BasicHttpBinding_IOriginalInterface”,但新服务却提供了“BasicHttpBinding_IDerivedInterface”。
通过使用共同的ServiceContractName [ServiceContract(Name="IOriginalInterface")]
统一两个接口,解决了这个问题,正如本文所推荐的。
如果您关心版本控制,我的建议是采用契约优先的方法:WSDL 应该是需要进行版本控制的,因为当客户想要使用您的服务时,他们所暴露的就是 WSDL。让 WCF(或任何其他 Web 服务技术)在没有您直接控制的情况下更改 WSDL,迟早会给您(或您的客户)带来痛苦。
请参见WCF - contract-first vs. code-first以及一些工作流建议。