验证客户端和服务器应用程序之间的WCF接口是否相同

时间:2011-06-08 16:32:22

标签: wcf wcf-client

我们有一个通过双工WCF通道连接到各种客户端应用程序的Windows服务。客户端和服务器应用程序安装在不同的计算机上,位于不同的位置,可能在不同的时间,以及不同的人员。此外,客户端可以指向启动时运行相同Windows服务的其他计算机。

展望未来,我们知道客户端和服务器应用程序之间的接口可能会发展。现场应用程序将由本地IT人员管理,我们无法真正控制将在何处/何处或将连接到另一个应用程序时安装这些应用程序的哪个版本。由于这些安装在不同的物理位置和不同的人,因此客户端或服务器应用程序与其他应用程序相比可能会过时。

由于我们无法控制现场应用程序的哪些版本试图相互连接,因此我希望能够验证客户端应用程序与服务器应用程序之间的合同是否兼容。

我正在寻找的一些东西(可能无法实际获得它们):

  • 我认为我不关心服务器的界面是新的还是旧的,只要服务器的界面是客户端的超级集合
  • 我想使用“接口版本号”以外的其他内容。任何开发者保留的版本号最终都会被遗忘或遗漏。
  • 如果可能的话,我想使用计算接口比较

我该怎么做?关于如何解决这个问题的任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:1)

这似乎是设计版本服务的一种情况。 WCF具有非常好的版本控制功能和扩展点。以下是关于版本化service contract的两篇优秀的MSDN文章,更具体地说是data contracts.。有关向后和“转发”兼容版本控制,请查看此article on using the IExtensibleDataObject界面。

答案 1 :(得分:0)

如果服务器的端点启用了元数据发布,则可以使用MetadataResolver class以编程方式检查端点的接口。此类允许您从服务器端点检索元数据,在您的情况下,您将对包含所有操作列表的ContractDescription感兴趣。然后,您可以将操作列表与client proxy's endpoint operations进行比较。

当然,现在需要比较操作列表,您可以简单地比较操作名称,如果在服务器的操作中找不到客户端的操作,则会失败。这不一定涵盖所有不兼容性,例如。请求/响应模式更改。

顺便说一下,我还没有尝试过实现这一点,所以它更多地是对你的问题的理论观点。如果您不想摆弄框架,可以实现一个返回操作名称列表的自定义操作。这将是最小的努力,但不太符合标准。