Wednesday, January 18, 2012

Auto-Start ASP.NET(MVC) applications in IIS 7.5

If your web application has to execute some pre-initialization work, the “Application_Start” event handler within the Global.asax file of an application is the logical place. However as a consequence the unfortunate first customer that accesses the application has to wait while this logic finishes before processing the request (which can lead to a long delay for them).
ASP.NET 4  and IIS 7.5 introduce a new feature called “auto-start” that better addresses this scenario. The auto-start feature provides a controlled approach for starting up an application worker process, initializing an ASP.NET application, and then accepting HTTP requests.
First configure the IIS “application pool” worker process that the application runs within to automatically startup when the web-server first loads. Open up the IIS 7.5 applicationHost.config file (C:\Windows\System32\inetsrv\config\applicationHost.config) and add a startMode=”AlwaysRunning” attribute to the appropriate <applicationPools> entry:
<applicationPools> 
 <add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
</applicationPools> 


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.


public class PreWarmCache : System.Web.Hosting.IProcessHostPreloadClient 
{
 public void Preload(string[] parameters) 
 { 
 // Perform initialization and cache loading logic here... 
 } 
} 

More information and all the details in Scott Guthrie’s post: http://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0-series.aspx

1 comment:

icelava said...

Hi, do you know how this is to be applied for Windows Azure?