I have windows task which restarts IIS at midnight 00:00. In my application there is a background thread which runs a global refresh at around 02:00.

My problem is that the application starts only on the first request from a browser. This may not occur for quite some time and the global refresh can be late in starting.

Is there any way to start the application without first browsing to the web application?

No correct solution


Ideally you should keep maintenance tasks such as this separate from your web application (either as a scheduled task or Windows service).

But, if you really need to do it this way could create a batch file that does:

iisreset /restart
"C:\Program Files\GnuWin32\bin\wget.exe" -O nul

Then run this batch file as your scheduled task at 12:00. This will restart IIS and warm up your application.

You can get GNU wget.exe from:

WGET for Windows (SourceForge)

You can have another task that accesses your web site after IIS is restarted.

Still, I can't see why would you have a thread doing maintenance inside your IIS worker process. If the process dies from some reason (for example - because of the recycling configuration in the web site's application pool) the work won't get done. It's better to do this from a separate process, such as windows service or a scheduled windows task.

You shouldn't have any threads scheduled inside an IIS web application - becasue IIS has some logic to recycle the worker process and your application when it is not used. Its better to run it as a separate application (scheduled separately).

You could also use a Powershell script called by task manager. Here is simple six-line script we use to "warm up" SharePoint servers.

You could repurpose or find a similar script for a basic .NET application.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow