2013-04-10 32 views
1

從購買日期起12個月後向客戶發送通知電子郵件的最直接方式是什麼?到期通知

我們的Web服務器運行連接到SQL Server的ASP.NET MVC 3網站。目前,我們每週一手動運行一個網頁,通知過期的用戶。

這裏是我心目中至今選項:運行日常使用任務計劃程序

  • 建立一個控制檯應用程序,不斷地檢查計時器網頁

    1. 並最終發送通知
    2. 構建一個Windows服務如2)在發生故障的情況下可以自動重啓

    我是否錯過了更容易的事情?

    謝謝。

  • 回答

    0

    我以前的公司有同樣的問題。最後,我們去了Task Scheduler。主要原因是任務計劃程序是用於處理Windows中的重複性任務的標準機制,因此在未來比其他選項更易於維護。

    我們的控制檯應用程序每天都由Task Scheduler運行,它被設計爲「智能」。我的意思是聰明。

    • 控制檯應用程序是一個調用WCF服務的虛擬應用程序。所有的邏輯都在WCF服務中。其原因是將所有的代碼放在同一個地方。
    • 如果運行失敗,在我們的系統日誌中寫入警報(每天都會檢查它是一個數據庫表)。如果發生災難性故障(無法訪問數據庫),我們在控制檯應用程序目錄中寫入文件。
    • 如果它已經在處理中,第二個實例不允許運行(某種單身人士)
    • 它跟蹤DB在哪些電子郵件發送的情況下,如果在同一天執行兩次,只有第一次發送電子郵件。
    • 它有一個/whatif參數
    • 如果電子郵件失敗,它被記錄下來,並且過程繼續。
    • 如果它必須發送幾封電子郵件並且在某個時刻失敗,那麼下一次執行會從停止的位置開始執行。

    內部代碼是像

    Linq to get all the users that deserved an email 
    For each user 
        Send the email, mark it as sent in DB and close transaction 
        If email fails Write to log. 
    Next 
    Write log with stats 
    

    這樣,它是慢,但更安全。如果它有發送電子郵件至4000個用戶,並在用戶1337然後失敗,我們有一個日誌發生了什麼,它在執行下一次它將從1338

    繼續在我們的系統日誌一個文件夾中,我們通常每天都會有一個條目說:

    電子郵件進程在02:00由調度程序啓動。發送4000封電子郵件,失敗0次。

    如果事情失敗:

    電子郵件過程調度開始在02:00。發送3999封電子郵件,1封失敗。 電子郵件給用戶xxxxx失敗。原因:電子郵件地址「joeBlogs @@ gmail.com」不正確。

    +0

    使用WCF服務而不是經典控制檯應用程序有什麼好處? – abenci 2013-04-10 14:07:06

    +0

    不是一個大的。主要有**所有的邏輯在同一個地方**。還有更多**易於重用**的功能。例如,您可以使用手動觸發更新的網頁調用相同的進程。甚至還有另一個以/ whatif模式運行的網頁,並告訴哪些用戶在啓動過程中會收到電子郵件。 – 2013-04-10 14:22:05