我在 IIS 上有一个 ASP.NET Web 服务,它在端口 8080 上工作。在端口 80 我有 Apache,它将一些网站重定向到 IIS。
在这种情况下,我可以访问 Web 服务页面 (http://example.com/service/),它为我提供了所有可用的方法。但是,当我尝试调用一个方法时,它会转到这样的网页:http://example.com:8080/service/Service1.asmx/Method .当然,公共(public)访问看不到任何结果,8080端口被阻塞,无法打开。
在内部,Web Service 在端口 8080 上工作,但公共(public)请求需要在端口 80 上完成。
任何人都知道我该如何解决我的问题?
P.S.:在 Windows Server 2008 下使用 IIS 7 和 Apache 2.2
最佳答案
最可能的原因是您的 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 并生成 stub 代码以绑定(bind)到正确的端口(这是充当代理的 Apache 服务器)。
另一种强制正确地址出现在生成的 WDSL 中的替代方法是使用
SoapExtensionReflector
修改地址location
即时:我过去成功地使用了上述方法。
或者,如果客户端是基于 .NET 的,您可以覆盖服务的基本 URL:
WebClientProtocol.Url Property (MSDN Library)
关于web-services - ASP.NET Web 服务在调用时更改端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1531448/