5

我们的前端 MVC3 Web 应用程序正在使用 AsyncController,因为我们的每个实例都在为数百个长时间运行的 IO 绑定进程提供服务。

由于 Azure 将在某个预定时间间隔后终止“非活动”http 会话(这似乎因您阅读的网站而异),我们如何保持连接有效?

我们的客户必须保持联系,我们的流程将运行 30 秒到 5 分钟或更长时间。我们如何保持客户端连接/活动?我最初想在 Async 方法上设置一个超时,然后用几个字节的输出来访问 Response 对象,有点像将响应分块,然后返回并等待更多。但是,我认为这行不通,因为 MVC3 正在处理 IIS 线程与异步响应的连接,该响应当时已经呈现了一个视图。

我们如何在 AsyncController 上运行一个非常长的进程,但不让客户端被 Azure 负载均衡器断开?向调用者发送立即响应,并要求调用者轮询或检查另一个资源 URL 是不可接受的。

4

1 回答 1

5

Azure 负载均衡器空闲超时为 4 分钟。您可以尝试在客户端配置 TCP keep-alive 少于 4 分钟,这应该保持连接处于活动状态吗?

另一方面,长时间保持每个客户端的连接打开是相当昂贵的。这将限制每台服务器可以处理的客户端数量。另外,我认为如果 IIS 认为它需要连接来服务其他请求,它可能仍然决定关闭连接而不管保持活动状态。

于 2012-09-22T20:53:23.367 回答