需要解决方法:Windows Azure负载平衡器在60秒后关闭空闲连接

时间:2011-07-07 10:29:10

标签: asp.net silverlight azure timeout load-balancing

一个简单的问题。我有一个生成报告的ASHX处理程序。不幸的是,此过程可能需要2分钟或更长时间才能完成,Azure将在此处理程序响应之前关闭连接。为什么?因为连接闲置时间太长,所以它被扼杀了 所以,我需要以某种方式保持这种联系。为了使它更复杂,从Silverlight应用程序调用处理程序,该应用程序将从当前网页上的框架调用处理程序,或者(当不从浏览器运行时)创建一个新的浏览器实例来调用处理程序。
我的挑战是用最少量的代码来解决这个超时问题。而且,代码需要完全像现在一样工作!

在单独的框架或浏览器窗口中打开处理程序允许将报告保存在用户系统的任何位置。如果我从Silverlight代码中下载它,我将没有正确的写访问权限。任何需要写入本地磁盘的Silverlight应用程序都没有权限,因此可以解决浏览器/框架的问题。

1 个答案:

答案 0 :(得分:4)

对HTTP传输不太确定,但您当然可以在套接字级别使用TCP keep-alives。但是,您需要创建套接字侦听器来下载HTTP内容(方式过度杀伤)。

也许有一个更简单的解决方案?为什么不让客户端发出生成报告的请求,让处理程序返回SAS签名(时间限制,只读签名)到报告最终放入blob存储的位置。这非常快,不需要打开TCP连接。报告生成器应该只在一个文件中创建报告,以便在它发送到客户端的blob位置下载(任何GUID都可以在这里工作),而不是通过响应将其重新流回。最后,客户端只需要轮询该位置,直到获取文件为止。现在你很好并且短路连接异步,不必担心这个TCP超时问题。执行此操作的代码远比用于解决TCP超时的任何事情复杂得多。