2011-09-28 84 views
0

(環境.NET 4.0 C#WCF和ASP.NET)通過WCF(C#)與ASP.NET反饋運行的進程異步

所以這是我想有流量發生:

  1. 用戶訪問頁面。
  2. 用戶通過控件上傳文件。
  3. 用戶點擊「提交」。
  4. 頁面告訴WCF服務開始「處理」這個文件(其中有很多的幕後工作,如解壓縮,散列,移動和數據庫的工作情況)
  5. 隨着文件被處理後,用戶將看到反饋關於通過AJAX處理的狀態,更新面板和定時器每N秒檢查一次狀態。

我叫「UploadProcessing」的數據庫,持續上傳的狀態(除其他事項外)增加了一個表,我寫來處理後端它獲取由WCF服務,即上傳的邏輯。處理上傳時,它會上傳'UploadProcessing'記錄以及工作的當前狀態,直到最終完成。

我第一次開始只是打電話從Commit_Click()事件WCFClient.ProcessUpload(args...);,但只是處理上傳和等待,直到它使AJAX更新狀態的計時器,它總是表明,它已經完成之前完成(因爲它有)。然後我嘗試異步調用同一個方法,但它似乎以相同的方式工作,因爲頁面不會完全回發到客戶端(使用啓用的定時器),直到異步完成處理程序得到其響應,實際上導致相同的「完成「對用戶的迴應。

所以我很禮貌地恭候地詢問社區,您將如何通過WCF「啓動並忘記」此ProcessUpload()方法,以便它可以在後臺執行此操作,而頁面可以自由進行異步回發並監視其狀態?也許某種WCF方面的ThreadPool解決方案?或者可能是一個奴隸服務,監控「UploadProcessing」表的待處理上傳,然後以這種方式處理它們?

非常感謝您的任何建議!

回答

1

建議使您的WCF方法成爲OneWay操作,例如,

[OperationContract(IsOneWay = true)] 
public void ProcessUpload(...) 
{ 
    //etc 
}