为您的服务进行版本控制是一个庞大的主题,需要考虑许多因素和指南。 首先,您可以进行不同类别的更改:完全破坏性、半破坏性和非破坏性。 非破坏性更改(现有客户端无需更改)包括: 更改服务的内部实现,同时保持公开合同不变 以不会破坏客户端的方式更改操作返回类型的合同类型,例如通过向其添加字段(大多数序列化程序在反序列化时遇到意外字段时会引发事件而不是抛出异常) 使用ServiceKnownType属性多态地公开新类型 更改服务的实例管理设置(按调用到单例、无状态到有状态等),尽管有时这将需要配置甚至代码更改 半破坏性更改(通常可以在客户端上进行配置)包括: 更改服务的位置 更改服务所暴露的传输类型(尽管从双向传输到单向传输 - 例如从http到msmq - 可能是完全破坏性的更改) 通过使用服务窗口等更改服务的可用性 完全破坏性的更改(需要客户端的新版本)包括:- 更改服务操作签名 - 以破坏性方式更改公开类型(删除字段等)当您要进行半破坏性或完全破坏性的更改时,您应该评估最佳执行此操作的方式。您是强制所有客户端升级以使用新版本,还是在不同的终结点上共同托管两个版本的服务?如果您选择后者,则如何控制和管理可能引入的不同版本依赖项的传播?将其推向极致,您可以研究动态终结点解析,即客户端使用某种解析器服务在运行时解析适当的终结点进行调用。这里有一些很好的阅读材料: http://msdn.microsoft.com/en-us/library/ms731060.aspx