ASP.NET MVC和backgorund进程之间的通信

时间:2013-05-26 15:50:20

标签: asp.net-mvc

我正在开发一个更大的网站,我想让程序的“长时间运行”部分在分离的线程上运行。 但我对如何实现这一点感到很沮丧,虽然我会问是否有人解决了类似的问题。我想这样做的原因是因为我发送电子邮件给用户以及在发送电子邮件之前有很多数据库查找,所以在这一切发生时没有必要锁定用户。还有其他一些情况,我想等待一段时间发送电子邮件,以防更多的电子邮件发送,然后将它们合并。

我想到了两种方法:

  1. 让一个在应用程序状态下启动的线程运行 然后将运行后端处理。这将使我能够发送 直接对象线程。
  2. 有一个程序在旁边运行, 并通过我数据库中的表格向其发送数据。

2 个答案:

答案 0 :(得分:2)

使用后台进程执行任何需要执行的繁重工作。不要在你的动作方法中做到这一点,也不要产生一个线程来从你的动作方法中完成工作:如果你同时获得很多活动,你就有可能产生很多线程。

如果可以的话,我建议您使用Windows服务进行后台任务。这样,如果需要,它可以在除Web应用程序之外的另一台计算机上运行。

使用数据库存储有关要完成的后台工作的信息,但不要将数据库表用作“工作队列”。使用适当的队列:

  • 亚马逊SQS
  • Azure消息总线
  • 的RabbitMQ

因此,您的操作方法会将后台任务所需的数据放入您的数据库中,然后在您的队列中推送一条消息,说明该做的工作。您的后台任务会将消息从队列中弹出并访问数据库以获取工作数据。

请参阅:

答案 1 :(得分:1)

我建议将“工作”保存到数据库,然后运行一个服务或工作来获取工作并执行它。从安全角度来看,它更好,并且在尝试在IIS工作线程中执行长时间运行的任务时不会遇到问题。

What are some best practices for managing background threads in IIS?