3

从我的 Visual Studio 调试器运行 MVC4 网站时遇到问题,如果打开的页面太多,ajax 请求需要很长时间才能开始发送。非常奇怪的是,如果我关闭其中一个页面,请求就会立即启动。

更多细节... 框架:MVC 4 IDE:Visual Studio 2010 浏览器:IE 9/Chrome

控制器:

[Authorize]
[SessionState(SessionStateBehavior.Disabled)]
public class AnalyticsController 
    : Controller
{        
    public ActionResult SaveWorkspace( Workspace model)
    {
        var returnVal = _save(model);
        return Json(new { actionResult = returnVal, messages = new string[] {} } );
    }
}

我已经尝试过使用 AsyncController 并从 Controller 继承,结果相同。

客户:

$.ajax({
    url: '/Analytics/SaveWorkspace',
    type: "POST",
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(workspace),
    success: function (result) {
        alert("Function Executed");
    }
});

以上是我使用的ajax调用。我所做的是单击网页上的各种链接,这些链接将打开新窗口。对于我的测试,我从调试器中打开了初始浏览器,并从我的主页中生成了 5 个其他浏览器。上面的调用会立即从我的调试器启动的窗口中执行,但是当我从网络捕获中查看请求时,它会一直说“待处理”,直到它最终超时。

现在有趣的部分是,如果我关闭我生成的任何一个窗口,请求将从挂起变为我的控制器并按预期返回。再玩一点,如果我再试一次(不打开其他浏览器),它总是会立即发送到服务器,但如果我打开第 5 个浏览器,它就会再次变慢。我进行了各种测试以确保特定窗口没有任何问题,似乎是 5 个浏览器的神奇数字导致我的请求无法发送。

这是我关闭第 5 个浏览器窗口时成功请求的屏幕截图。 成功

这是我的请求标头的捕获 在此处输入图像描述

这是我的响应标头的捕获 在此处输入图像描述

这是我的时间记录 在此处输入图像描述

我不能真正理解的主要事情是为什么有一个 46 秒的等待期,然后是两个开始期。似乎第一次开始时间很长,而第二次开始发生在我关闭第五个浏览器窗口时。

我试图提供尽可能多的细节以及数据来帮助诊断正在发生的事情。如果我还能做些什么来画出更好的画面,请随时发表评论。任何建议都将受到欢迎。

谢谢你们!

4

3 回答 3

2

您可能会达到单个域的最大连接数限制,即 IE8 中的 6 个。(有关详细信息,请参阅此处。)我不确定 IE9,但由于没有关于它的新闻稿,我认为它没有改变。根据这个SO post ,它在 Chrome 中也是 6 。您的 6 个浏览器窗口是否打开了任何长时间运行的请求,这可能会阻止第 7 个 ajax 调用?

同一篇 SO 帖子说 Firefox 中的连接限制为 8,所以也许您可以尝试在其中运行应用程序并查看问题是否仍然存在。

于 2013-08-01T20:56:19.127 回答
0

我看到以下原因:您在代码中的某处有断点。可能它在 JavaScript 中(关闭浏览器请求后立即执行)。所以禁用你的断点,或者如果它不会帮助尝试暂停调试器以查看发生了什么。

于 2013-08-01T20:31:29.803 回答
0

我知道IE 8 调试存在问题,我不知道它是否也适用于 IE 9,但它也与多个打开的窗口/选项卡有关。试试看。

于 2013-08-01T20:36:28.380 回答