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

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

内容简介: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,”的文章


以上所述就是小编给大家介绍的《AY] 那天有个小孩教我WCF - 版本控制 【5/31】》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

About Face 3 交互设计精髓

About Face 3 交互设计精髓

Alan Cooper、Robert Reimann、David Cronin / 刘松涛 / 电子工业出版社 / 2008-11 / 72.00元

本书是一本数字产品和系统的交互设计指南,全面系统地讲述了交互设计过程、原理和方法,涉及的产品和系统有个人电脑上的个人和商务软件、Web应用、手持设备、信息亭、数字医疗系统、数字工业系统等。运用本书的交互设计过程和方法,有助于了解使用者和产品之间的交互行为,进而更好地设计出更具吸引力和更具市场竞争力的产品。 全书分成3篇:第1篇描述了“目标导向设计”,详细讨论了用户和设计的过程及思想;第2篇讲......一起来看看 《About Face 3 交互设计精髓》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

MD5 加密
MD5 加密

MD5 加密工具