我正在开发一个使用 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 服务器正在报告:
在以下位置找不到 Web 服务:/Service.asmx
如何解决此问题以便正确引用 Web 服务?