2009-10-07 10 views
5

我在IIS上有一個ASP.NET Web服務,該端口在8080端口上工作。在端口80上,我有Apache,它將一些網站重定向到IIS。ASP.NET Web Service更改端口上的調用

在這種情況下,我可以訪問Web服務頁面(http://example.com/service/),該頁面提供了所有可用的方法。但是,當我嘗試調用某個方法時,它會轉到如下所示的網頁:http://example.com:8080/service/Service1.asmx/Method。當然,公共訪問看不到任何結果,端口8080被阻塞,無法打開。

內部,Web服務的工作在8080端口上,但公衆的要求需要做的端口80

任何人都知道我怎麼能解決我的問題?

PS:在Windows服務器上使用IIS 7和Apache 2.2 2008

+0

是您使用的URL來獲取客戶端上的WSDL? – Kev 2009-10-08 15:32:49

回答

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)

+0

我已經實現了SoapExtensionReflector解決方案。如果你使用WSDL,它可以工作,但在這個例子中,我使用的是從ASP.NET生成的客戶端,它嘗試使用端口8080上的服務,但沒有權限制作它! – 2009-10-07 19:13:25

+0

你使用什麼URL來獲取客戶端上的WSDL? – Kev 2009-10-08 15:31:43

+0

現在,使用WSDL文件使用Web服務工作正常,因爲我更改了WSDL上的端口。但是,ASP.NET生成的Web Interface不起作用,因爲它仍然使用錯誤的端口(8080)。 – 2009-10-09 14:48:26