长时间运行的服务器进程在客户端更新标签。 AJAX ASP.Net

时间:2009-07-27 21:54:51

标签: asp.net ajax

我有一个长期运行的服务器端进程(作为do / while循环的一部分,通过Web服务批量获取数据)。在每次通过循环时,我想将状态消息推回到客户端上的更新面板中的标签控件。

我已尝试将值分配给后面的代码中的标签,然后使用计时器控件每分钟刷新一次更新面板。但这似乎不起作用。

有任何想法或建议吗?

TIA

4 个答案:

答案 0 :(得分:1)

我建议使用一个简单的jQuery.get调用页面,该页面可能通过会话变量从服务器端进程读取状态。然后客户端会发出请求。失败的是,您正在让服务器端尝试将内容从服务器端推送到客户端(强制更新)...随着长时间运行的进程继续运行。据我所知,你不能随心所欲地通过http推送......请求必须由浏览器提出!

答案 1 :(得分:1)

您在评论中走在正确的轨道上。考虑在单独的线程中生成工作并通过会话/缓存跟踪其进度。您甚至可以更进一步将任务及其所有线程逻辑封装到LongRunningTask类中,并在您的轮询代码中查看((LongRunningTask)Cache["MyLongRunningTask"]).TaskStatus或其他内容(当然 - 不要使用那些确切的代码)检索状态=))

答案 2 :(得分:0)

您可能会考虑采用略有不同的方法。

首先,摆脱计时器。然后使用Response.Write输出您在该过程中的位置。 I.E。:处理项目编号234

在response.write之后,执行Response.Flush。这会强制服务器将当前缓存的响应对象写入浏览器。

答案 3 :(得分:0)

让您的服务器进程写入和刷新

<script>
  /* jquery to update an element on the client page */
</script>

使用当前状态更新页面上的元素。您可能必须使用空格填充此内容,以便添加足够的字节以正确刷新(例如,1000bytes)。这甚至可以在之后出现。你的客户可能有一些问题,如果脚本标签内的东西非常冗长,并且你有很多更新,但如果你只保留一些更新它应该没问题(如.. ..每10%的百分比),否则最终输出的文件大小可能在高兆字节范围内。