我正在编写一个WebAPI应用程序来执行许多长时间运行的后台处理任务。
我注意到,即使我在IIS中禁用了池回收,我的测试数据加载任务也被System.Threading.ThreadAbortException杀死了。 我知道,有一种方法可以在Web应用程序中运行一个长时间运行(几个小时)的后台任务,但是,我只是不知道这是如何完成的 - 要么是一些特定的配置设置,一种编码技术,一个Wen.config参数等... 有人可以分享一些实用的方法吗?
答案 0 :(得分:2)
您不希望使用IIS / ASP.Net运行长时间运行的进程,它不是为此设计的。
仅用于Web.API中的初始调用,以通过使用MSMQ或在表中插入一行来告诉您的单独进程执行操作来启动服务。
创建一个单独的应用程序 - 控制台应用程序,您可以使用Windows Scheduler定期运行应用程序并检查新工作项;或Windows服务,定期检查您的工作项存储中的工作项。然后,您可以使用ThreadPool等异步运行您的进程。
答案 1 :(得分:0)
看起来我的问题的最佳答案是将自托管的WebAPI与TopShelf Windows服务实现相结合。 这样我就可以用通常的方式编写我的WebAPI控制器代码了,那些长时间运行的任务不会被IIS杀掉。
感谢大家的帮助!
-Eugene