我意识到WCF和服务通常是松散耦合的。
但我要求我的客户端应用程序可以检查给定的WCF端点是否包含与其生成的客户端代码匹配的服务。换句话说,我需要检查兼容的服务。
显然我可以有一个返回手动维护版本号的方法,但如果WCF可以开箱即用,我宁愿不必编写我自己的元数据系统。
答案 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在运行时创建客户端。