2012-03-06 110 views
8

處理需要很長時間執行的過程的建議方法是什麼?我不想僅僅在服務器上運行它,因爲頁面會超時。長時間運行的任務 - 最佳實踐 - ASP.NET 4.0,C#

我瀏覽網頁,發現多種方法 - AJAX,線程,網絡服務(其中沒有我有經驗)

什麼是處理這個問題的最佳實踐方法?

謝謝。

回答

4

一種透明可靠的方法是將所需的任務與處理隊列一起實現爲WebService。因此,在客戶端,您可以簡單地向Web服務器發送請求,接收一些ID以便稍後檢查結果。

其他一切都取決於您嘗試實施的豐富的用戶體驗。通過按下按鈕,您可以簡單地讓用戶不時刷新控件或整個頁面。或者實現一個基於ajax的控件來發送請求並且不時自行檢查結果。

+0

感謝您的回覆。如前所述,我確實遇到過網絡服務。我特別想知道這是否是最佳做法。一旦我知道了,我會進一步研究它(我會使用新的Web API?)我的情況是,用戶將上傳大型Excel文件到服務器並向DB添加記錄。 – Rivka 2012-03-06 03:00:01

+0

看看這個:http://weblogs.asp.net/jgalloway/archive/2008/01/08/large-file-uploads-in-asp-net.aspx – 2012-03-06 05:37:47

1

根據您的要求,您可以設置一個WebService(或者,更準確地說,因爲常規的XML Web服務已被棄用,所以可以設置爲WCF service),就像提到的pukipuki一樣。

如果長時間運行的過程很複雜(很多步驟,非常密集,可能與其他服務器有關)或需要強壯(作業可能失敗並需要重試等),您可能需要研究如何使用某種形式的消息隊列來控制流入和流出執行長期運行流程的服務的流量。消息隊列在某些情況下肯定是過度消耗,但它也是一個很好的框架,提供消息存儲,持久性和流量控制,因此您不必自己構建它。 Here是如何在ASP.NET中使用MSMQ的非常好的概述(很抱歉,示例代碼似乎是VB而不是C#)。

8

如果你只是想做一個長期運行的任務,Windows服務是完美的。不,不是一個網絡服務,而是一個老派的Windows服務。當有人上傳Excel時,Windows服務可以使用FileWatcher監視目錄,然後自動執行導入過程。這樣你就不會限制你的進程到ASP.NET和IIS Worker進程,這可以由於許多原因而被回收。這聽起來像你的應用程序真的需要在IIS之外。上傳過程可以是一個簡單的Web前端,將該文件放入由Windows服務監視的目錄中。