【问题标题】:ASP.NET Web Pages Web Service Calls Redirecting to about:blankASP.NET 网页 Web 服务调用重定向到 about:blank
【发布时间】:2016-05-16 01:43:50
【问题描述】:

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

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

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

编辑

这是一些示例代码。

<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()); - 这会失败并立即转到 AJAX 调用中的错误函数,而无需使用 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 帖子,但 Chrome 中不存在。

此外,仍然在 IE 中,通过 ajax 工具包的 Web 服务请求不起作用。我注意到有人说要从使用&lt;asp:ScriptManager 切换到&lt;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。

【问题讨论】:

  • 您的 Web 服务是在什么 .net 框架上编译的?你在 IIS 中的应用程序池是什么 .net 框架?
  • 好的,我添加了一些代码,但是代码已经工作了 3 年,不是代码。 IIS中的应用程序池是v4.0,网站是4.6。我已经确认我们的登台和生产服务器也在 IIS 中使用 v4.0,它们没有问题
  • 我已通过将代码发布到我们的登台服务器进一步确认该代码是正确的。那里一切正常。
  • 我只是想到了更新面板,所以我验证了更新面板确实在工作。此错误更有可能与 asmx 文件相关联。也许 IIS 和 IIS Express 都出于某种原因拒绝了它们,但这不会仍然产生 http 请求吗?

标签: c# asp.net web-services asmx


【解决方案1】:

这归结为 2 个问题。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    相关资源
    最近更新 更多