gpt4 book ai didi

asp.net - .NET Web 服务客户端是否可以支持同一 Web 服务的多个不同版本?

转载 作者:行者123 更新时间:2023-12-02 12:22:03 24 4
gpt4 key购买 nike

我有一个案例,我有一个 Web 服务客户端作为更大产品的一部分。这里的角色有点颠倒:客户端是托管 Web 服务的客户端,而我们的应用程序是使用它们的客户端。

客户端当前都运行这些 Web 服务的一个版本(最初也是由我们构建的)。通过这一新产品,我们提供的 Web 服务堆栈将通过新功能进行扩展;如果客户希望获得新功能,他们可以安装这个新堆栈。

但是 - 一个关键要求是向后兼容性。 (可能很重要的仅供引用 - 我们在我们自己的服务器上运行我们的网络软件的一个中央安装;我们的所有客户仅通过网络从我们的服务器使用我们的系统。客户的系统位于另一方面,由他们单独托管 - 并且他们都有自己的与我们集成的产品的安装(并将我们的网络服务作为附加组件安装到这些产品中)。因此,该项目的新版本应该理想地检测给定客户端正在使用两个版本的 Web 服务堆栈中的哪一个(给定 WSDL 的 URL 和任何其他相关信息),并使用适当的 Web 服务客户端进行通信。理想情况下,URL 应该相同(即“www.exampleCompany22.com/MyCompanyWebService/”可以运行版本 1,“www.exampleCompany88.com/MyCompanyWebService/”可以运行版本 2)。我们应该能够检测他们正在使用哪个版本,并针对它使用适当的代码。

我们可以控制我们的系统和版本 2( future 的 Web 服务的第二个版本),但不能控制现有的版本 1(客户已经安装了该版本,如果他们选择,可以选择不升级) .

是否有任何内置功能(或任何库,或任何其他简单的方式)可以在 .NET 中实现此功能,而无需任何解决方法?

我不认为这应该太难,但这可能也不是太难常见的情况...而且绝对不是我遇到过的情况。

我已经可以想到几种方法来解决手头的问题,但我想知道是否有真正的“正确”方法来做到这一点(或者是否有人以前有过类似的案例,并且可以提供有关如何解决问题的反馈)他们实现了它)。

最佳答案

解决此问题的方法有很多种,其中一些方法取决于您的网络服务的具体工作方式。

一种方法是客户端安装的一部分是调用您的服务器以通知它们正在使用哪个版本。在调用客户端之前,您将检查内部表以确定版本号,然后采取适当的操作。

第二种方法是向您在客户端站点上安装的每个服务文件添加版本号。例如:OurService20.asmxOurService30.asmx。除此之外,您还会有一个名为 GetVersion.asmx 的标准服务文件,它返回您可以使用的最新安装版本。

另一种方法是完全转储 WSDL 和 ASMX 服务,并迁移到 RESTful 架构,在该架构中保留完全相同的命名方案,即:OurService.ashx注意扩展名的差异。使用此方法,您可以执行 http GET(例如 http://remoteclient/OurService.ashx?getVersion)并解析响应。从那时起,您就可以确切地知道他们安装的是什么版本。

就我个人而言,我喜欢 RESTful 路线,因为它为您提供了更大的灵 active ,并开放您的应用程序以便更容易地被其他应用程序使用。

关于asp.net - .NET Web 服务客户端是否可以支持同一 Web 服务的多个不同版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8281620/

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