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

Asp.net mvc 在外部托管的网站上运行基于队列的后台进程,asp.net-mvc,backgroundworker,message-queue,background-process,Asp.net Mvc,Backgroundworker,Message Queue,Background Process,我有一个ASP.NET MVC web应用程序,它由一个外部提供程序托管在IIS 7上 我希望每15分钟左右运行一个流程,检查需要发送的积压电子邮件,并实际发送它们 通常的做法是使用Microsoft Message Queue,但由于这是一个我无法直接控制的托管环境,因此我无法安装或配置MSMQ 到目前为止,我已经决定通过将行附加到我的SQL Server数据库中的一个表来实现这一点 那么,我应该如何实现检查积压工作和发送电子邮件的bit呢 它应该是我的主web应用程序中的某种独立线程吗?它每

我有一个ASP.NET MVC web应用程序,它由一个外部提供程序托管在IIS 7上

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

通常的做法是使用Microsoft Message Queue,但由于这是一个我无法直接控制的托管环境,因此我无法安装或配置MSMQ

到目前为止,我已经决定通过将行附加到我的SQL Server数据库中的一个表来实现这一点

那么,我应该如何实现检查积压工作和发送电子邮件的bit呢

它应该是我的主web应用程序中的某种独立线程吗?它每15分钟重新启动一次

我考虑的另一个选择是打开一个HTTP-POST接口,当使用适当的管理员密码调用该接口时,将运行电子邮件发送者的迭代

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

第一个选项更简单,但第二个选项可能更健壮


有什么想法吗?

我建议你看看。另外,您应该注意的一件重要事情是,如果不使用ASP.NET应用程序,web服务器可能会从内存中卸载该应用程序,这意味着生成的所有线程都将死亡。这就是为什么这些任务不应该在ASP.NET应用程序中执行,而应该在Windows服务中卸载的原因之一。

我建议您看看。另外,您应该注意的一件重要事情是,如果不使用ASP.NET应用程序,web服务器可能会从内存中卸载该应用程序,这意味着生成的所有线程都将死亡。这就是为什么这些任务不应该在ASP.NET应用程序中执行,而应该在Windows服务中卸载的原因之一。

Jeff Atwood发表了一篇文章,介绍了他最初是如何使用过期缓存定期重置进程来实现badge system on Stack Overflow的


我以前也做过类似的事情,每天都发电子邮件。这项服务是非必要的,电子邮件是否会错过一两天也无关紧要,因为它们最终都会发出,但系统运行得相当好。它都是asp.net,因此在我使用的托管环境中运行良好,无需访问服务器上的服务或从桌面创建本地触发器。

Jeff Atwood发表了一篇文章,介绍了他最初是如何使用过期缓存定期重置进程来实现badge system on Stack Overflow的

我以前也做过类似的事情,每天都发电子邮件。这项服务是非必要的,电子邮件是否会错过一两天也无关紧要,因为它们最终都会发出,但系统运行得相当好。它都是asp.net,所以在我使用的托管环境中运行良好,不需要访问服务器上的服务或从桌面创建本地触发器