显示长时间运行的进程的进度

时间:2013-05-05 11:19:48

标签: asp.net progress

我在我的网站上添加了一个备份任务,该任务执行可能需要很长时间的任务列表。

为了提供用户反馈,我有一个包含两个iframe的主页。

第一个iframe有一个按钮,用于在按钮点击后执行备份(因此页面会发布一分钟或更长时间)。在运行时,会在每个步骤完成时更新会话变量。

我在这个页面上有第二个iframe,在iframe中有一个ASP.NET页面,它在标签上显示进度会话变量。

问题是,只有第一个iframe中的所有步骤都完成后,第二个iframe才会刷新。这种行为在我的ASP.NET开发环境中以及部署到IIS时都是相同的。

如果更新了会话变量,我该怎么做才能进行第二次iframe刷新?

2 个答案:

答案 0 :(得分:1)

此行为是因为会话锁定了整个进程,并在您进行备份时锁定了其他用户。

找到一些其他地方来存储流程,而不是会话。如果您的池只运行一个应用程序,您可以尝试将其存储在静态变量上,如果您有Web园,则另一个解决方案是将该变量存储在数据库中,或者存储在包含其他变量的xml文件中。

此外,您还需要从禁用会话的页面运行备份!

关于会话锁定:
Web app blocked while processing another web app on sharing same session
jQuery Ajax calls to web service seem to be synchronous
ASP.NET Server does not process pages asynchronously
Replacing ASP.Net's session entirely

答案 1 :(得分:1)

ASP.NET会话状态支持单个编写器,多个读取器。

第一个iframe在整个操作期间有一个写入器锁定到会话状态。 因此,在操作完成之前,第二个iframe无法从会话中读取。

也许在数据库或应用程序状态下更新/读取您的状态?

请参阅A non-locking in-process ASP.NET session state store