0

我正在开发一个使用 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 服务?

4

1 回答 1

1

将 Web 服务公开到客户端脚本

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

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

于 2013-08-26T04:44:13.160 回答