如何在Asp Web API应用程序中实现一个非常长时间运行的后台任务

时间:2014-01-16 04:24:41

标签: c# asp.net asp.net-web-api iis-7.5 azure-webjobs

我正在编写一个WebAPI应用程序来执行许多长时间运行的后台处理任务。

我注意到,即使我在IIS中禁用了池回收,我的测试数据加载任务也被System.Threading.ThreadAbortException杀死了。 我知道,有一种方法可以在Web应用程序中运行一个长时间运行(几个小时)的后台任务,但是,我只是不知道这是如何完成的 - 要么是一些特定的配置设置,一种编码技术,一个Wen.config参数等... 有人可以分享一些实用的方法吗?

2 个答案:

答案 0 :(得分:2)

您不希望使用IIS / ASP.Net运行长时间运行的进程,它不是为此设计的。

仅用于Web.API中的初始调用,以通过使用MSMQ或在表中插入一行来告诉您的单独进程执行操作来启动服务。

创建一个单独的应用程序 - 控制台应用程序,您可以使用Windows Scheduler定期运行应用程序并检查新工作项;或Windows服务,定期检查您的工作项存储中的工作项。然后,您可以使用ThreadPool等异步运行您的进程。

答案 1 :(得分:0)

看起来我的问题的最佳答案是将自托管的WebAPI与TopShelf Windows服务实现相结合。 这样我就可以用通常的方式编写我的WebAPI控制器代码了,那些长时间运行的任务不会被IIS杀掉。

感谢大家的帮助!

-Eugene