gpt4 book ai didi

wcf - 提供向后兼容的WCF服务

转载 作者:行者123 更新时间:2023-12-04 03:59:51 25 4
gpt4 key购买 nike

TLDR:如何创建向后兼容的 WCF服务-也就是说,当我在服务器端部署服务的新版本时,旧版本上的所有客户端仍可以使用该服务。

我正在创建一个Web服务,该服务将允许客户端应用程序获取插件列表。我至少要有一个像FindPlugins(string nameOrDescription)这样的操作,它将在服务器上进行搜索并返回对象列表。

不幸的是,我不能保证我的客户都会随着我的服务的每个新版本而更新;不,我确信其中许多将跟踪最新版本,并且将具有旧版本-不确定多大,但我知道它们将是旧的:)

如果我创建一个新的服务操作,更改架构或在服务器端进行某种中断操作,我就完成了。我需要始终设计向后兼容性。

这是一个例子。假设我返回了一个Plugin列表,每个列表都有一个名称和描述,并且部署了服务的v0.1版本。然后,我添加一个下载链接,并将其部署为我的服务v0.2。

我看到的一些选项是:

  • 强制客户端更新到最新服务(不可行)
  • 中断旧客户端的服务(不可行)
  • 在每个操作后附加一个版本号,仅使用特定于版本的操作(例如FindPluginsV1FindPluginsV2)-对于多个操作
  • 似乎不切实际
  • 为每个新版本提供新服务-似乎不实用
  • 最佳答案

    WCF默认情况下向后兼容。

    以下MSDN链接包含WCF契约(Contract)的所有可能更改的列表,并描述了它们对旧客户端的影响:

  • WCF Essentials: Versioning Strategies

  • 最重要的是,以下操作不会导致旧客户端中断:

    服务契约(Contract)(方法)
  • 添加方法参数:从旧客户端调用时将使用默认值。
  • 除去方法参数:旧客户端发送的值将被静默忽略。
  • 添加新方法:显然,老客户不会调用它们,因为他们不认识它们。

  • 数据契约(Contract)(用于传递数据的自定义类)
  • 添加不需要的属性。
  • 删除不需要的属性。

  • 因此,除非您将新的 DownloadLink字段标记为 IsRequired(默认为false),否则所做的更改应该没有问题。

    关于wcf - 提供向后兼容的WCF服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8826017/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com