ASP.NET 网页 Web 服务调用重定向到 about:blank

ASP.NET Web Pages Web Service Calls Redirecting to about:blank

我刚刚重新格式化了我的电脑并重新安装了所有东西。我启用了 IIS,我在 Visual Studio 2015 年工作的网站运行良好,即使使用 SQL 数据库也是如此。但是,none 我的 Web 服务正在返回任何数据。 Web 服务都是 .asmx Web 服务。我尝试转到 .asmx 页面本身并调用 Web 方法,但所发生的只是我被重定向到 about:blank。这是在我成功到达 asmx 页面之后,但在我单击特定 Web 服务上的调用之后。

此外,我有 Fiddler 运行ning,甚至根本没有创建 http 请求。我已经尝试使用 asmx 页面、ajax 控制工具包和 jQuery AJAX 调用来调用 Web 服务,所有这些甚至都不会产生 http 请求。该网站在 IIS 中 运行ning。

知道是什么导致了这种行为吗?

编辑

这是一些示例代码。

<script type="text/javascript">
    $(document).ready(function () {
        debugger;
        var vendorId = 5;
        var postData = JSON.stringify({ vendorId: vendorId });

        $.ajax({
            type: "POST",
            url: "../WebServices/BuildMaterialService.asmx/GetPurchaseOrderItemsByVendorId",
            data: postData,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            timeout: 5000,
            success: function (data, textStatus, jqSHR) {
                debugger;
                data = data.d;
                alert(data);
            },
            error: function (request, status, error) {
                debugger;
                if (status == "timeout")
                    alert("A timeout occurred. Please try again.");
                else
                    alert("An unknown error occurred. Please try again.");
            }
        });
    });
</script>

是的,jQuery 已经加载并运行。第一个调试器被命中,vendorId 和 postData 设置正确。 AJAX 调用从不在 Fiddler 中生成 HTTP 请求。事实上,它进入了 AJAX 调用,当我按下 F10 时,下一步是在其他一些后台代码中。我将再次让 javascript 运行 并在错误函数中的调试器命令处再次停止。

同样,这段代码已经运行了 3 年,一直运行良好,只是在重新格式化后才停止运行。代码是正确的,所以错误可能来自IIS。

我试图缩小原因,但实际上我的真实代码中的那行 var vendorId = 5; 被替换为 var vendorId = Number($('#ddlVendors :selected').val()); - 这失败并立即转到 [=58 中的错误函数=] 调用而无需使用 AJAX 命令。如果我进入控制台并编写相同的代码行但更改变量名称,它工作得很好 var abc = Number($('#ddlVendors :selected').val()); - abc 在这里设置正确。当我进入代码并将 vendorId 更改为 abc 时,它与变量名称 vendorId 没有任何关系,并且发生了同样的错误。即使在控制台中,即使在调用该变量声明之前(之前在调试器上暂停),我也无法声明我放在那里的任何名称的变量并分配值。即 var vendorId = 5; 失败但 var blabla = 5;

抱歉,这很长而且令人困惑,但它让我感到困惑并且难以描述。

编辑 2

我注意到在 IE 中它实际上是成功的。我删除了 dataType: 'json', 行,它改变了 Chrome 中的行为,这样它就不会转到错误函数,而是转到成功函数;但是,数据实际上并未从服务器返回。 Fiddler 确实显示来自 IE 的 http post,但是 none 存在于 Chrome.

此外,在 IE 中,通过 ajax 工具包的 Web 服务请求仍然无法正常工作。我注意到有人说要从使用 <asp:ScriptManager 切换到 <ajaxToolkit:ToolkitScriptManager。我不知道为什么在重新格式化后突然有必要这样做,但我试过了。结果是我得到一个错误 Could not load file or assembly 'AjaxMin, Version=4.97.4951.28478, Culture=neutral, PublicKeyToken=21ef50ce11b5d80f' or one of its dependencies. The system cannot find the file specified. 网上的人的回应似乎是从 NuGet 安装 AjaxMin。我这样做了,但我仍然没有得到 AjaxMin.dll 文件,而且它没有安装正确的版本。我尝试使用命令 Install-Package AjaxMin -Version 4.97.4951.28478 但它给出了找不到该包的错误。我不确定为什么甚至会请求该文件,因为我在我的项目目录中的任何地方都没有看到任何对 AjaxMin 的引用。

我什至从 https://github.com/DevExpress/AjaxControlToolkit/ 下载了 AjaxControlToolkit 并在我的机器上构建了它。我 运行 示例站点并转到级联下拉示例,它在 Chrome 中不起作用,但在 IE 中起作用。这是使用 IIS Express。

这归结为 2 个问题。

  1. 当我第一次打开解决方案时 Visual Studio 重新下载了很多包并替换了我在 bin 文件夹中的 dll。唯一的问题是 AjaxControlToolkit.dll 是错误的版本。我从登台服务器复制了旧版本,它解决了 IE 中 ajax 控制工具包级联下拉列表的问题。

  2. Chrome 对于级联下拉菜单或简单的 jQuery AJAX 调用仍然根本不起作用。这最终是由于我的广告拦截器扩展程序 (Stands) 阻止了来自 运行 的脚本。我将 localhost 列入白名单,现在 Chrome 也可以正常工作