2

我之前发布了一个类似的问题,但没有得到任何回复,所以我试图让它更具体(经过大量测试后我已经能够做到这一点)。我不会继续推动,但这是一个阻碍,让我发疯。

我有一个 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>

正如您所看到的,Test2 视图只是在“加载”时对一个休眠 4.5 分钟然后返回一些 JSON 的方法执行回调。

当通过 Azure 模拟器在 VS 中本地运行时,这在所有浏览器上都可以正常工作。如果我构建一个非 Azure 版本并部署到托管服务器,那么这在所有浏览器中都可以正常工作。“工作”是指显示带有“成功”消息的警报。

但是,当部署到 Windows Azure 时,这仅在我使用 Chrome 时才有效。否则警报永远不会出现。

还有其他一些花絮:例如,如果睡眠持续时间设置为 4 分钟或更短,所有浏览器都可以工作,即使应用程序部署到 Azure 也是如此。但我真的不知道这有什么相关性。

我希望有人知道我可以在哪里看。如果有人想亲自尝试,您可以访问http://www.lp-web.net,单击“Test2”操作链接并等待 4.5 分钟。我很想知道是不是“只有我”。

提前感谢您的任何建议。

4

1 回答 1

1

听起来连接在负载平衡器处超时。负载均衡器超时默认为四分钟(以前是一分钟),之后连接被重置。

这并不能完全解释 Chrome 的工作原理。但是,该线程的底部观察到影响 IE 和 Firefox 的类似行为(通过明确命名它们可能意味着它不会在 Chrome 上发生?)

有关负载均衡器含义的更多上下文以及您可以如何补救,请查看Windows Azure 负载均衡器超时详细信息

于 2012-09-07T02:36:20.017 回答