2010-08-23 44 views
0

我想知道從ASP.NET網頁按需啓動處理長時間運行進程的最佳方式。處理ASP.NET中長時間運行的進程

的過程可以包括的各個步驟(如文件上傳到服務器,在上面運行SSIS包,執行一些存儲過程等),有時這個過程可能需要長達幾個小時才能完成。

如果我使用WCF服務去異步執行,那麼如果用戶關閉,而進程正在運行,過程如何成功或失敗的結果應該顯示給用戶瀏覽器中會發生什麼?爲了解決這個問題,我選擇了單向的WCF服務調用,但問題在於我需要創建一個進程表並存儲結果(如果在任何步驟中失敗並且哪些步驟已成功完成,則存儲錯誤消息)該表是額外的開銷,因爲有許多這樣的進程具有用戶可以從網頁調用的各種步驟,並且用戶需要知道進度(在最簡單的情況下,狀態可以是「進程xyz運行」)一旦完成,輸出需要顯示給用戶(例如通過運行存儲過程)。

什麼是設計這個解決方案的最佳方式是什麼?

回答

2

在我看來,你有三種選擇

  1. 有一個長期運行的頁面,用戶等待爲迴應。如果這是幾個小時,你會遇到很多可用性問題,所以我甚至不會考慮它。
  2. 創建一個進程表來存儲操作結果。異步運行服務功能並將結果記錄到服務中。可以有一個用戶刷新的頁面,獲取此表的最新結果。
  3. 如果您確實不想創建表格,則將所有當前進程的詳細信息存儲在用戶的會話狀態中,並具有上述的當前進程頁面。您可能會遇到會話可能超時的問題,或者Web應用程序可能會重新啓動,您將失去所有這些。

我看不出2號這麼大的困難。您可以使表格具有相當的通用性,以涵蓋所有類型的進程:進程細節可以被編碼爲二進制或XML,並由Web應用程序解釋。然後你有最強大的解決方案。

+0

感謝所有的答覆。我需要構建的東西更像是一個小型工作執行管理工具,由Web界面觸發,這不是很常見。我可能會創建一個通用的進程表並將日誌消息存儲爲xml。日誌消息主要表示執行進度。 – RKP 2010-08-24 11:28:35

1

我不能說最好的辦法是什麼,但使用的是Windows Workflow Foundation的這樣的長時間運行的進程肯定是去了解它的一種方式。

你可以做的過程中追蹤,看看它是在哪個階段,甚至堅持,如果你有在那裏等待用戶輸入步驟等

WF提供了很多功能開箱即用(尤其是如果您的存儲介質是SQL Server)並且可能是一個不錯的選擇。

http://www.codeproject.com/KB/WF/WF4Extensions.aspx可能有助於給你一些更深入地瞭解一樣。

1

我認爲你是在正確的軌道上。您應該異步運行該進程,將執行存儲在某處(表),並將運行進程的狀態保存在那裏。

您的用戶應該看到一個未決顯示標籤,而進程正在執行,以及一個完成標籤,其結果當進程結束。如果用戶關閉瀏覽器時,她會看到她正在運行的進程的結果,下一次她登錄英寸

相關問題