从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秒的等待期,然后是两个开始期。似乎第一个开始时段是长时段,第二个开始时间是在我关闭第5个浏览器窗口时发生的。
我尝试尽可能详细地提供数据以帮助诊断正在发生的事情。如果还有什么我可以做的更好的画面,请随时发表评论。任何建议都将受到欢迎。
谢谢大家!
答案 0 :(得分:2)
您可能正在达到单个域的最大连接数限制,在IE8中为6。 (See here for details。)我不确定IE9,但由于没有关于它的新闻稿,我认为它没有改变。根据{{3}},它在Chrome中也是6。你的6个浏览器窗口是否有任何长时间运行的请求打开,这可能会阻止第7个ajax调用?
同样的SO帖子说Firefox中的连接限制为8,所以也许您可以尝试运行该应用程序并查看问题是否仍然存在。
答案 1 :(得分:0)
我看到以下原因:你在代码中的某处有断点。可能是在JavaScript中(关闭浏览器请求后立即进行)。因此,请禁用您的断点,否则它将无助于尝试暂停调试器以查看正在发生的情况。
答案 2 :(得分:0)
我知道problem with IE 8 debugging并且我不知道它是否也适用于IE 9,但它也与多个打开的窗口/标签有关。试一试。