AY] 那天有个小孩教我WCF - 版本控制 【5/31】

栏目: ASP.NET · 发布时间: 7年前

内容简介:AY] 那天有个小孩教我WCF - 版本控制 【5/31】

====================www.ayjs.net       杨洋    wpfui.com        ayui      ay  aaronyang=======请不要转载谢谢了。=========

本次,我们继续上篇的DEMO继续写 该版本的控制

服务 经常更新,每次更新,可能有的客户没有进行客户端更新,为了不让那些旧客户报错什么的,代码写的就要有兼容性。

所以接口的设计在一开始就要 考虑好。

默认wcf的DataContractSerializer序列化器对数据契约的结构的变化非常 “宽容”

=》 方法的参数可增可减

=》数据成员可增可减

=》数据类型可以改变,前提是必须保持兼容

=》可以增加方法

所有文章内容东西,AY手打总结,转载复制不标记来源位置的,都属于耍流氓,发现,后续文档增加密码阅读。

====================www.ayjs.net       杨洋    wpfui.com        ayui      ay  aaronyang=======请不要转载谢谢了。=========

第二个,方法上代码的技巧

我们可以在 方法的返回值类型,加一个flag字段,标记版本,然后调用方法的时候,自己根据flag决定怎么做到兼容操作。

问题2:

我们现在需要在返回值,加一个属性,例如 AyDemo,但是这个,有些客户端的代理类没更新是不知道他的存在的。所以无法进行反序列化。

wcf提供了 IExtensibleDataObject接口

AY] 那天有个小孩教我WCF - 版本控制 【5/31】

加属性的需求,解决办法是 实现IExtensibleDataObject接口定义必不可少的,ExtensibleDataObject对象是解决该问题的。如果DataContractSerializer序列化器在XML文档中检测到未知的元素,那么在反序列化时,会把它写入ExtensionDataObject属性包。当再次引用ExtensionDataObject对象的内容时,内容保留,因此在数据契约的不同版本之间,数据不会丢失。

如果使用AddServiceReference对话框引用的服务数据类会自动实现此接口。

AY] 那天有个小孩教我WCF - 版本控制 【5/31】

所以如果手工代理的话,如果想用到这个东西,必须手动实现此接口了。

通常,在配置文件中将一个服务的行为设置,是否阻止此功能。 如果开启了服务端扩展数据,可能会有安全的问题。

AY] 那天有个小孩教我WCF - 版本控制 【5/31】

总结: 服务契约级别:

可以在任何时候增加新方法

可以不删除任何已存在的方法

参数的数据类型必须保持兼容。

数据契约实践:

1 不要由于继承的原因给数据契约增加一个新版本,而是应该创建一个独立的数据类。

2 为了方便双向版本控制,必须一开始实现IExtensiableDataObject接口

3 如果确实需要改变数据类型或数据成员的名称请使用DataContract或者DataMember特性生成兼容的数据契约

4 不要随便对数据类型进行修改

5 不要改变由[DataMember(Order=?)]属性确定的数据成员的顺序。

6 保持IsRequired的默认值(false)不变。

7 可以在任何时候添加数据成员,但是必须记住,这回改变序列化的顺序,把新成员的Order属性设置当前版本值。

8 不要删除数据成员

9 不要对IsRequired属性做后续的修改。

DataMember特性也有个Name属性,可以改变客户端代理生成的原来的属性名。通过Order改变版本号,改变生成 xml的 成员的顺序。保持兼容性。

====================www.ayjs.net       杨洋    wpfui.com        ayui      ay  aaronyang=======请不要转载谢谢了。=========

推荐您阅读更多有关于“WCF,”的文章


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Practical Vim, Second Edition

Practical Vim, Second Edition

Drew Neil / The Pragmatic Bookshelf / 2015-10-31 / USD 29.00

Vim is a fast and efficient text editor that will make you a faster and more efficient developer. It’s available on almost every OS, and if you master the techniques in this book, you’ll never need an......一起来看看 《Practical Vim, Second Edition》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

MD5 加密
MD5 加密

MD5 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具