【问题标题】:WCF / WSDL Service VersionWCF/WSDL 服务版本
【发布时间】:2025-12-11 23:15:02
【问题描述】:

我正在寻找一种方法来版本服务。

到目前为止,我们已经建立了宽松的版本控制原则。对于次要版本,我们保持向后兼容性。对于重大更改,我们强制使用新的主要版本。

对于主要版本,我们不介意更改服务的名称(我们可以更改命名空间,但我们选择了名称)。

对于次要版本,我们不想更改名称或命名空间,因为这会破坏依赖旧次要版本的客户端。

我的问题是:我们如何才能发现如何实现版本发现呢? WSDL 中似乎没有一个地方可以放置不会违反合同的“信息”。我想要的方法是告诉给定环境(例如登台与生产),当前部署的服务版本是什么。

WSDL 似乎很自然,因为它可以通过 HTTP-GET (REST) 访问,并且不需要引入非业务 SOAP 服务操作(例如 int GetCurrentVersion() )。

有什么想法吗?

【问题讨论】:

    标签: wcf wsdl


    【解决方案1】:

    WSDL 确实具有包含“wsdl:document”标签以添加文档的功能,但对于编程访问,您可能需要自定义soap 标头。这个blog post 展示了如何使用自定义标题。 WCF Extras code 有一些简洁的行为来执行自定义soap 标题和wsdl 文档标签。 @marc_s 对this question 的回答是另一种方法。

    【讨论】:

      【解决方案2】:

      WSDL 直接没有任何此类功能,但您可以创建自定义行为,例如添加 wsdl:documentation 描述您的合同版本。添加影响 WSDL 的自定义行为的描述在 my other answer 中。操作wsdl:documentation 的完整示例在MSDN 上。

      【讨论】: