gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:00:10 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com