电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

WCF面向服务应用程序系列之五:契约版本管理—版本相容性VIP免费

WCF面向服务应用程序系列之五:契约版本管理—版本相容性_第1页
1/7
WCF面向服务应用程序系列之五:契约版本管理—版本相容性_第2页
2/7
WCF面向服务应用程序系列之五:契约版本管理—版本相容性_第3页
3/7
WCF面向服务应用程序系列之五:契约版本管理—版本相容性WCF版本相容性:指WCF的服务端在更新为新版本的情况下,客户端对服务端的引用不进行更新到最新的服务端,而继续引用旧的服务端但不发性异常。WCF契约缺省是提供版本相容性支持的,所有的服务契约,数据契约与消息契约,都允许缺失、非必需(non-required)的数据存在;且可以忽略多余的数据;DataContractSerializer提供相容性支持;适当的变化并不会对现存的客户端或者服务端产生影响。开发环境:VisualStudio2010+NetFramework4.0。服务契约的变化对客户端产生的影响如下:服务契约的变化对现存客户端的影响在操作签名上添加新的参数客户端不会被影响新的参数在服务中被初始化为缺省值从操作签名中删除参数客户端不会被影响客户端传递的多余参数将被忽略,这些数据在服务端被丢失修改参数类型如果从客户端进入的类型无法转换为参数的数据类型,将会抛出异常修改返回数值的类型如果从服务端返回的值无法转换为在客户端操作签名中所期望的数据类型,那么将会抛出异常添加新的操作客户端不会被影响由于客户端不知道新加入操作的存在,因此其不会被调用删除操作抛出异常客户端发送给服务端的消息会被认为使用了未知的action头数据契约为变化对客户端产生的影响如下:数据契约的变化对现存客户端的影响添加新的non-required成员客户端不会被影响缺少的数值将会被初始化为缺省值添加新的required成员对于缺少的值,将会抛出异常删除non-required成员服务端数据丢失无法将全部数据集返回给客户端不会抛出异常删除required成员当客户端收到来自服务端带有缺失数据的响应时,将会抛出异常修改已存的成员的数据类型如果类型兼容,那么不会产生异常,但是可能会导致未知的结果下面通过DEMO来演示服务端数据契约的变化对现存客户端的影响:1、新增一个WCFServiceLibrary程序,修改解决方案名称为ContractVersion,修改项目名称为ExplicitContract,删除自动添加的文件。2、新建Item.cs类,代码如下:[DataContract(Name="ItemContract",Namespace="http://schemas.xinhaijulan.com/demos/ExplicitContract")]publicclassItem{[DataMember(Name="IdContract",IsRequired=true,Order=0)]publicintId{get;set;}[DataMember(Name="NameContract",IsRequired=true,Order=1)]publicstringName{get;set;}[DataMember(Name="MessageContract",IsRequired=true,Order=2)]publicstringMessage{get;set;}/*//////使用IsRequired=true:重新生成服务端代码,客户端不更新服务,则会引发异常///使用IsRequired=false:重新生成服务端代码,客户端不更新服务,则不会引发异常///[DataMember(Name="CreateDateContract",IsRequired=true,Order=3)]//[DataMember(Name="CreateDateContract",IsRequired=false,Order=3)]publicDateTimeCreateDate{get;set;}*/}注意注释部分。3、创建服务接口文件IExplicitService.cs,代码如下:[ServiceContract(Name="ExplicitServiceContract",Namespace="http://schemas.xinhaijulan.com/demos/ExplicitContract")]publicinterfaceIExplicitService{[OperationContract(Name="SaveItemContract")]voidSaveItem(Itemitem);[OperationContract(Name="GetItemContract")]ItemGetItem();}4、创建ExplicitService.cs类文件,代码如下:publicclassExplicitService:IExplicitService{privateItem_item;publicvoidSaveItem(Itemitem){this._item=item;}publicItemGetItem(){this._item.Message="IExplicitService.GetItem()invoked.";returnthis._item;}}5、修改App.config中的服务名称、端点契约、服务地址,代码如下:代码

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

WCF面向服务应用程序系列之五:契约版本管理—版本相容性

确认删除?
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群