Tercera parte del bloque que hablo de Aspectos fundamentales de la programación ASP.NET. Primero sería bueno leer la primer parte y la segunda.
Cookies
Una de las formas que tienes de poder conservar el estado en tus peticiones Http es utilizando Cookies. Ya he hablado de que el protocolo Http no tiene estado, significa que cada petición es independiente de la anterior, e implica que para cada petición necesitas enviar toda la información necesaria para que el servidor pueda recordar quien eres y que habías hecho para saber que quieres hacer. Eso es lo que denominamos mantener el estado.
Las cookies son ficheros de texto simples que se guardan en el ordenador del cliente y se adjuntan a las peticiones Http. Se habla mucho de las cookies y del peligro de seguridad que suponen. Al ser una información que viaja por la red y que se queda guarda en el cliente no la puedes utilizar para almacenar información importante o susceptible para el buen comportamiento de tus aplicación web.
Normalmente se utilizan las cookies para ayudar a la aplicación web saber que páginas has estado visitando antes.
Internet Information Server (IIS)
Toda aplicación web ya sea estática o dinámica necesita de un servidor web para poder entregar las páginas. En Microsoft tenemos el IIS. El IIS es el responsable de entregar las páginas que se solicitan mediante una petición Http. En el caso de ASP.NET necesita la instalación del Framework para que el IIS sepa interpretar los archivos con extensión .aspx.
Microsoft Windows Server 2003 trabaja con IIS 6, Microsoft Windows Server 2008 con IIS 7. Existe un cambio importante entre las dos versiones.
La aplicación web se guarda en una carpeta del servidor que por defecto es wwwroot en la unidad de instalación del sistema operativo.
Directorios virtuales
Configura una carpeta para que funcione como una aplicación web. Una aplicación web funciona mediante un pool de aplicaciones que puede ser distinto para cada web permitiendo aislar la web de todas las demás.
Procesado ASP.NET
Como se comporta el IIS ante una petición a una página ASPX sirve para entender un poco más como funciona la lógica de proceso ASP.NET.
Ya he hablado que existen dos versiones actualmente del IIS y que habían cambios importantes, con la siguiente explicación espero poder aclarar en que se basan.
Procesado en IIS6 / IIS7 Modo clásico
El IIS tiene la responsabilidad para cada solicitud de comprobar restricciones IP, permisos de lectura y ejecución de la página solicitada y si es de acceso anónimo o necesita una autenticación. En IIS 6 solo puedes gestionar la autenticación por Windows.
Después la solicitud es recogida por el proceso de trabajo ASP.NET donde se evalúa la autorización de acceso al recurso solicitado, si es necesario una autenticación por formularios, sobreescritura de la URL, recuperación de la sesión, gestión de la caché, servicios personalizados, creación de los objetos ASP.NET. Todo esto es lo que se hace en la Pipeline.
En la primera solicitud se carga el ensamblado en el dominio de la aplicación y se crea una instancia del objeto. Recuerda que ya he comentado que en .Net todo es un objeto incluso las páginas en ASP.NET.
Con la instancia del objeto creado se procesa y se genera una respuesta.
El ensamblado se queda guardado en el dominio de la aplicación para posteriores peticiones. De esta forma las peticiones siguientes serán más rápidas.
Procesado en IIS7 Modo integrado
En la nueva versión del IIS hay módulos ASP.NET integrados que permite coger más responsabilidad en el procesado de las páginas ASP.NET. Ahora el Pipeline está en el IIS, de esta forma la autorización, autenticación o caché de salida sirve para páginas estáticas, páginas php, etc.
También IIS7 permite la autenticación por formularios.
ASP.NET 4 Versión IIS 7.5
Con el Microsoft Windows Server 2008 R2 aparece una versión mejorada del 7. El IIS 7.5 tiene la novedad que junto a ASP.NET versión 4 del .Net Framework puedes programar el auto arranque de las aplicaciones web hospedadas en el IIS. Tal y como he hablado antes las primeras peticiones cargan el ensamblado en el dominio de la aplicación, esto supone claro una perdida de tiempo. Para evitarlo tienes el auto arranque.
Para ello debe indicar qué pool de aplicaciones son arrancados automáticamente. Tienes que editar el fichero de configuración applicationhost.config
<applicationPools>
<add name=”MyApplicationPool” startMode=”AlwaysRunning” />
</applicationPools>
o puedes indicar individualmente aplicaciones para que se auto carguen al inicializar el IIS.
<sites>
<site name=”MySite” id=”1″>
<application path=”/” serviceAutoStartEnabled=”true” serviceAutoStartProvider=”PrewarmMyCache” >
<!– Additional content –>
</application>
</site>
</sites>
<!– Additional content –>
<serviceAutoStartProviders>
<add name=”PrewarmMyCache” type=”MyNamespace.CustomInitialization, MyLibrary” />
</serviceAutoStartProviders>
El funcionamiento es muy simple: En el momento que IIS arranca por primera vez o se reinicia un pool de aplicaciones IIS 7.5 envía una solicitud al objeto CustomInitialization para que ejecute el método PreLoad. En este momento las solicitudes quedan bloqueadas.
Después se carga el ensamblado en el dominio de la aplicación y se libera el bloqueo.
public class CustomInitialization :
System.Web.Hosting.IProcessHostPreloadClient
{
public void Preload(string[] parameters)
{
// Perform initialization.
}
}
La interfaz IProcessHostPreloadClient permite la implementación del método PreLoad utilizada en IIS 7.5 como punto de entrada en la pre carga de una aplicación web.
Más cosas en la cuarta parte de este post.
Gracias