2011-09-17 32 views
1

我正在開發一個Asp.Net應用程序,並且需要根據某些事件定期發送郵件。首先,我想在global.asax中創建一個線程,並在application_start中啓動線程。但是當應用程序池崩潰或者其他問題時,這會變得有點問題。所以我實現了一個Windows服務並啓動了線程,並在Windows事件日誌中記錄了任何錯誤。這工作正常。但是我需要知道我是否正確實施它,或者有更好的方法來實現它嗎?發送郵件的通知服務實現

回答

1

對這類任務使用Windows服務是首選方式,而不是在ASP.NET應用程序中執行此操作。您也可以看看Quartz.NET,它可以簡單地代表您安排任務執行和處理線程的代碼。但是,如果你不想編寫Windows服務,最簡單的辦法可能是使用一個控制檯應用程序來完成發送電子郵件的工作,然後使用Windows任務計劃程序定期運行它。

+0

謝謝。這真的很快。 – TCM

+0

@安東尼,好吧,你已經做對了,所以...... –

3

我認爲你正在移動(或已經移動)到正確的方向。

我們也有類似的架構中也是一樣,我們使用MSMQ排隊從ASP.NET應用程序傳出通知某些情況下,那麼Windows服務,通常被稱爲消息管理器,可以抓住異步傳入的消息,併發送電子郵件或警報。

這證明是有效和健壯的,如果在消息排隊之後發生任何崩潰,什麼都不會丟失,因爲windows服務將總是處理隊列中的消息,因此您可以讓ASP.NET回收或機器隨着Windows服務被重新啓動,沒有任何東西會丟失。而實際上,在正常生產模式下,即時發送消息,當一切正常運行並且服務器不會過載或遭受任何損失時,解耦或同步鬆散大部分被隱藏。

在以後的項目中,我們現在正在使用TIBCO技術實現類似的功能,即針對隊列用戶的EMS和針對隊列訂戶的Business Works。

1

另一種選擇是基於消息的方法。您可以讓Windows服務/控制檯應用程序讀取消息隊列的消息(如msmq),並在收到消息時發送電子郵件。然後您可以讓ASP.NET應用程序將消息發佈到此隊列中。

Minibuss是一款輕量級的msmq客戶端,非常易於使用。另一種選擇是NServiceBus