ASP.NET MVC2中运行耗时任务的可靠方法是什么?

3

我需要可靠的方法同时运行10个不同的任务。例如,第一个任务可能是发送电子邮件,而下一个任务是清理特定表中的行...以此类推。

我使用了Thread类,在我的开发机器上(VS2010内部Web服务器)它工作得很好,但是在我的生产服务器上,这些线程似乎根本没有工作。我不知道如何有效地在生产服务器上调试问题。

我看到了这种技术,它鼓励您注册缓存对象。由于应用程序在缓存项过期时触发回调,因此可以运行任何代码来模拟线程行为。它似乎有点像米老鼠。


我想问的问题是:ASP.NET MVC2应用程序中无限运行后台任务的正确方法是什么?

3个回答

4

最好的方法是不要在ASP.net代码中运行它们。这听起来像是一个理想的定时任务或Windows服务的任务。ASP.net(无论是MVC还是其他)并不真正适合执行此操作 - 将其拆分到一个单独的项目中。


我赞同这个观点:创建一个控制台应用程序并引用您的库。编译成可执行文件。使用任务计划程序定期运行.exe文件。当然,这需要您拥有对托管服务器的访问权限(和控制权)。 - Jakob Gade

1

有很多方法可以实现,这里介绍其中一种。

将长时间运行的任务作为 Windows 服务实现,在 ASP.NET 应用程序中使用 MSMQ 发送关于要执行的任务的消息到该服务中。


1

我以前一直在使用 quartz.net,效果还不错。


@nos,我看了一下Quartz.net。它是否依赖于数据库?我的意思是它需要一个数据库才能工作吗? - Roman
@Am,不会。但是如果你想的话,可以使用数据库来存储任务。 - Mattias Jakobsson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接