ScriptManager服务引用生成忘记服务主机名的JS代码

时间:2013-08-26 02:33:14

标签: asp.net ajax web-services asp.net-ajax asmx

我正在开发一个使用AJAX与ASMX Web服务进行通信的ASP.NET项目。其中一个页面使用ScriptManager来引用Web服务ASMX文件。它使用绝对URI引用。

我最近更改了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而不是绝对URL引用Web服务:

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

因此,对Web服务方法的AJAX调用失败,因为使用了ASP.NET应用程序中的主机名而不是Web服务:

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

请注意,上面的端口号与Web服务使用的端口号不同。上面的端口号是Web应用程序使用的端口号。

生成HTTP 500是因为Web服务器正在报告:

  

在/Service.asmx

找不到网络服务

如何解决这个问题,以便正确引用Web服务?

1 个答案:

答案 0 :(得分:1)

来自Exposing Web Services to Client Script

  

ServiceReference对象只能引用Web服务   与页面相同的域。 Web服务路径可以是相对的,   应用程序相对,域相对或绝对。绝对的   路径,您必须确保路径在同一个域中。

因此,您无法调用另一个域中的Web服务方法。你可以做的是在你的asp.net项目中创建另一个服务来调用原始的web服务。然后,您可以从脚本管理器中调用新创建的Web服务方法