如果我在计算机(A)上的防火墙后面有https网络服务,我无法访问,但访问同一网络(B)上的计算机,我可以从机器A上调用网络服务。
通过机器B(我通过VPN访问)从外部与机器A上的Web服务进行通信的最佳方式是什么?
我显然可以在机器B上创建一个具有匹配接口的服务,并在机器A上调用webservice上的方法,并返回结果。但我担心开销和可维护性。
还有其他方法吗?我可以以某种方式转发请求吗?
答案 0 :(得分:2)
是的,在机器B上创建一个重复的Web服务听起来是一个坏主意,从维护角度和它将引入的潜在额外错误。
我曾经通过在机器B上安装Apache Web服务器并将其设置为反向代理来解决了这个问题。这意味着您通过计算机B公开托管在计算机A上的WSDL。所有Web服务客户端都会“认为”他们正在与计算机B通信,但他们实际上正在与计算机A通信.Apache然后只代表转发网络服务请求从客户端到计算机A. Apache的mod_proxy模块使用ProxyPass
和ProxyPassReverse
指令支持此行为。
这个解决方案有一个'捕获':您通过机器B从机器A公开WSDL,并且WSDL始终包含它托管在其上的机器的主机名,在您的案例机器A中。所以,客户正在谈论加工B并突然收到一个WSDL,其中包含一个他们不知道的主机名。
解决方案:您需要在A上配置Web服务,使其包含机器B的主机名。我不知道您使用的是什么框架,但在WCF中,可以使用WCFExtras项目轻松配置。
答案 1 :(得分:0)
在我看来,你要么必须使A可访问,要么像你说的那样,在B上创建相同的方法并从实现中调用A.自动重定向或转发调用听起来不支持我。
答案 2 :(得分:0)
由于webservice调用“只是”一个HTTP数据包,你应该能够将它们路由到其他地方而不“打开”它们。您想以静态方式(对于固定服务)还是动态(对于A上的所有服务)执行此操作? 加密(您提到的HTTPS)是否重要?