且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

WCF 实体更改发布后,如何不影响调用方?

更新时间:2022-09-12 23:37:17

应用场景:使用 WCF 有一个坏处,就是如果我们经常对 WCF 应用程序更新,有时候调用方也要进行 Update Service,但调用方往往会很多,那么这个工作就会很讨厌,比如 WCF Service 返回的实体类型更改了,这时候不更新调用方就会报错,怎么解决这个问题?

原始 ProductDTO:

namespace Sample.App.Application.DTO
{
    [Serializable]
    [DataContract]
    public class ProductDTO
    {
        [DataMember]
        public int ID { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public string Size { get; set; }
    }
}

更改后的 ProductDTO:

namespace Sample.App.Application.DTOs
{
    [Serializable]
    [DataContract]
    public class ProductDTO
    {
        [DataMember]
        public int ID { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public string Size { get; set; }
        public string Remark { get; set; }
    }
}

两个更改:

  • 命名空间 Sample.App.Application.DTO 改为 Sample.App.Application.DTOs。
  • 增加 Remark,但是不想暴露给调用方。

如果我们不更新调用方,这时候将获取不到 ProductDTO,但不会报错。

解决方式:

namespace Sample.App.Application.DTOs
{
    [Serializable]
    [DataContract(Namespace = "http://schemas.datacontract.org/2004/07/Sample.App.Application.DTO")]
    public class ProductDTO
    {
        [DataMember]
        public int ID { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public string Size { get; set; }
        [IgnoreDataMember]
        public string Remark { get; set; }
    }
}

注:

  • DataContract - Namespace:自定义类型命名空间,和调用方保持一致。
  • IgnoreDataMember:忽略属性映射。
本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/4786791.html,如需转载请自行联系原作者