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 个问题。
当我第一次打开解决方案时 Visual Studio 重新下载了很多包并替换了我在 bin 文件夹中的 dll。唯一的问题是 AjaxControlToolkit.dll 是错误的版本。我从登台服务器复制了旧版本,它解决了 IE 中 ajax 控制工具包级联下拉列表的问题。
Chrome 对于级联下拉菜单或简单的 jQuery AJAX 调用仍然根本不起作用。这最终是由于我的广告拦截器扩展程序 (Stands) 阻止了来自 运行 的脚本。我将 localhost 列入白名单,现在 Chrome 也可以正常工作
我刚刚重新格式化了我的电脑并重新安装了所有东西。我启用了 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 个问题。
当我第一次打开解决方案时 Visual Studio 重新下载了很多包并替换了我在 bin 文件夹中的 dll。唯一的问题是 AjaxControlToolkit.dll 是错误的版本。我从登台服务器复制了旧版本,它解决了 IE 中 ajax 控制工具包级联下拉列表的问题。
Chrome 对于级联下拉菜单或简单的 jQuery AJAX 调用仍然根本不起作用。这最终是由于我的广告拦截器扩展程序 (Stands) 阻止了来自 运行 的脚本。我将 localhost 列入白名单,现在 Chrome 也可以正常工作