web-services - ASP.NET Web 服务在调用时更改端口

标签 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 .当然,公共(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即时:

Modify a Web Service's WSDL Using a SoapExtensionReflector



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

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

WebClientProtocol.Url Property (MSDN Library)

关于web-services - ASP.NET Web 服务在调用时更改端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1531448/

相关文章:

java - 在 Java 中的 SOAP over HTTP Web 服务中调用 Amazon S3 客户端时失败

php - 在 $_SESSION 中存储 Doctrine 对象

php - Apache/PHP 和 Systemd/node 可读的环境变量

javascript - window.crypto.subtle 无法在 IIS 托管的 Web 应用程序中工作

.net - 如何在Linq to SQL中实现缓存?

vb.net - 运行后台线程以加快执行时间的 WCF 服务

.net - 从 .NET DLL 使用 webservice - app.config 问题

.net - iis如何识别Web应用程序?

通过 Jersey 发送请求时出现 javax.ws.rs.ProcessingException

apache - SSLCACertificateFile 和 SSLCertificateChainFile 之间的区别