2009-06-18 50 views
1

我有以下情況:我有一個存儲過程,從一堆表中獲取數據並創建一個記錄到一個表中。之後,最終用戶可以根據生成表格中該行的數據得到一些圖形。問題是,從多個表中收集數據到最終的數據可能會有很長的運行時間。我希望從我的Web應用程序中爲用戶提供開始收集數據的可能性,並且在完成這些工作以告知他這一點時,可以根據所得到的收集數據訪問圖形圖表。我的問題是如何實施這個最佳實踐。收集SQL數據與反饋到asp.net web應用程序

回答

1

在服務器上啓動後臺線程進行處理。您可以將處理結果存儲在session state,數據庫或其他位置。

在客戶端,使用UpdatePanel和Timer定期輪詢服務器的結果。當結果存在時,禁用定時器。

0

我會做一些像Andomar的建議,但在一個Windows服務,而不是在asp.net進程中的線程。

首先,我將在我的數據庫中設置一個表,用作工作隊列 - 也許您的結果表就足夠了?該表將包含作業唯一標識,作業描述(由您的服務用於確定要執行的操作)和作業狀態代碼(新作業,已完成)。

然後,我會設置一個Windows服務應用程序,將定期輪詢此表。根據您的負載情況,可能每隔5-30秒鐘更換一次。該服務很簡單:如果發現任何新作業,它會將第一份工作標記爲「正常工作」,然後運行數據收集過程。完成該過程後,該服務會將工作標記爲已完成。

最後,在我的asp.net應用程序中,我將設置一個作業順序頁面,用戶可以請求新的數據收集作業。該請求會將新記錄插入到工作隊列表中,狀態爲新,並根據需要顯示工作描述。然後,頁面會將用戶重定向到一個新頁面(或使用ajax),該頁面將檢查作業的狀態並每隔XX秒重新加載以檢查作業是否完成。當作業狀態代碼設置完成時,我們會顯示用戶可以顯示報告或下載文件等的頁面。

我在這裏建議的是基於輪詢的作業隊列的簡單實現。你當然可以使用MSMQ或類似的東西來製作一個更好的版本,但如果不是大多數情況,這應該足夠了。

相關問題