【问题标题】:WCF - contracts versioning (by example)WCF - 合同版本控制(通过示例)
【发布时间】:2012-01-10 14:22:26
【问题描述】:

对于熟悉版本控制服务/数据合同的最佳做法的人来说,这应该很容易。我想确保以正确的方式使用此版本控制。

所以,假设我们有一个服务合同:

[ServiceContract(Namespace="http://api.x.com/Svc1")]
public interface IService1
{
   [OperationContract(Name = "AddCustomer")]
   bool AddCustomer(DTOCustomer1 customer);
}

和数据合同:

[DataContract(Name="Customer", Namespace="http://api.x.com/Svc1/2011/01/DTO")]
public class DTOCustomer1
{
   [DataMember(Name="Name")]
   public string Name { ... }
}

如果我真的需要把后者改成别的东西:(以下只是例子)

[DataContract(Name="Customer", Namespace="http://api.x.com/Svc1/2012/01/DTO")]
public class DTOCustomer2
{
   [DataMember(Name="Name")]
   public string Name { ... }

   [DataMember(Name="Address")]
   public DTOAddress Address { ... }
}

...那么我应该如何使用服务中的 DTOCustomer2 而不是 DTOCustomer1 以使新旧客户端兼容?在这种情况下推荐什么?我的服务合同会改变吗? AFAIK 我不需要更改服务合同。服务合同会是什么样子?我需要一个新的端点吗?我是否需要使用新数据合约的新运营合约?

EDIT1: 简单地改变

bool AddCustomer(DTOCustomer1 customer);

进入

bool AddCustomer(DTOCustomer2 客户);

会吗?

EDIT2: 对 EDIT1 的回答是 ,因为 DTOCustomer2 具有不同的命名空间,但如果它具有相同的命名空间,它可能会起作用。我仍然不知道这里最好的东西是什么,并期待有人提出一个好的答案。

提前谢谢你!

【问题讨论】:

    标签: wcf versioning servicecontract datacontracts


    【解决方案1】:

    我最终在另一个问题的帮助下回答了这个问题:WCF - handle versioning

    【讨论】:

      【解决方案2】:

      请找到一些描述数据合同版本控制最佳实践的有用链接。

      1. Best Practices: Data Contract Versioning
      2. Data Contract Versioning

      第二个链接描述了当您想要添加或删除数据合同的属性以及其他一些场景时如何处理。

      希望对您有所帮助。

      【讨论】:

      • 感谢您的回答...我已经阅读了您发布的链接中的文章,但我仍然不明白如何将它们应用于我的示例。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      相关资源
      最近更新 更多