Web Api is a framework to build HTTP based services, especially RESTful apis. It is designed to build request triggered action, where system will be ready to do some work when receiving a request. If it’s not asked, it shouldn’t do anything and in a while it will go to sleep.
Problem starts when you’re planning to execute some background jobs. Even if you start a background thread on application start it will go asleep along with application. When planning actions executed in pre-scheduled intervals I would strongly suggest to use an external tool, like Hangfire. For other things like listening messages you can configure your asp.net application properly.
What you need to set in IIS:
- In Application Pool for your app, set startMode to AlwaysRunning
- In Application Pool for your app, set idleTimeout to 0
- In you app, set preloadEnabled to True
This of course can also be set in applicationHost.config.
You can find your applicationHost.config file in C:\Windows\System32\inetsrv\config\ directory. Then you need to edit:
<applicationPools>
<add name="StockExample" autoStart="true" managedRuntimeVersion="v4.0" startMode="AlwaysRunning">
<processModel idleTimeout="00:00:00" />
</add>
</applicationPools>
<site name="StockExample.Api" id="12006" serverAutoStart="true">
<application path="/" applicationPool="StockExample">
<virtualDirectory path="/" physicalPath="C:\sources\blog\StockExample" />
</application>
<applicationDefaults preloadEnabled="true" />
</site>