我只是想开发.NET WCF API。我们可能需要经常更新API。

如何管理API部署的多个版本?

最佳答案

对服务进行版本控制是一个巨大的主题,其中涉及许多注意事项和准则。

首先,您可以进行不同类别的更改。完全中断,半中断和不中断。

不间断的更改(现有客户无需更改)包括:


更改服务的内部实现,同时保持裸露的合同不变
以不破坏客户的方式更改合同类型,例如,通过将字段添加到操作返回类型中(大多数序列化程序会在遇到反序列化的意外字段时引发事件,而不是引发异常)
多态地公开新类型(使用ServiceKnownType属性)
更改服务的实例管理设置(将每次调用更改为单例,将无会话更改为会话式等,尽管有时这需要进行配置甚至更改代码)


半中断更改(通常可以在客户端上配置)包括:


更改服务位置
更改服务所面临的传输类型(尽管从双向更改为单向传输-例如从http更改为msmq-可能是一个完全突破性的更改)
更改服务的可用性(通过使用服务窗口等)


彻底的更改(需要客户端的新版本)包括:


更改服务操作签名
以中断的方式更改暴露的类型(移除字段等)


当您要进行半或完全突破性的更改时,您应该评估实现此目的的最佳方法。您是强迫所有客户端升级以使用新版本,还是在不同的端点上共同托管服务的两个版本?如果选择后者,那么将如何控制和管理可能引入的不同版本控制依赖项的传播?

极端地讲,您可以研究动态端点解析,由此客户端可以使用某种解析程序服务解析合适的端点以在运行时调用。

这里有很好的阅读:
http://msdn.microsoft.com/en-us/library/ms731060.aspx

07-24 09:44
查看更多