Auto-Inicio de aplicaciones en ASP.NET 4.0


ASP.NET 4.0 en combinación con IIS 7.5 (disponible con Windows 7 y Windows Server 2008 R2) proporcionan una nueva característica que permite arrancar automáticamente una aplicación web y realizar el inicio de su lógica, cargar datos iniciales o su caché sin tener que esperar a que se realice la primera petición desde el exterior. Esto permite de cierta manera “calentar el motor antes de arrancar”, cosa que en aplicaciones con un costoso inicio anteriormente se realizaba de forma manual o mediante un script personalizado.

Dicha característica de auto-inicio, denominada en inglés como Auto-Start Web Applications, funciona con todas la aplicaciones ASP.NET, ya sean Web Forms o MVC, y proporciona un enfoque controlado para el arranque de un “application worker process” (proceso de trabajo de aplicación), la inicialización de una aplicación ASP.NET, así como aceptar peticiones HTTP.

Configurando el Auto-Inicio

Para utilizar la característica de auto-start, primero debemos configurar el “application pool” worker process del IIS que la aplicación ejecuta cuando el servidor la carga por primera vez. Para ello abrimos el archivo applicationHost.config (%WinDir%\System32\inetsrv\config\applicationHost.config) y agregamos el atributo y valor correspondiente: startMode=”AlwaysRunning” dentro de la sección <applicationPools>:

<applicationPools>
    <add name="MyAppWorkerProcess"
         managedRuntimeVersion="v4.0"
         startMode="AlwaysRunning" />
</applicationPools>

Un solo IIS appplication pool worker process puede alojar múltiples aplicaciones ASP.NET. Por lo que podemos especificar que aplicaciones deseamos que inicien automáticamente cuando el worker process se cargue, para ello agregamos e atributo y correspondiente valor: serviceAutoStartEnabled=”true” en la sección <application>:

<sites>
    <site name="MySite" id="1">
        <application path="/"
            serviceAutoStartEnabled="true"
            serviceAutoStartProvider="PreWarmMyCache" />
    </site>
</sites>
<serviceAutoStartProviders>
    <add name="PreWarmMyCache"
        type="PreWarmCache, MyAssembly" />
</serviceAutoStartProviders>

El atributo serviceAutoProvider=”PreWarmMyCache” tiene la referencia a una sección del archivo de configuración que nos permite configurar clases personalizadas que sean utilizadas para encapsular cualquier lógica previa para la aplicación. Dicha clase será invocada tan pronto como el worker process y a la aplicación sean precargadas, es decir, antes que cualquier petición sea recibida, y entonces utilizada para ejecutar cualquier inicialización antes de recibir y procesar una petición.

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

Solo después de ejecutarse la lógica de pre-carga, la aplicación ASP.NET será marcada como lista para procesar peticiones.

Opcionalmente podemos combinar esta nueva característica con las capacidad de balanceo de carga de la extensión de IIS7 Application Request Routing (ARR).

Mayor información:

Acerca de Willy Mejia

Developer, Techie, Human... http://about.me/willyxoft
Esta entrada fue publicada en ASP.NET, NetFx4. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s