2010-09-04 26 views
3

我面臨着建立一個系統,該系統將允許用戶:在MVC 2應用程序創建一個非阻塞的過程

  1. 點擊一個按鈕來初始化「下載&壓縮文件」命令,其內容通過XML文件列表,通過HTTP將文件拖到本地目錄,歸檔它們,並將它們存儲下來供下載。
  2. 獲得一個進度條/指示符,通過按下上述按鈕後立即告訴他們「正在處理請求」
  3. 能夠提交另一個「下載&歸檔」命令,無需等待先前的請求完成。
  4. 隨着每個「下載&歸檔」命令完成,已完成歸檔的池應該隨着新歸檔可供下載而增長一個。

我應該如何跟蹤步驟1中發生的正在進行的過程,以及如何根據步驟2和步驟4的要求將正確的事件/消息傳回UI?

UI如何知道正在進行的過程?魔術文件夾和文件系統上的令牌?會話狀態?一個由進程寫入並由前端代碼讀取的數據庫?

我想知道這是否是經常遇到的事情,並有一個「標準方式」實施?

僅供參考,我的堆棧:

  • ASP.NET MVC 2上.NET 4
  • IIS 7
  • 外部7zip的庫,用於.NET

回答

2

在客戶端,其在你的情況是MVC控制器創建一個具有身份(最有可能是一個GUID)的顯式Command對象。然後通過產生新線程或通過ServiceBus發送單向消息到您的後端進程,並將命令標識返回到您的視圖。

雖然您的後端進程正在工作,但您的View可以輪詢(使用JavaScript)存在的URI。 例如http://www.mysite.com/asyncresults/GUID.js

然後,您的後端進程可以使用JSON對象在文件系統上創建GUID.js,爲您提供足夠的信息來呈現進度更新。

由於客戶端正在輪詢文件,它將收到一個404,直到文件存在。當您收到200時,您可以使用包含的JSON呈現您的用戶界面。

該解決方案具有可擴展性和實施簡單性。