2013-05-05 121 views
0

我向我的網站添加了一個備份任務,該任務執行可能需要很長時間的任務列表。爲長時間運行的進程顯示進度

爲了提供用戶反饋,我有一個包含兩個iframe的主頁面。

第一個iframe有一個按鈕,用於在按鈕單擊後執行備份(因此該頁面將張貼一分鐘或更長時間)。運行時,會在每個步驟完成時更新會話變量。

我在這個頁面上有第二個iframe,在iframe裏面有一個ASP.NET頁面,它在標籤上顯示進度會話變量。

問題是,第一個iframe中的所有步驟完成後,第二個iframe只會刷新。這種行爲在我的ASP.NET開發環境中以及在部署到IIS時是相同的。

隨着會話變量更新,我能做些什麼來使第二個iframe刷新?

回答

1

此行爲是因爲會話鎖定了整個進程,並且在進行備份時鎖定了其他用戶。

找到一些其他地方來存儲進程,而不是會話。如果你的pool只運行一個應用程序,你可能會嘗試將它存儲在一個靜態變量上,如果你有web garden,另一個解決方案是將該變量存儲在數據庫中,或者存儲在帶有其他變量的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

謝謝了。禁用這些頁面上的會話並從其他地方讀取數據會產生理想的效果。 – Joon 2013-05-05 11:54:05

1

ASP.NET會話狀態支持單一的作家,多讀者。

第一個iframe在整個操作過程中對會話狀態有寫入鎖定。 因此,第二個iframe無法從會話中讀取,直到操作完成。

也許更新/讀你的狀態在數據庫或應用程序狀態?

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

相關問題