对于熟悉版本控制服务/数据合同的最佳实践的人来说,这应该很容易。我想确保以正确的方式使用此版本控制。
所以,假设我们有一个服务合同:
[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 具有不同的命名空间,但如果它具有相同的命名空间,它可能会起作用。我仍然不知道这里最好的事情是什么,并希望有人能提出一个好的答案。
先感谢您!