在ASP中存储进度信息的位置.Net web应用程序

本文关键字:位置 Net web 应用程序 信息 ASP 存储 | 更新日期: 2023-09-27 18:03:13

我正在创建一个页面,可以上传文本文件并将其构建为多个pdf。它们只是从Excel导出的。文件中的每一行都对应一个需要创建的新PDF。

无论如何,一旦文件上传,我想开始处理它们,但我不希望用户必须留在页面上,甚至仍然打开他们的会话。例如,他们可以关闭浏览器,10分钟后回来,登录,进度信息会显示112/200个文件处理或类似的东西。但它会比这快得多。 所以两个问题,我如何将这个处理任务传递给一些东西(处理器?线程?),它将在页面关闭时继续运行,并将在任务启动时返回(因此浏览器没有停止)?其次,我可以在哪里存储这些信息,以便当用户返回页面时,他们可以看到当前的进度。

我意识到我不能使用会话,因为它将每秒处理一个文件,我不真的想要每秒更新一个DB。有什么办法可以帮我吗?这可能吗?

在ASP中存储进度信息的位置.Net web应用程序

我通过上面astander提供的链接解决了这个问题。我只是在HttpContext中创建了一个对象。应用程序来存储进度变量,然后在一个新的线程中设置执行我的处理的方法。

// Create the new progress object
BatchProgress bs = new BatchProgress(0);
if(Application["BatchProgress"] != null)
{
    // Should never happen
    Application["BatchProgress"] = bs;
}
else
{
    Application.Add("BatchProgress","bs");
}
//Set up new thread, run batch is the method that does all the processing.
ThreadStart ts = new ThreadStart(RunBatch);
Thread t = new Thread(ts);
t.Start();

然后在线程启动后返回,我可以使用jQuery定期获取Application["BatchProgress"]对象。在我的线程结束时,BatchProgress对象的状态设置为"完成",然后当jQuery查询它时,它会看到完成状态并从应用程序中删除进度对象。