版本wcf用于向后兼容

时间:2015-10-21 04:13:39

标签: c# web-services wcf

我的服务有以下方法:

[ServiceContract]
public interface TestContract
{
  [OperationContract]
  void GetTest(Test test);
}

现在在我的新服务合同中,类型Test已被移动到具有新名称TestNew的不同命名空间 这是我的新服务合同:

 public interface TestContract
{
  [OperationContract]
  void GetTest(TestNew test);
}

如何在不破坏现有客户端的情况下实施服务。这意味着在不让现有客户端更新其服务引用的情况下实现向后兼容性。

基本上,参数的类型发生了变化,这是一个突破性的变化。既然如此,我现在有新老客户。有没有办法我可以更改我的服务合同而无需更改新旧客户的服务参考?我想在参数

的序列化/反序列化期间拦截某处

1 个答案:

答案 0 :(得分:0)

您可以将TestNow定义为子类(以及KnownType的{​​{1}})并且不要更改方法签名,也可以通过更改方法签名来添加新的Test方法的名称(保留旧的)或使用Action属性上的Name属性。

突破性更改的更常见方法是仅定义新端点。例如:http://foo/someservice/2014-05表示第一个版本,http://foo/someservice/2015-10表示新版本。