WCF开发之版本相容性
因为我们会一直更新WCF服务或者扩展新的WCF服务,那么就不得不面对一个问题--WCF的版本控制问题。
• 一旦发布,WSDL契约就被确定
– 必须支持向后兼容
• 在理论上,策略可以发生变更
– 新的安全策略
– 附加的可靠性特性
– 策略使用元数据交换来发现
• 如果客户端能够动态地处理变化,那么仅仅改变策略是安全的
版本相容性
• WCF契约缺省是提供版本相容性支持的
• 所有的服务契约,数据契约与消息契约:
– 允许缺失,非必需(non-required)的数据存在
– 可以忽略多余的数据
• DataContractSerializer提供相容性支持
• 适当的变化并不会对现存的客户端或者服务端产生影响
下面的表格详细的说明了服务契约变化后对于客户端的各种影响:
服务契约的变化 | 服务契约的变化对现存客户端的影响 |
在操作签名上添加新的参数 |
|
从操作签名中删除参数 |
|
修改参数类型 |
|
修改返回值类型 |
|
添加新操作 |
|
删除操作 |
|
添加新的non-required成员 |
|
添加新的required成员 |
|
删除non-required成员 |
|
删除required成员 |
|
修改已存的成员的数据类型 |
|
现在描述一个场景比如说,我们在服务端添加一个required的DataMember成员,然后重新发布这个WCF服务,但是客户端不更新WCF的服务引用,在这种情况下当客户端调用WCF服务的时候WCF就会抛出一个缺少必要数据的异常。如果添加的是一个non-required的成员,那个就不会抛出异常,客户端可以正常使用。这就是所谓的版本相容性,当然实际开发中还有很多情况,只要多测试也就没有问题了。(完)