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

因此,假设我们有一份服务合同:

[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是 , ,由于dtocustomer2具有不同的名称空间,但是如果它具有相同的名称空间,则可能起作用。我仍然不知道这里最好的事情是什么,希望有人提出一个很好的答案。

先感谢您!

有帮助吗?

解决方案

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

其他提示

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

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

第二个链接描述了您在要添加或删除数据合同的属性以及其他几个方案时如何处理。

希望有帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top