WCF API部署版本控制

5

我刚刚在寻找开发.NET WCF API的方法。我们可能需要频繁更新APIs。

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


首先,您的问题严重缺乏质量。首先,您正在问三个不同的问题,因此应创建三个问题。其次,在已回答的八个问题中,您只在其中两个问题上授予了答案。这将打击人们帮助您的积极性。请重新查看这些问题并适当地授予答案。 - tom redfern
谢谢Hugh!我已经更新了问题以缩小范围。对于迄今为止收到的答案,我已经在我认为是解决方案的问题上授予了答案,其余的都是没有导致任何适当解决方案的建议。希望你能理解。 - Mitul Makadia
如果你收到的所有答案都没有帮助你找到解决方案,那么正确的做法是发布你找到的解决方案,然后将其标记为答案。这样,来查看你问题的人至少可以看到你是如何解决它的。 - tom redfern
当然,我会记下来的。 - Mitul Makadia
我已经取消了我的反对票。而且我试着回答了你的问题。然而,我仍然认为你需要改进这个问题。你所问的是不具体的。如果你描述一下你真正面临的挑战,对于你和我们来说都会更有用,也更容易。那样的话,我可以在我的回答中更具体一些。 - tom redfern
不,我没有取消你的踩。我认为这是不可能的。 - Mitul Makadia
1个回答

6

为您的服务进行版本控制是一个庞大的主题,需要考虑许多因素和指南。

首先,您可以进行不同类别的更改:完全破坏性、半破坏性和非破坏性。

非破坏性更改(现有客户端无需更改)包括:

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

半破坏性更改(通常可以在客户端上进行配置)包括:

  • 更改服务的位置
  • 更改服务所暴露的传输类型(尽管从双向传输到单向传输 - 例如从http到msmq - 可能是完全破坏性的更改)
  • 通过使用服务窗口等更改服务的可用性
完全破坏性的更改(需要客户端的新版本)包括:
- 更改服务操作签名 - 以破坏性方式更改公开类型(删除字段等)
当您要进行半破坏性或完全破坏性的更改时,您应该评估最佳执行此操作的方式。您是强制所有客户端升级以使用新版本,还是在不同的终结点上共同托管两个版本的服务?如果您选择后者,则如何控制和管理可能引入的不同版本依赖项的传播?
将其推向极致,您可以研究动态终结点解析,即客户端使用某种解析器服务在运行时解析适当的终结点进行调用。
这里有一些很好的阅读材料: http://msdn.microsoft.com/en-us/library/ms731060.aspx

谢谢Hugh!这将是一个好的开始。让我进一步详细说明。我计划部署一个服务,该服务将被本地移动应用程序使用。我想在访问服务URL时使用一些版本号,即www.example.com/MyService/1.0/。我可能需要定期更新本地应用程序并在我的服务中添加/更新方法,并使用不同的版本号进行部署,以便我可以运行多个版本的移动应用程序和服务,然后我可以考虑逐步淘汰旧版本的移动应用程序和服务。 - Mitul Makadia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接