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