【问题标题】:ASP.NET Web Service changes port on InvokeASP.NET Web 服务在调用时更改端口
【发布时间】:2009-10-07 12:51:41
【问题描述】:

我在 IIS 上有一个 ASP.NET Web 服务,它在端口 8080 上工作。在端口 80 我有 Apache,它正在将一些网站重定向到 IIS。

在这种情况下,我可以访问 Web 服务页面 (http://example.com/service/),它为我提供了所有可用的方法。但是,当我尝试调用一个方法时,它会转到一个类似这样的网页:http://example.com:8080/service/Service1.asmx/Method。当然,公共访问看不到任何结果,8080端口被阻塞,无法打开。

在内部,Web Service 在端口 8080 上工作,但公共请求需要在端口 80 上完成。

有人知道我该如何解决我的问题吗?

P.S.:在 Windows Server 2008 下使用 IIS 7 和 Apache 2.2

【问题讨论】:

  • 您使用什么 url 来获取客户端上的 WSDL?

标签: web-services apache iis asmx


【解决方案1】:

最可能的原因是您的 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)

【讨论】:

  • 我已经实现了 SoapExtensionReflector 解决方案。如果您使用 WSDL,它可能会起作用,但在此示例中,我使用的是从 ASP.NET 生成的客户端,它尝试使用端口 8080 上的服务,但没有权限!
  • 您使用什么 url 来获取客户端上的 WSDL?
  • 现在,使用 WSDL 文件使用 Web 服务工作正常,因为我更改了 WSDL 上的端口。但是,ASP.NET 生成的 Web 界面不起作用,因为它仍然使用错误的端口 (8080)。
猜你喜欢
  • 2011-01-24
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多