Aplicaciones Auto-Start de ASP.NET

Éste es el séptimo post de una serie sobre VS 2010 y .NET 4

Voy a pasar de hablar de las nuevas características de VS 2010 y escribiré algunos post sobre algunas características del runtime (no os preocupéis - volveré a hablar de más cosas de VS 2010. Sólo intento no mezclar demasiado las cosas).

El post de hoy veremos una pequeña, pero útil, característica que podremos aprovechar en ASP.NET 4 - la habilidad de poder inciar proactivamente una aplicación web sin tener que esperar a que un cliente haga una petición al servidor. Con esto podemos conseguir una respuesta más rápida para el primer usuario que accede al servidor, y nos evita tener que escribir scripts personalizados para avisar al servidor para que vaya preparando cualquier tipo de caché de datos. Funciona con todos los tipos de aplicaciones ASP.NET - tanto en ASP.NET Web Forms como en ASP.NET MVC.

Auto-start Web Applications con ASP.NET 4

Algunas aplicaciones web necesitan cargar una gran cantidad de datos, o realizar un proceso costoso de inicialización, ántes de que estén listas para procesar cualquier petición. Los desarrolladores que usan ASP.NET suelen realizar estas tareas usando el event handler "Application_Start" en el archivo Global.asax de la aplicación (que se lanza la primera vez que se ejecuta una petición). En ese momento lanzan scripts que hacen peticiones falsas a la aplicación para "despertarla" periódicamente y ejecutan ese código ántes de que un cliente acceda, o tan solo hace que el desafortunado primer visitante que accede a la aplicación tenga que esperar a que termine esa lógica ántes de procesar la petición (lo que puede llevar a un largo tiempo de espera).

ASP.NET 4 viene con una característica llamada "auto-start" que simplifica y mejora este escenario, y está disponible cuando ASP.NET 4 se ejecuta en IIS7.5 (que viene con Windows 7 y Windows Server 2008 R2). Esta característica ofrece una forma controlada de lanzar un worker process para una aplícación, inicializando una aplicación ASP.NET, y aceptando después las peticiones HTTP.

Configurar una aplicación ASP.NET 4 con Auto-Strat

Para usar esta característica, debemos configurar el "application pool" del IIS para el worker process en el que se va a ejecutar la aplicación para que se ejecute cuando se carga el servidor web. Podemos hacer esto abriendo el archivo applicationHost.config del IIs7.5 (C:WindowsSystem32inetsrvconfigapplicationHost.config) añadiendo el atributo startMode="AlwaysRunning" del tag apropiado del <applicationPools>:

autoStart1

Si vemos ahora el adminsitrador de tareas, marcamos la opción de "ver los procesos de todos los usuarios, y guardamos los cambios de este archivo, veremos un nuevo worker process "w3wp.exe" comenzará tan pronto como se guarde el archivo.

Un sólo application pool del IIS puede hostear varias aplicaciones ASP.NET. Podemos especificar qué aplicaciones queremos que comienzen junto al worker process añadiendo el atributo serviceAutoStartEnabled en la parte de configuracion de la aplicación <application>:

 

autoStart2

El atributo serviceAutoProvider="PreWarmMyCache" referencia a una entrada del archivo config que nos permite configurar una clase personalziada que puede ser usada para encapsular la lógida de "arranque" de la aplicación. Esta clase será invocada tan pronto como el worker process y la aplicación se precargen (antes de que se reciba cualquier petición web), y podemos usarlo para ejecutar el código de inicialización o lógica de cache que queramos ántes de recibir y procesar cualquier petición:

autoStart3

IIS ejecutará la aplicación en un estado durante el cual no aceptará peticiones hasta que nuestra lógica de "arranque" haya terminado. Tras nuestro código de inicialización del método Preload, la aplicación ASP.NET se marcará como lista para procesar peticiones.

Podemos combinar opcionalmente la característica de auto-start con las capacidades de balanceo de carga de la extensión IIS7 Application Request Routing (ARR) y usarlo para cargar un load-balancer una vez que la aplicación se inicializa y está lista para aceptar tráfico HTTP - en cuyo momento el servidor se puede integrar en la granja web para procesar peticiones.

Resumen

La nueva característica "auto-start" de ASP.NET 4 e IIS7.5 nos ofrecen la posibilidad de realizar procesos costosos a la hora de cargar la aplicación e inicializar la lógica de pre-cache ántes de que los usuarios accedan a la aplicación. Esto nos permite tener nuestra aplicación lista desde el principio, consiguiendo un mayor rendimiento.

Espero que sirva.

Scott.

P.D.: he estado usando Twitter más reciente mente para hacer post rápidos y compartir enlaces. Podéis seguirme en Twitter en http://www.twitter.com/scottgu (@scottgu es nombre en twitter).

Traducido por: Juan María laó Ramos.

Artículo original.

Un pensamiento en “Aplicaciones Auto-Start de ASP.NET

  1. Pingback: Serie sobre VS 2010 y .NET 4.0 « Thinking in .NET

Deja un comentario