我正在开发一个使用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服务?
答案 0 :(得分:1)
来自Exposing Web Services to Client Script:
ServiceReference对象只能引用Web服务 与页面相同的域。 Web服务路径可以是相对的, 应用程序相对,域相对或绝对。绝对的 路径,您必须确保路径在同一个域中。
因此,您无法调用另一个域中的Web服务方法。你可以做的是在你的asp.net项目中创建另一个服务来调用原始的web服务。然后,您可以从脚本管理器中调用新创建的Web服务方法