2

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

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

[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 客户);

进入

bool AddCustomer(DTOCustomer2 客户);

会做?

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

先感谢您!

4

2 回答 2

0

我最终在这里的另一个问题的帮助下回答了这个问题:WCF - 处理版本控制

于 2012-01-11T15:44:14.317 回答
-1

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

  1. 最佳实践:数据合同版本控制
  2. 数据合同版本控制

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

希望有帮助。

于 2012-01-10T15:13:24.877 回答