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

时间:2016-05-16 01:43:51

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

我刚刚重新格式化了我的电脑并重新安装了所有内容。我启用了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中它实际上是成功的。我拿出改变Chrome中行为的dataType: 'json',行,这样它就不会转到错误函数,而是成功函数;但是,数据实际上并未从服务器返回。 Fiddler会显示来自IE的http帖子,但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。

1 个答案:

答案 0 :(得分:0)

这归结为2个问题。

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

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