如何检查WCF生成的客户端是否与运行时的服务兼容

时间:2010-06-07 05:08:22

标签: .net wcf

我意识到WCF和服务通常是松散耦合的。

但我要求我的客户端应用程序可以检查给定的WCF端点是否包含与其生成的客户端代码匹配的服务。换句话说,我需要检查兼容的服务。

显然我可以有一个返回手动维护版本号的方法,但如果WCF可以开箱即用,我宁愿不必编写我自己的元数据系统。

3 个答案:

答案 0 :(得分:2)

如果这适用于HTTP并且具有服务元数据并且启用了http get for service metadata,则可以从

中检索服务的WSDL。
http://yourserver/yourservice/servicefile.svc?wsdl

解析并解析该WSDL并将其与客户端代理代码进行比较。相当凌乱,啰嗦。

但是,如果禁用该服务元数据http get,您将无法再检索WSDL :-(只要仍然启用了服务元数据,您可以检查WCF类并直接从中提取元数据服务终点 - 但真的很毛茸茸......

回到你的想法:为什么版本号不够好?这可能是最简单的方法.... WCF并没有像MyClient.CheckCompatibility();或其他任何东西那样“轻松”......

答案 1 :(得分:1)

这取决于您如何定义“兼容”。

也许一个简单的版本号就足够了?也许更复杂的major.minor.revision版本号方案是必要的。在任何一种情况下,客户端都会被告知它需要哪个服务版本,并且可以在服务上调用GetVersion方法以查看该版本是否可用。

答案 2 :(得分:0)

我想到了另一种方法:

在客户端和服务器之间共享服务接口定义,然后使用ChannelFactory在运行时创建客户端。

http://msdn.microsoft.com/en-us/library/ms734681.aspx