2012-10-16 55 views
1

我目前正在進行一個項目,這個項目基本上是一個網站,它的主要功能是運行一個長計算任務(這項任務由1-10個子任務組成) - (大約需要30-40秒平均完成)並將結果返回給用戶,因爲代碼在網站中使用了多個線程(我不太喜歡這個想法),所以網站在點擊按鈕後繼續運行,同時這個線程在後臺繼續計算。帶日程安排/隊列服務的最佳做法?

我希望將此計算轉移到單獨的服務中,以停止與在Web應用程序中運行線程相關的問題。我的想法是,它應該是一個單獨的服務,每隔X秒運行一次,以查看數據庫中是否存在任何作業,如果有,運行它們,但我幾乎沒有編寫重複出現的Windows服務的經驗,並且想知道是否有人對此問題有任何想法,這是否是正確的方式去做這樣的任務,是否有任何經驗可以做類似的事情,並且任何人都可以推薦我應該繼續的特定方式?

回答

0

我正在研究一個類似的項目。我正在考慮像你一樣創建一項服務,但我沒有看到我的情況帶來的好處。我必須做一些長時間的計算,並將其放入緩存中。我不知道這是否是最佳做法,但我所做的是在global.asax上創建一個計時器,執行我的計算並將其放入緩存中。當請求到達時,我給出最後的緩存值。

我希望這對你有所幫助。

0

在這種情況下,我總是傾向於創建一個tcp偵聽器來接受來自客戶端的請求。如果我使用.net,我的第一個選擇是使用tcp或命名管道綁定的wcf服務。然後,當我收到一個請求時,我啓動一個線程繼續請求。當長時間運行的進程終於結束時,我向客戶端返回一個回調,這是在調度器的第一個請求中指定的一個url。恕我直言,這是做到這一點的最佳方式。

但是,您可能想要在經過驗證的框架(如NServiceBus,RhinoBus等)上構建您的應用程序。您也可以對它們實施相同的業務。