我有一个ASP.NET MVC Web应用程序,由IIS 7上的外部提供程序托管。
我希望每15分钟左右运行一个流程,检查需要发送的电子邮件积压,然后实际发送。
似乎正常的方法是使用Microsoft Message Queue,但由于这是一个我无法直接控制的托管环境,我将无法安装或配置MSMQ。
到目前为止,我已决定将行添加到SQL Server数据库(同一主机)中的表中。
那么我应该如何实施检查积压并发送电子邮件的位?
它应该是我的主Web应用程序中的某种单独的线程,它每15分钟重启一次吗?
我考虑的另一个选择就是打开HTTP-POST界面,当使用适当的管理员密码调用时,会运行电子邮件发件人的迭代。
然后我可以在我的本地PC上创建一个小型控制台应用程序,每15分钟调用一次该接口。
第一个选项更简单,但第二个选项可能更强大。
有什么想法吗?
答案 0 :(得分:3)
我建议你看看Quartz.NET。此外,您应该注意的一件重要事情是,如果不使用ASP.NET服务器,则可以从内存中卸载ASP.NET应用程序,这意味着所有已生成的线程都会死掉。这就是为什么不应该在ASP.NET应用程序中执行此类任务而是在Windows服务中卸载的原因之一。
答案 1 :(得分:2)
杰夫·阿特伍德(Jeff Atwood)发表了一篇关于他最初如何使用过期缓存在Stack Overflow上实现徽章系统以定期重置流程的帖子。
http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/
我过去曾做过类似的事情,每天发送电子邮件。这项服务不是必不可少的,如果电子邮件错过了一两天也没关系,因为它们最终都会出去,但系统工作得很好。所有asp.net都可以在我使用的托管环境中正常工作,无需访问服务器上的服务或从桌面创建本地触发器。