WCF版本更新应用直接修改方法实现

大多数开发人员在使用WCF进行版本更新时,大部分都会通过继承的方式来实现。那么,还有没有其他更加简便的方式呢?下面我们就为大家介绍一种直接修改原有服务和数据类型的方法来实现WCF版本更新。

创新互联建站于2013年开始,是专业互联网技术服务公司,拥有项目成都网站建设、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元卧龙做网站,已为上家服务,为卧龙各地企业和个人服务,联系电话:13518219792

WCF版本更新测试原型:

 
 
 
  1. [DataContract]  
  2. public class Data  
  3. {  
  4. [DataMember]  
  5. public int x;  
  6. }  
  7. [ServiceContract]  
  8. public interface IMyService  
  9. {  
  10. [OperationContract]  
  11. void Test(Data d);  

客户端代理

 
 
 
  1. //------------------------------------------  
  2. // < auto-generated> 
  3. // 此代码由工具生成。  
  4. // 运行库版本:2.0.50727.42  
  5. //  
  6. // 对此文件的更改可能会导致不正确的行为,并且如果  
  7. // 重新生成代码,这些更改将会丢失。  
  8. // < /auto-generated> 
  9. //-------------------------------------------  
  10. namespace ConsoleApplication1.localhost  
  11. {  
  12. [GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]  
  13. [DataContractAttribute(Namespace = "...")]  
  14. [SerializableAttribute()]  
  15. public partial class Data : object, IExtensibleDataObject  
  16. {  
  17. [OptionalFieldAttribute()]  
  18. private int xField;  
  19. [DataMemberAttribute()]  
  20. public int x  
  21. {  
  22. get  
  23. {  
  24. return this.xField;  
  25. }  
  26. set  
  27. {  
  28. this.xField = value;  
  29. }  
  30. }  
  31. }  
  32. [GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]  
  33. [ServiceContractAttribute(ConfigurationName = 
    "ConsoleApplication1.localhost.IMyService")]  
  34. public interface IMyService  
  35. {  
  36. [OperationContractAttribute(Action = "http://tempuri.org/IMyService/Test", 
    ReplyAction = "...")]  
  37. void Test(Data d);  
  38. }  
  39. [GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]  
  40. public interface IMyServiceChannel : IMyService, IClientChannel  
  41. {  
  42. }  
  43. [DebuggerStepThroughAttribute()]  
  44. [GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]  
  45. public partial class MyServiceClient : ClientBase< IMyService>, 
    IMyService  
  46. {  
  47. public void Test(Data d)  
  48. {  
  49. base.Channel.Test(d);  
  50. }  
  51. }  

我们将对该服务和数据类型进行升级,添加新的成员和服务方法来实现WCF版本更新。

 
 
 
  1. [DataContract]  
  2. public class Data  
  3. {  
  4. [DataMember]  
  5. public int x;  
  6. [DataMember]  
  7. public int y;  
  8. }  
  9. [ServiceContract]  
  10. public interface IMyService  
  11. {  
  12. [OperationContract]  
  13. void Test(Data d);  
  14. [OperationContract]  
  15. void Test2(int x);  

测试结果表明,客户端在不更新代理文件的情况下依然正常执行。看来直接通过修改进行版本更新也没有什么问题。要是我们修改了成员的名称会怎么样?也没问题,不过要使用 Name 属性了。

 
 
 
  1. [DataContract]  
  2. public class Data  
  3. {  
  4. [DataMember(Name="x")]  
  5. public int x2;  
  6. [DataMember]  
  7. public int y;  
  8. }  
  9. [ServiceContract]  
  10. public interface IMyService  
  11. {  
  12. [OperationContract]  
  13. void Test(Data d);  
  14. [OperationContract]  
  15. void Test2(int x);  

WCF版本更新的操作提示:

1. ***为服务和相关成员特性添加 Namespace / Name 属性。

2. 还是使用继承方式进行版本更新要好些,避免因为意味更改造成原有客户端无法执行。

分享名称:WCF版本更新应用直接修改方法实现
当前网址:http://www.mswzjz.cn/qtweb/news12/264312.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能