在我们的内部环境中,我有一个运行在Tomcat上的Java our服务。假设wsdl是
http://actual:8080/app/temp?wsdl为了提供从网络外部对此we服务的访问,我们在另一台服务器上使用Apache创建了一个代理,并使用ProxyPass执行以下操作
ProxyPass /app/temp http://actual:8080/app/temp因此,在外部,当我们通过http访问proxy/app/temp时,它会被转换为actual:8080/app/temp。所以这没有问题,而且我还可以访问wsdl。
但是WSDL引用了端口上"webservice location“的”实际“服务器。当从客户端对webservice方法进行实际调用时,这会导致失败。
请您对如何解决这个问题有什么想法?谢谢。
注意:客户端是使用Metro生成的。我找到了一种方法,可以使用下面的代码在客户端中强制使用不同的端点。但我更多的是寻找一种我们可以做到的纯代理解决方案,而不是使用我们的we服务的开发人员必须触摸他们的代码。
((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://proxy/app/temp?wsdl");发布于 2012-12-05 05:45:53
您可以使用ProxyPreserveHost指令。引用链接中指令部分的内容:
启用时,此选项会将传入请求中的Host:行传递给代理主机,而不是将ProxyPass行中指定的主机名传递给代理主机
因此,您的配置文件中应该包含以下内容:
ProxyPreserveHost On
ProxyPass /app/temp http://actual:8080/app/temp然后重新启动apache服务器。使用此选项,您将不需要更改web服务相关代码或设置中的任何内容。
https://stackoverflow.com/questions/13711907
复制相似问题