在外部托管的网站上运行基于队列的后台进程

时间:2010-12-30 14:02:32

标签: asp.net-mvc backgroundworker message-queue background-process

我有一个ASP.NET MVC Web应用程序,由IIS 7上的外部提供程序托管。

我希望每15分钟左右运行一个流程,检查需要发送的电子邮件积压,然后实际发送。

似乎正常的方法是使用Microsoft Message Queue,但由于这是一个我无法直接控制的托管环境,我将无法安装或配置MSMQ。

到目前为止,我已决定将行添加到SQL Server数据库(同一主机)中的表中。

那么我应该如何实施检查积压并发送电子邮件的位?

它应该是我的主Web应用程序中的某种单独的线程,它每15分钟重启一次吗?

我考虑的另一个选择就是打开HTTP-POST界面,当使用适当的管理员密码调用时,会运行电子邮件发件人的迭代。

然后我可以在我的本地PC上创建一个小型控制台应用程序,每15分钟调用一次该接口。

第一个选项更简单,但第二个选项可能更强大。

有什么想法吗?

2 个答案:

答案 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都可以在我使用的托管环境中正常工作,无需访问服务器上的服务或从桌面创建本地触发器。