簡體   English   中英

通過WCF(C#)從ASP.NET反饋異步運行進程

[英]Running a process asynchronously with feedback from ASP.NET via WCF (C#)

(環境.NET 4.0 C#WCF和ASP.NET)

所以這是我想要發生的流程:

  1. 用戶訪問頁面。
  2. 用戶通過控件上傳文件。
  3. 用戶單擊“提交”。
  4. Page告訴WCF服務開始“處理”此文件(發生很多幕后工作,如解壓縮,哈希,移動和數據庫工作)
  5. 隨着文件的處理,用戶會通過AJAX,更新面板和每隔N秒檢查一次狀態的計時器看到有關處理狀態的反饋。

我在數據庫中添加了一個名為“ UploadProcessing”的表,該表保留了上載的狀態(除其他外),並且我編寫了在后端處理上載的邏輯,該邏輯由WCF服務調用。 在處理上載時,它將上載具有工作當前狀態的“ UploadProcessing”記錄,直到最終完成。

我首先從僅調用WCFClient.ProcessUpload(args...); Commit_Click()事件中獲取,但僅處理了上傳並等待完成,然后再啟用AJAX更新狀態計時器,該計時器始終顯示已完成(因為已完成)。 然后,我嘗試異步調用相同的方法,但是它似乎以相同的方式起作用,因為在異步完成處理程序得到響應之前,頁面不會完全發回到客戶端(使用啟用的計時器),從而有效地導致了相同的“已完成”對用戶的回復。

因此,我有禮貌地向社區詢問,您將如何通過WCF來“觸發並忘記”此ProcessUpload()方法,以便它可以在后台執行其操作,同時頁面可以自由地異步回發並監視其狀態? 也許在WCF方面有某種ThreadPool解決方案? 還是從服務監視“ UploadProcessing”表中的未決上載,然后以這種方式處理?

預先感謝您的任何建議!

建議將WCF方法設為OneWay操作,例如

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

聽起來您正在按照正確的方式進行操作,也許您對WCF服務的異步設置不是很正確嗎? 這個問題的答案有一些有用的鏈接,這是MSDN頁面上的異步調用WCF服務操作

更新 :看來此博客文章幾乎完全涵蓋了您的問題,對您來說似乎是一個很好的資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM