ASP.NET Web Service在Invoke上更改端口

时间:2009-10-07 12:51:41

标签: web-services apache iis asmx

我在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

1 个答案:

答案 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

  

Modify a Web Service's WSDL Using a SoapExtensionReflector

我过去成功使用过上述方法。

或者,如果客户端是基于.NET的,则可以覆盖服务的基本URL:

WebClientProtocol.Url Property (MSDN Library)