我很好奇是否有人可以概述服务器端哪些类型的WCF合同(接口)更改会破坏尝试发送消息的客户端,以及原因。我相信WCF可以处理某些差异,但我不确定你可以安全地改变什么,以及你不能做什么。
一位朋友在这里问了一个类似的问题:
Does adding a method to a WCF ServiceContract break existing clients?
编辑:正如John Saunders所指出的那样,改变合同通常不是一个好主意,但是内置的东西允许一些版本容忍(ExtensionDataObject等?)。我只想知道版本容差的灵活性。答案 0 :(得分:14)
查看有关dasBlonde的这篇文章:Versioning WCF Service Contracts
它列出了哪些更改会破坏现有客户端:
This article by Michele更详细地解释了如何设计合同以使其更加灵活。
答案 1 :(得分:4)
合同设计建议
第一个版本
1.1。仔细选择所有合同(接口,方法,类和属性)的名称。这些在将来的版本中很难改变。
1.2。请记住,以后不能更改以下内容:方法参数的数量;不受您控制的类型的参数类型/返回值/属性。
下一个版本
2.1。如果已存在,请不要更改任何xxxContractAttribute上的Namespace或Name参数。
2.2。如果已存在,请不要更改DataMemberAttribute的Order属性。
2.3。只允许以下更改:
将方法(OperationContract)添加到接口(ServiceContract)
在界面上重命名方法
重命名类(DataContract)
将属性(DataMember)添加到类(DataContract)
重命名类
2.4。任何删除都会破坏兼容性。
2.5。任何其他更改都会破坏兼容性。
以下是一些有用的链接:
答案 2 :(得分:3)
答案 3 :(得分:0)
我认为最佳做法是将合同视为牢不可破,嗯,合同。发布后不要更改它们。使用您想要的更改创建新合同并在新端点上公开新合同很容易。
答案 4 :(得分:0)
行。题。由于错误的命名语法(参数用大写字母指定),我想调整一些代码:
[OperationContract]
public void Foo(string Bar){}
到
[OperationContract]
public void Foo(string bar){}
会调整资本中断合约吗?