首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WCF -合同版本控制(按示例)

WCF -合同版本控制(按示例)
EN

Stack Overflow用户
提问于 2012-01-10 14:22:26
回答 2查看 7.9K关注 0票数 2

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

那么,假设我们有一个服务合同:

代码语言:javascript
运行
复制
[ServiceContract(Namespace="http://api.x.com/Svc1")]
public interface IService1
{
   [OperationContract(Name = "AddCustomer")]
   bool AddCustomer(DTOCustomer1 customer);
}

和数据合同:

代码语言:javascript
运行
复制
[DataContract(Name="Customer", Namespace="http://api.x.com/Svc1/2011/01/DTO")]
public class DTOCustomer1
{
   [DataMember(Name="Name")]
   public string Name { ... }
}

如果我真的需要将后者改为其他东西:(以下只是示例)

代码语言:javascript
运行
复制
[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有不同的名称空间,但是如果有相同的名称空间,它可能会工作。不过,我不知道什么是最好的事情,并期望有人提出一个好的答案。

提前谢谢你!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-11 15:44:14

最后,我用另一个问题回答了这个问题:WCF -句柄版本控制

票数 0
EN

Stack Overflow用户

发布于 2012-01-10 15:13:24

请找到一些有用的链接,它们描述了数据契约版本控制的最佳实践。

  1. 最佳做法:数据合同版本控制
  2. 数据契约版本化

第二个链接描述了当您想要添加或删除数据契约的属性和其他几种情况时如何处理。

希望这能有所帮助。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8804758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档