我之前发布了一个类似的问题,但没有得到任何回应,所以我试图让它更具体(在经过大量测试后,我已经能够做到这一点)。我不会一直推,但这是一场精彩的表演,快把我逼疯了。
我有一个MVC3应用程序。在其中,我有一个包含以下两个方法的测试控制器:
public ActionResult Test2()
{
return View();
}
public ActionResult Test2Get()
{
System.Threading.Thread.Sleep(270000);
var x = "Author = x";
return Json(x,JsonRequestBehavior.AllowGet);
}Test2视图如下所示:
@{
ViewBag.Title = "Test2";
}
<h2>Test2</h2>
<script type="text/javascript">
$(document).ready(function () {
$.ajax({
url: 'http://www.lp-web.net/Test/Test2Get',
type: 'GET',
success: function (result) { alert('success'); }
});
});
</script>正如您所看到的,JSON视图只是执行一个"on load“方法的回调,该方法休眠4.5分钟,然后返回一些Test2。
当通过Azure模拟器在VS中本地运行时,它在所有浏览器上都工作得很好。如果我构造一个非Azure版本并部署到托管服务器上,那么这在所有浏览器中都工作得很好。这里的"works“指的是显示带有”成功“消息的警告。
然而,当部署到Windows Azure时,这只在我使用Chrome时有效。否则,该警报将永远不会出现。
还有其他花样:例如,如果睡眠时间设置为4分钟或更短,所有浏览器都可以工作,即使应用程序部署到Azure也是如此。但我真的不知道这有什么关系。
我希望有人知道我可以去哪里找。如果有人想自己尝试一下,你可以去http://www.lp-web.net,点击"Test2“操作链接,等待4.5分钟。我很好奇是不是“只有我”。
提前感谢您的建议。
发布于 2012-09-07 10:36:20
听起来好像负载均衡器的连接超时了。负载均衡器超时的默认值为4分钟(过去为1分钟),超过该时间后,连接将被重置。
这并不能完全解释Chrome的工作原理;然而,the bottom of this thread observes有类似的行为影响了IE和火狐(明确命名它们可能意味着它不会在Chrome上发生?)
有关负载均衡器的含义以及如何补救的更多上下文,请查看Windows Azure Load Balancer Timeout Details。
https://stackoverflow.com/questions/12308555
复制相似问题