我在IIS上有一个ASP.NET Web服务,它正在使用端口8080.在端口80上我有Apache,它将一些网站重定向到IIS。
在这种情况下,我可以访问Web服务页面(http://example.com/service/),它为我提供了所有可用的方法。但是,当我尝试调用某个方法时,它会转到这样一个网页:http://example.com:8080/service/Service1.asmx/Method。当然,公共访问无法看到任何结果,端口8080被阻止,无法打开。
在内部,Web服务在端口8080上工作,但公共请求需要在端口80上完成。
任何人都知道如何解决我的问题?
P.S。:在Windows Server 2008下使用IIS 7和Apache 2.2
答案 0 :(得分:3)
最可能的原因是您的Web服务生成的WSDL将服务端点地址定义为:
http://example.com:8080/service/service1.asmx
您可以提供单独的静态WSDL定义并修改以下部分以使用端口80:
<wsdl:service name="Service1">
<wsdl:port name="Service1Soap" binding="tns:Service1Soap">
<soap:address location="http://example.com:8080/service/service1.asmxx" />
</wsdl:port>
<wsdl:port name="Service1Soap12" binding="tns:Service1Soap12">
<soap12:address location="http://example.com:8080/service/service1.asmx" />
</wsdl:port>
</wsdl:service>
这应该导致客户端使用WSDL并生成存根代码以绑定到正确的端口(作为代理的Apache服务器)。
强制在生成的WDSL中显示正确地址的另一种方法是使用SoapExtensionReflector
动态修改地址location
:
我过去成功使用过上述方法。
或者,如果客户端是基于.NET的,则可以覆盖服务的基本URL: