制作向后兼容的 WCF 服务

2024-02-02

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


我正在创建一个 Web 服务,允许客户端应用程序获取插件列表。我至少会进行一次手术,例如FindPlugins(string nameOrDescription)它将在服务器上进行搜索并返回对象列表。

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

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

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


我看到的一些选项是:

  • 强制客户端更新到最新服务(不可行)
  • 中断对老客户的服务(不可行)
  • 将版本号附加到每个操作并仅使用特定于版本的操作(例如FindPluginsV1, FindPluginsV2) -- 对于多个操作来说似乎不太实用
  • 为每个新版本提供新服务——似乎不切实际

WCF 默认情况下是向后兼容的。

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

  • WCF 要点:版本控制策略 http://msdn.microsoft.com/en-us/library/ff384251.aspx

最重要的是,以下操作将not导致老客户端崩溃:

服务合同(方法)

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

数据契约(用于传递数据的自定义类)

  • 添加非必需的属性。
  • 删除不需要的属性。

因此,除非您标记新的DownloadLink字段为是必须的 http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute.isrequired%28v=vs.110%29.aspx(默认为false),你的改变应该没问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

制作向后兼容的 WCF 服务 的相关文章

  • 如何生成wcf服务库项目的wsdl文件?

    我的解决方案中有一些 Wcf 服务库项目 不是 Wcf 服务应用程序 我必须将项目的 wsdl 文件提供给将使用这些服务的同事 我怎样才能做到这一点 提前致谢 您可以使用WCF服务主机 http msdn microsoft com en
  • 编写支持 iOS 3.1.3 和 iOS 4.x 的 iOS 应用程序时的陷阱

    我想编写一个可以在 iOS 3 1 3 到 iOS 4 1 上运行的应用程序 我知道如何设置部署目标和基础 SDK 阅读 Apple 文档后 它很大程度上依赖于检查类是否可用和 或实例是否响应特定选择器 现在我的问题是 如果 Apple 从
  • 双工服务的实例、会话和并发

    我有一个要求 服务应该每秒向客户端发送一条消息 该服务只能有一个客户端 我创建了一个双工服务 现在对该服务的实例 并发性和会话感到困惑 双工服务是否始终需要会话 会话模式 必需 InstanceContextMode 是否应始终为 PerS
  • 如何从Windows服务公开restful接口?

    我编写了一个公开restful接口的wcf服务 现在我使用iis作为wcf服务主机 除了暴露其余部分之外 我还需要对我的应用程序执行一些操作 为此 我必须将我的应用程序作为 Windows 服务运行 但是使用iis作为主机不会使我的wcf服
  • 从 Angular 2 和 Silverlight 应用程序使用相同的 WCF 服务

    目前 我们有一个带有 WCF 服务 后端 的 Silverlight 应用程序 前端 现在 我们将用 Angular 2 应用程序替换 Silverlight 应用程序 而不更改 WCF 服务 只有 UI 会发生变化 在开始使用 Angul
  • 我是否需要在 WCF DataContract 中公开构造函数才能使其在客户端上的对象实例化期间工作?

    我在 WCF 服务中有一个类 我们称之为A A是一个数据协定 其中包含另一个自定义对象的集合作为其数据成员之一B 为了避免客户端出现空引用问题 我实例化了BList在构造函数中像这样 DataContract public class A
  • WCF:如何诊断故障通道?

    我正在为我的实验室进行一项更改 希望能够帮助诊断我们所看到的一些奇怪的通道故障现象 有一个测试应用程序使用 DuplexChannelFactory 连接到几个 Windows 服务 并且由于某种原因 该测试应用程序上的通道似乎出现了很多故
  • App.config 之外的 WCF ChannelFactory 配置?

    我有一个使用插件系统的 Windows 服务 我在插件基类中使用以下代码为每个 DLL 提供单独的配置 因此它将从plugin dll config string dllPath Assembly GetCallingAssembly Lo
  • WCF 消费者网站:ChannelFactory.Endpoint 上的 Address 属性为 null。 ChannelFactory 的 Endpoint 必须指定有效的地址

    我有一个简单的 WCF 服务 它在本地主机上运行良好 由另一个本地网站使用并返回数据 现在我将我的服务上传到我们的主机 更改 web config 中的适当地址 当客户端调用它时它会中断 Error ChannelFactory Endpo
  • 多线程 C# 应用程序中的惰性单例

    我正在开发一个使用 WCF Web 服务的多线程 C 应用程序 与 Web 服务的连接将有一个特定的超时时间 我们可以定义该超时时间 之后连接将关闭 我希望使用单例类来存储与 Web 服务的连接 我试图获取实例如下 CLazySinglet
  • WCF vs ASPX webmethods vs ASMX webmethods

    目的是创建一组人们可以重用的 Web 服务 这些服务主要与创建 检索和处理数据的后端数据库交互 我们希望公开服务 以便人们可以用来创建数据混搭和其他应用程序 最终用户是可以位于我们域内或域外的网页 对于域外的页面 我们计划发布配置为检索和显
  • 在 WCF 中序列化 IDictionary

    我们有一个现有的应用程序 其中一个 DTO 对象的属性类型为IDictionary
  • 使用 NSubstitute 模拟动作

    Web 服务的代理需要进行单元测试 而无需 显然 访问 Web 服务 这就是我想要绝育的方法 public void Invoke Action
  • WCF 服务契约将被 XML 和 Json 序列化

    我如何创建要加入的服务合同XmlSerializer 格式也WebMessageFormat Json在 WCF RESTful 服务中 我需要的是从 ASP Net 1 1 的代码后面调用 CallADSWebMethod 操作契约 该契
  • 将大文件返回为拆分 zip 文件、流或字节数组 WCF 的最佳方法

    我已经将 zip 文件流返回给客户端 如下所示MessageContract MessageContract public class ExportResult C MessageHeader public PackedStudy C Pa
  • WCF 和 n 层架构以及序列化性能

    当使用 WCF 服务作为接口层使用 5 层架构 前端 gt 接口层 gt 业务层 gt 数据库层 gt 数据库 时 让客户端应用程序调用它的方法 我是否也应该使用 WCF 服务业务层和数据库层 我问是因为 3 个服务之间进行的所有序列化 反
  • 错误:在 Visual Studio 2013 中找不到类型或命名空间名称“ApplicationUser”

    我正在学习 RESTful WCF 服务 教程 但是当我构建我的应用程序时 我收到此错误 找不到类型或命名空间名称 ApplicationUser 您是否缺少 using 指令或程序集引用 c users basma documents v
  • PHP WCF 集成

    是不是如果我想支持php客户端访问我的服务 我必须有一个基本的http端点 这是因为php仍然只支持soap 1 1吗 据我所知 自从我使用 PHP 以来已经两年了 情况仍然如此 如果客户端应用程序将使用 PHP 的内置 SoapClien
  • 如何从c#中的窗口服务获取登录用户和机器名?

    如何在c 中从窗口服务获取登录用户 交互式用户 和机器名 当我尝试使用环境和其他类来登录用户名时 它只从窗口服务返回 NT AUTHORITY SYSTEM 该服务在 SYSTEM 帐户下执行 因此您在Environment班级 机器名称应
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe

随机推荐