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

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

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

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

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

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

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

谢谢大家的帮助!

-Eugene