簡體   English   中英

在 ASP.Net web 應用程序中存儲進度信息的位置

[英]Where to store progress information in ASP.Net web application

我正在創建一個頁面,用於獲取上傳的文本文件並將它們構建成多個 PDF。 它們只是 Excel 的出口。 文件中的每一行對應一個需要新建的 PDF。

無論如何,一旦文件上傳,我想開始處理它們,但我不希望用戶必須留在頁面上,甚至仍然打開他們的 session。 例如,他們可以關閉瀏覽器並在 10 分鍾后返回,登錄,進度信息會顯示 112/200 個文件已處理或其他內容。 不過,它會比這快得多。

所以真的有兩個問題,我怎樣才能將此處理作業傳遞給在頁面關閉時將繼續運行的東西(處理程序?線程?),並在作業開始后立即返回(因此瀏覽器不會停止) ? 其次,我在哪里可以存儲這些信息,以便當用戶回到頁面時,他們可以看到當前的進度。

我意識到我不能使用會話,並且由於它將每秒處理一個文件,我真的不想每秒更新一個數據庫。 有什么辦法可以做到這一點嗎? 可能嗎?

我通過使用上面 asstander 提供的鏈接解決了這個問題。 我只是在 HttpContext.Application 中創建一個 object 來存儲進度變量,然后設置在新線程中執行我的處理的方法。

// 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"] object 。 在我的線程結束時,BatchProgress object 的狀態設置為“完成”,然后當 jQuery 查詢它時,它會看到完成狀態並從應用程序中刪除進度 object。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM