发送邮件的通知服务实现

时间:2011-09-17 11:14:26

标签: c# .net asp.net

我正在开发一个Asp.Net应用程序,需要根据某些事件定期发送邮件。首先,我想到在global.asax中创建一个线程并在application_start中启动线程。但是当应用程序池崩溃或其他什么时,这会成为一个问题。所以我实现了一个Windows服务并在其中启动了线程并记录了Windows事件日志中的任何错误。这很好用。但我需要知道我是否正确实现它还是有更好的方法呢?

3 个答案:

答案 0 :(得分:3)

我认为你正朝着正确的方向前进(或已经移动)。

我们也有类似的架构,在某些情况下我们使用MSMQ对来自ASP.NET应用程序的传出通知进行排队,然后Windows服务(通常称为Messaging Manager)可以抓取异步传入的消息和发送电子邮件或提醒。

这证明是有效且健壮的,如果在消息排队后发生任何崩溃,任何事都不会丢失,因为Windows服务将始终处理队列中的消息,因此您可以使用ASP.NET回收或使用Windows服务正在重新启动,没有任何东西丢失。事实上,在正常生产模式下,消息会立即发送出来,当一切工作顺利且服务器没有过载或遭受任何损失时,大多数情况下会隐藏同步的解耦或松散。

在后来的项目中,我们现在使用TIBCO技术实现类似的功能,队列的EMS和队列订户的Business Works。

答案 1 :(得分:1)

使用Windows服务执行此类任务是首选方法,而不是在ASP.NET应用程序中执行此操作。您还可以查看Quartz.NET,这可能只是您的代码,用于安排任务执行和处理线程。但是,如果您不想编写Windows服务,最简单的方法是使用一个控制台应用程序来完成发送电子邮件的工作,然后只需使用Windows任务计划程序定期运行它。

答案 2 :(得分:1)

另一种选择是基于消息的方法。您可以让Windows服务/控制台应用程序读取消息队列的消息(如msmq),并在收到消息时发送电子邮件。然后,您可以让ASP.NET应用程序将消息发布到此队列。

Minibuss是msmq的轻量级客户端,非常易于使用。另一个选项是NServiceBus