2013-08-26 19 views
0

我正在使用AJAX與ASMX Web服務進行通信的ASP.NET項目。其中一個頁面使用ScriptManager來引用Web服務ASMX文件。它使用絕對URI進行引用。ScriptManager服務引用生成忘記服務主機名的JS代碼

我最近更改了ASP.NET項目和Web服務以使用IIS Express。每個現在都有不同的端口號。由於此更改,ASP.NET項目的客戶端代碼無法訪問Web服務。

的ASP.NET頁面生成的HTML代碼中包含一個正確引用到Web服務:

<script src="http://localhost:2837/Service.asmx/jsdebug" type="text/javascript"></script> 

然而,這個腳本只使用相對URL,而不是絕對的是指回Web服務:

Service.set_path("/Service.asmx"); 

所以AJAX調用Web服務方法失敗,因爲從ASP.NET應用程序的主機名代替Web服務的:

POST http://localhost:2827/Service.asmx/WebServiceMethod 500 (Internal Server Error) 

請注意,上面的端口號與Web服務使用的端口號不同。以上端口號是Web應用程序使用的端口號。

的HTTP 500,因爲Web服務器正在報告產生:

沒有Web服務發現在:/Service.asmx

我怎樣才能解決這個問題,使Web服務被正確引用?

回答

1

Exposing Web Services to Client Script

的ServiceReference對象只能在 同一個域中的頁面引用Web服務。 Web服務路徑可以是相對的, 應用程序相對,域相對或絕對。對於絕對的 路徑,您必須確保該路徑位於相同的域中。

所以你不能調用你在另一個域中的web服務方法。你可以做的是在你的asp.net項目中創建另一個服務來調用原始的Web服務。那麼你可以從腳本管理器調用新創建的web服務方法

+0

謝謝;這就說得通了。這聽起來像「域」不僅取決於主機名,還取決於端口號。那是對的嗎? – Sam

+0

@Sam是的 – Damith