WCF API 部署版本控制

标签 wcf api

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

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

最佳答案

对您的服务进行版本控制是一个包含许多注意事项和指南的巨大主题。

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

不间断更改(无需对现有客户端进行更改)包括:

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

  • 半破坏性更改(通常可以在客户端配置)包括:
  • 更改服务的位置
  • 更改服务公开的传输类型(尽管从双向传输更改为单向传输 - 例如 http 到 msmq - 可能是一个彻底的更改)
  • 更改服务的可用性(通过使用服务窗口等)

  • 完全破坏性的更改(需要新版本的客户端)包括:
  • 更改服务操作签名
  • 以破坏性的方式改变暴露的类型(删除字段等)

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

    更极端的情况是,您可以研究动态端点解析,即客户端使用某种解析器服务解析合适的端点以在运行时调用。

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

    关于WCF API 部署版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8703854/

    相关文章:

    c# - WCF 是否在多个线程上运行 session ?

    facebook - 时间线照片相册中缺少照片

    .net - 哪种列表/集合类型最适合在 WCF 数据协定中使用?

    android - 将日期时间从 Android 发布到 WCF RESTful JSON 服务

    c++ - 如何获取系统文件夹路径(C :\Windows C:\Program Files) in Windows using C++?

    api - Symfony2 从请求创建实体

    PHP 网站 - Twitter API + Abraham Oauth(无法找到 x_rate_limit_remaining )

    javascript - SharePoint 客户端 JavaScript 文档

    c# - 安装 DotNET 4.5 时,SvcUtil/edb 不会生成 INotifyPropertyChange

    wcf - 指定每个端点的 CasSTLe WCF 集成工具端点行为