我正在开发一个 Asp.Net 应用程序,需要根据某些事件定期发送邮件。首先想到在global.asax中创建一个线程,在application_start中启动线程。但是,当应用程序池崩溃或其他问题时,这就会成为一个问题。所以我实现了一个 Windows 服务并在其中启动了线程,并在 Windows 事件日志中记录了所有错误。这很好用。但是我需要知道我是否正确地实现了它,或者是否有更好的方法?
请您参考如下方法:
我认为您正在(或已经)朝着正确的方向前进。
我们也有类似的体系结构,在某些情况下,我们使用 MSMQ 对来自 ASP.NET 应用程序的传出通知进行排队,然后 Windows 服务(通常称为消息管理器)可以异步获取传入消息并发送电子邮件或警报。
这被证明是有效和健壮的,如果在消息排队后发生任何崩溃,不会丢失任何东西,因为 Windows 服务将始终处理队列中的消息,因此您可以让 ASP.NET 回收或机器与正在重新启动 Windows 服务,不会丢失任何内容。事实上,在正常的生产模式下,消息是即时发送的,当一切都运行顺利并且服务器没有过载或遭受任何影响时,解耦或同步松动基本上是隐藏的。
在以后的项目中,我们现在正在使用 TIBCO 技术、用于队列的 EMS 和用于队列订阅者的 Business Works 来实现类似的东西。
