对于熟悉版本控制服务/数据契约的最佳实践的人来说,这应该很容易。我想确保我将以正确的方式使用这个版本控制。
那么,假设我们有一个服务合同:
[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 { ... }
}...then如何使用服务中的DTOCustomer2而不是DTOCustomer1,以便新老客户端能够兼容?在这种情况下推荐什么?我的服务合同会变吗?AFAIK我不需要更改服务合同。服务合同会是什么样子?我需要一个新的端点吗?我是否需要一个新的操作合同,利用新的数据合同?
EDIT1:简单地改变
bool AddCustomer(DTOCustomer1 customer);
转到
bool AddCustomer(DTOCustomer2 customer);
能行吗?
EDIT2:对EDIT1的回答是No,因为DTOCustomer2有不同的名称空间,但是如果有相同的名称空间,它可能会工作。不过,我不知道什么是最好的事情,并期望有人提出一个好的答案。
提前谢谢你!
发布于 2012-01-11 15:44:14
最后,我用另一个问题回答了这个问题:WCF -句柄版本控制
发布于 2012-01-10 15:13:24
请找到一些有用的链接,它们描述了数据契约版本控制的最佳实践。
第二个链接描述了当您想要添加或删除数据契约的属性和其他几种情况时如何处理。
希望这能有所帮助。
https://stackoverflow.com/questions/8804758
复制相似问题