我们的前端 MVC3 Web 应用程序使用 AsyncController,因为我们的每个实例都为数百个长时间运行的 IO 绑定(bind)进程提供服务。
由于 Azure 将在预定的时间间隔(这似乎根据您阅读的网站而有所不同)后终止“非事件”http session ,因此我们如何保持连接处于事件状态?
我们的客户必须保持连接,我们的流程将运行 30 秒到 5 分钟或更长时间。我们怎样才能让客户端保持连接/活跃?我最初想到在 Async 方法上设置超时,然后只用几个字节的输出来命中 Response 对象,有点像对响应进行分块,然后返回并等待更多。但是,我认为这不会起作用,因为 MVC3 正在处理 IIS 线程与异步响应的连接,此时异步响应已经渲染了 View 。
我们如何在 AsyncController 上运行一个非常长的进程,但客户端不会被 Azure 负载均衡器断开连接?向调用者发送立即响应,并要求调用者轮询或检查另一个资源 URL 是 Not Acceptable 。
最佳答案
Azure 负载均衡器空闲超时为 4 分钟。您能否尝试在客户端配置 TCP 保持事件时间少于 4 分钟,以保持连接事件?
另一方面,长时间保持每个客户端的连接打开是相当昂贵的。这将限制每台服务器可以处理的客户端数量。另外,我认为如果 IIS 认为需要该连接来服务其他请求,则无论其保持事件如何,它仍可能决定关闭该连接。
关于asp.net - Azure Web 角色 - 长时间运行的请求(负载均衡器超时?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12547463/