To use the ASP.NET 4 auto-start feature, you first configure
the IIS “application pool” worker process that the application runs within to
automatically startup when the web-server first loads. You can do this by
opening up the IIS 7.5 applicationHost.config file
(C:\Windows\System32\inetsrv\config\applicationHost.config) and by adding a
startMode=”AlwaysRunning” attribute to the appropriate <applicationPools>
entry:
<applicationPools>
<add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
</applicationPools>
If you load up the Windows task manager, click the “show
processes from all users” checkbox, and then hit save on a startMode attribute
change to the applicationHost.config file, you’ll see a new “w3wp.exe” worker
process immediately startup as soon as the file is saved.
A single IIS application pool worker process can host
multiple ASP.NET applications. You can specify which applications you
want to have automatically start when the worker process loads by adding a
serviceAutoStartEnabled="true" attribute on their <application>
configuration entry:
<sites>
<site name="MySite" id="1">
<application path="/" serviceAutoStartEnabled="true" serviceAutoStartProvider="PreWarmMyCache" />
</site>
</sites>
<serviceAutoStartProviders>
<add name="PreWarmMyCache" type="PreWarmCache, MyAssembly" />
</serviceAutoStartProviders>
The serviceAutoProvider="PreWarmMyCache" attribute
above references a provider entry within the config file that enables you to
configure a custom class that can be used to encapsulate any "warming
up" logic for the application. This class will be automatically invoked
as soon as the worker process and application are preloaded (before any
external web requests are received), and can be used to execute any
initialization or cache loading logic you want to run before requests are
received and processed:
public class PreWarmCache : System.Web.Hosting.IProcessHostPreloadClient {
public void Preload(string[] parameters) {
// Perform initialization and cache loading logic here...
}
}
IIS will start the application in a state during which it
will not accept requests until your "warming up" logic has
completed. After your initialization code runs in the Preload method and
the method returns, the ASP.NET application will be marked as ready to process
requests.
You can optionally combine the new auto-start "warming
up" feature with the load-balancing capabilities of the IIS7
Application Request Routing (ARR) extension, and use it to signal to a
load-balancer once the application is initialized and ready to accept HTTP
traffic – at which point the server can be brought into the web farm to process
requests.