2010-05-12 105 views
3

我有了一個長期運行的(資源密集型)的過程中後面的代碼,並最終輸出爲PDF文件(圖片爲PDF轉換工具)長期運行的進程

它的Web應用程序運行良好..因爲我在專用服務器上,所以現在對於資源來說完全沒有問題。

但是,如果每次處理的用戶超過20人,我不知道系統會達到其資源限制。

我在網上看到了用戶輸入他們的電子郵件的服務,我想這些進程在後臺排隊,並且結果通過第一個輸出方法通過電子郵件發送。

有人能給我一個關於如何在使用C#的asp.net應用程序中實現這種邏輯的開始嗎?

回答

5

這樣的系統將包含在服務器上運行的Windows服務。 asp.net頁面唯一做的就是向數據庫提交一個請求(包含相關數據)。然後,Windows服務監控該表並處理所有新請求。

0

您想限制併發請求的數量。您可以創建一個單獨的應用程序來處理轉換過程。 Windows服務或定期運行的計劃任務。

  1. 將請求記錄到隊列中,可以是數據庫表或MSMQ。如果程序出現問題,您需要將其記錄到某個隊列中。由於您要異步處理這些進程,因此用戶永遠不會知道是否出現問題,除此之外從不接收文件。這樣,如果發生什麼情況並繼續處理,您可以重新啓動進程。
  2. 讓外部應用程序一次監視一個隊列並處理一個請求。
  3. 當過程完成後,通知用戶該過程已完成,並且可以在網站上下載,或者只需將PDF發送給用戶。

有關外部程序處理轉換的重要部分是,您可以在多臺機器上加載程序以更快地處理請求,而且它不必減慢使用的Web /應用程序服務器的速度處理網站。

+0

謝謝您的回覆。 如果我理解錯了,請原諒我。 1.因此,我創建了一個win服務,可以將輸入的圖像位置和電子郵件地址作爲輸入,並輸出pdf文件的位置。 2.當從Web界面提交請求時,我會將圖像位置和電子郵件地址記錄到數據庫中。並可以說一個專欄說完或不。 我不明白如何做你的第二點。 你如何有Windows服務來監視數據庫? 你能帶我到教程或給我一個片段? 非常感謝, Prasad。 – pessi 2010-05-12 13:47:21

0

正如克勞斯正確地指出,我們已經使用Windows服務
補遺他的回答來實現它:
(I)拆分長時間運行的過程分解成多個任務
(二)對於每一個任務,創建單獨的控制檯應用程序&使用applicationId標識每個應用程序。

enum ApplicationId:byte 
{ 
    Router = 1, 
    Task1 = 2, 
    Task2 = 3, 
    Task3 = 4, 
    Task4 = 5, 
    Email = 6 
} 

(iii)將一個應用程序作爲路由器調用。它會將事務從一個應用程序移動到另一個(iv)現在創建一個帶有transactionId,nextAppId和任何其他相關字段的表格
(v)完成任務後,更新表
中的nextAppId (vi)安排Windows任務計劃程序中的所有應用程序或使用活動批處理服務器(市售)
(VII)的最後一個應用程序的「電子郵件」發送電子郵件與生成的PDF作爲附件到用戶

希望這答案!!!!。祝你今天愉快!!!

相關問題