0

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

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

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

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

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

随着会话变量的更新,我该怎么做才能使第二个 iframe 刷新?

4

2 回答 2

1

这种行为是因为会话锁定了整个进程,并且在您进行备份时锁定了您的其余用户。

找到其他地方来存储进程,而不是会话。如果您的池仅与一个应用程序一起运行,您可以尝试将其存储在静态变量中,如果您有网络花园,另一种解决方案是将该变量存储在数据库中,或者存储在具有其他变量的 xml 文件中。

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

关于会话锁定:
Web 应用程序在共享同一会话时处理另一个 Web 应用程序时被阻止
对 Web 服务的 jQuery Ajax 调用似乎是同步的
ASP.NET 服务器不会异步处理页面
完全替换 ASP.Net 的会话

于 2013-05-05T11:25:09.100 回答
1

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

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

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

请参阅非锁定进程内 ASP.NET 会话状态存储

于 2013-05-05T11:32:25.500 回答