【问题标题】:Programmatically redirecting an ASP.NET web service call to the same service in a different host以编程方式将 ASP.NET Web 服务调用重定向到不同主机中的相同服务
【发布时间】:2019-02-09 09:54:36
【问题描述】:

我有一个用 ASP.NET 开发的 Web 服务,在 2 个不同的主机上运行。现在我需要将一些调用(取决于存储在用户数据库中的设置)从一个主机重定向到另一台主机。只有一些调用必须重定向,我不能修改调用 Web 服务的客户端,所以它必须对它们透明。任何想法如何进行?

编辑:它是一个 SOAP 服务 (asmx)。客户端是在 Visual Studio 中开发的 android 和 IOS 应用程序。

【问题讨论】:

  • 一种选择是返回带有新 URL 的 302(重定向)响应。客户端应该能够处理重定向请求。顺便说一句,“网络服务”是什么意思?像 WCF 这样的 SOAP 服务还是使用 MVC 或 WebAPI 构建的 HTTP API?在 MVC 中,您可以使用简单的 return Redirect("http://www.google.com");

标签: asp.net web-services


【解决方案1】:

由于您的要求包括从数据库中读取数据,并根据用户的身份进行选择,因此很明显,即使在从服务 A 重定向到服务 B 的情况下,服务 A 必须至少做到 一些在重定向之前工作。

既然无论如何都会发生这种情况,那么可能最简单的做法就是在必要时直接从服务 A 调用服务 B;换句话说,只需让服务 A 成为服务 B 的客户端。请注意,这实际上不会 redirect 到 B,而是 forward 在那里调用,这意味着响应来自 B 的也必须经过 A。


PS:我假设服务 A 和 B 基本相同,但它们可以访问某种不同的资源(例如,可能访问不同的数据库?)。您明确指定只需要从 一个 的主机重定向,但是如果您通过允许服务的每个实例成为同一服务的另一个实例的客户端来解决问题,并且使这个可配置,然后您可以让它们在必要时相互重定向。您现在可能不需要它,但将来它可能是一个有用的选择,而且它可能不会导致任何额外的开销。

【讨论】:

  • 你说得对,英语不是我的母语,当我真正考虑“前进”时,我写了“重定向”。它是安装在两台不同主机上的完全相同的服务,每台主机都有自己的数据库和资源。这是暂时的,我们正在从主机 A 迁移到主机 B,但正在逐步进行。几个月后,我们将在旧主机 A 中拥有大多数客户,在新主机 B 中拥有少数客户。该服务由智能手机应用程序使用。该应用程序连接到主机 A,但如果客户在主机 B 中,则呼叫必须透明地转发到主机 B。
  • 主机 A 中的服务将被配置为允许通过 web.config 进行转发。我们当然需要将转发代码添加到每个 WebMethod。但是如何在远程主机中轻松调用相同的 WebMethod?考虑到服务为参数和返回结果定义了一些类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多