I'm writing a WebAPI application to perform a number of long running background processing tasks.
I'm noticing, that my test data loading task, is being killed by System.Threading.ThreadAbortException, even after I disable the pool recycling in IIS.
I know, that there is a way to run a very long running (a few hours long) background tasks within a Web application, but, I just do not know how exactly that is done - either some specific configuration settings, a coding technique, a Wen.config parameter, etc...
Can anyone share some practical way of doing this, please?
You DON'T want to use IIS/ASP.Net to run a long running process, it was not designed for that.
Only use it for the initial call in Web.API to kick off your service by using MSMQ or inserting a row into a table that tells your separate process what to do.
Create a separate application - either a Console application, where you would use Windows Scheduler to periodically run the app and check for new work items; or a Windows Service, that periodically checks your work item store for work items. You can then use the ThreadPool, etc to asynchronously run your process.
It looks like the best answer to my problem is to combine a self-hosted WebAPI with TopShelf windows service implementation.
This way I can write my WebAPI controller code the usual way, and those long running tasks will not get killed by IIS.
Thanks everyone for your help!
-Eugene