WCF - 合同版本化(通过示例)

时间:2012-01-10 14:22:27

标签: wcf versioning servicecontract datacontracts

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

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

[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具有不同的命名空间,但如果它具有相同的命名空间,它可能会起作用。我仍然不知道这里最好的是什么,并希望有人能给出一个好的答案。

提前谢谢!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

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

  1. Best Practices: Data Contract Versioning
  2. Data Contract Versioning
  3. 第二个链接介绍了在添加或删除数据协定属性以及其他一些方案时如何处理。

    希望有所帮助。