【问题标题】:Forward a call to a webservice to another webservice?将对 Web 服务的呼叫转发到另一个 Web 服务?
【发布时间】:2010-04-19 17:47:54
【问题描述】:

如果我在无法访问的机器 (A) 上的防火墙后面有一个 https web 服务,但可以访问同一网络 (B) 上的机器,我可以从那里调用机器 A 上的 web 服务。

从外部通过机器 B(我通过 VPN 访问)与机器 A 上的网络服务通信的最佳方式是什么?

我显然可以在机器B上创建一个具有匹配接口的服务,并在机器A上调用webservice上的方法,并返回结果。但我担心开销和可维护性。

还有其他方法吗?我可以以某种方式转发请求吗?

【问题讨论】:

    标签: .net architecture web-services


    【解决方案1】:

    是的,在机器 B 上创建重复的 Web 服务听起来是个坏主意,无论是从维护的角度来看,还是从它可能引入的潜在额外错误的角度来看。

    我曾经通过在机器 B 上安装 Apache Web 服务器并将其设置为反向代理来解决这个问题。这意味着您通过机器 B 公开托管在机器 A 上的 WSDL。所有 Web 服务客户端都会“认为”他们正在与机器 B 对话,但实际上它们是在与机器 A 对话。Apache 然后仅代表转发 Web从客户端到机器 A 的服务请求。Apache 的 mod_proxy 模块使用 ProxyPass 和 ProxyPassReverse 指令支持此行为。

    此解决方案有一个“陷阱”:您通过机器 B 从机器 A 公开 WSDL,并且 WSDL 始终包含托管它的机器的主机名,在您的情况下是机器 A。所以,客户正在交谈到机器 B,突然他们收到一个 WSDL,其中包含一个他们不知道的主机名。

    解决方案:您需要在 A 上配置 Web 服务,使其包含机器 B 的主机名。我不知道您使用的是什么框架,但在 WCF 中,可以使用 WCFExtras 项目轻松配置。

    【讨论】:

    • 如果没有 Apache 网络服务器和 IIS,有什么办法可以做到这一点?
    • 我可以在 IIS7 中使用应用程序请求路由吗?如果我无法更改机器 A 上服务的 wsdl 中的主机名怎么办?
    • 我认为 IIS7 中的应用程序请求路由执行相同的功能 - 我自己从未使用过。如果您不更改机器 A 上 WSDL 中的主机名,您的客户端将会出错。
    【解决方案2】:

    在我看来,您要么必须使 A 可访问,要么按您说的做,在 B 上创建相同的方法并从实现中调用 A。我不支持自动重定向或转发调用。

    【讨论】:

      【解决方案3】:

      由于 Web 服务调用“只是”一个 HTTP 数据包,您应该能够将它们路由到其他地方而无需“打开”它们。您想以静态方式(对于固定服务)还是动态方式(对于 A 上的所有服务)执行此操作? 加密(你提到 HTTPS)重要吗?

      【讨论】:

      • 它是一个固定的服务。 HTTPS 是必需的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2013-03-27
      相关资源
      最近更新 更多