什么被认为是对WSDL合同的不间断或向后兼容的更改?

时间:2012-01-09 10:23:31

标签: web-services wsdl

This page列出了以下示例:

  • 向现有WSDL文档添加新的WSDL操作
  • 在WSDL文档中添加未包含在先前存在的类型中的新XML模式类型

但是有定义或标准吗? 什么变化被认为是向后兼容的指南。或者换句话说,您可以对合同做出哪些更改,并且仍然希望不会破坏您的客户。

2 个答案:

答案 0 :(得分:50)

我花了一些时间在这个特定的主题上,并在Thomas Erl的一本书中找到了一些指导,我在底部提到了这本指南。这是他们要说的;

兼容的更改

  • 添加新的WSDL操作定义和关联的消息定义
  • 添加新的WSDL端口类型定义和关联的操作定义
  • 添加新的WSDL绑定和服务定义
  • 向消息定义添加新的可选XML Schema元素或属性声明
  • 减少XML Schema元素的约束粒度或消息定义类型的属性
  • 将新的XML Schema通配符添加到消息定义类型
  • 添加新的可选WS-Policy断言
  • 添加新的WS-Policy备选方案

不兼容的更改

  • 重命名现有的WSDL操作定义
  • 删除现有的WSDL操作定义
  • 更改现有WSDL操作定义的MEP
  • 将故障消息添加到现有WSDL操作定义
  • 向消息添加新的必需XML Schema元素或属性声明 定义
  • 增加XML Schema元素或属性声明的约束粒度 消息定义
  • 重命名消息中的可选或必需的XML Schema元素或属性 定义
  • 删除可选或必需的XML Schema元素或属性或通配符 来自消息定义
  • 添加新的必需WS-Policy断言或表达式
  • 添加新的可忽略的WS-Policy表达式(大部分时间)

Thomas Erl等人对这一特定主题有一本很好的书;名称是Web服务合同设计& SOA的版本控制。

HTH。

免责声明:正如我所提到的,这是本书作者所做的工作,我只是分享它。反正我也不隶属于此;只是喜欢这本书:)

答案 1 :(得分:3)

其他可选请求元素(minoccurs = 0)也可以向后兼容 - 这取决于主机端服务的实现。 此外,将强制响应元素更改为可选 也可以向后兼容 - 这取决于您的客户端的实现。

这方面很棘手。

如果您真的担心向后兼容性,请考虑为新客户端创建新版本的服务,并保留现有客户端的现有实现。此外,通常,避免通过您的服务发送域对象 - 使用DTO。

希望这有帮助。