domingo, 20 de julio de 2014

Ciclo de vida en ASPNET



Bueno, explicaremos de una manera general los eventos del ciclo de vida de una aplicación/sitio web en ASP.NET. Desde que la aplicación/sitio es iniciada en el servidor web, pasando por la navegación a las distintas páginas, y deteniendo la aplicación en el servidor web, se ejecutan diferentes eventos los cuales podemos manejar a nivel de código.

Recordemos que en ASP.NET existen dos frameworks: Web Forms y MVC. Ambos tienen un ciclo de vida diferente y por lo tanto eventos diferentes. Sin embargo, nosotros solamente hablaremos con respecto al framework Web Form.

Una aplicación/sitio web inicia propiamente su existencia cuando un cliente se conecta a su página de inicio (es el inicio de una sesión). El servidor web procesa el código programado de la página solicitada que se ejecuta del lado del servidor. El servidor crea un instancia (variable objeto de programación) de la página web solicitada, la completa accediendo a los recursos e información necesarios, ejecuta todo el proceso lógico de programación y emite como respuesta la página web en formato HTML al navegador del cliente.

Vemos como el ciclo de vida de un Web Form es muy corto.

Sin embargo, la aplicación/sitio web sigue viviendo hasta que todas las sesiones a las que está dando servicio finalizan. Tras un tiempo sin atender nuevos eventos en una sesión, el servidor destruye la sesión, y cuando no queda ninguna activa, finaliza la aplicación web.

Debemos aclarar que por sesión entendemos una ventana de navegador emitiendo peticiones a un servidor. Un usuario puede tener múltiples navegadores abiertos y por tanto múltiples sesiones iniciadas.

Los eventos de ciclo de vida en ASP.NET Web Form se clasifican en tres grupos: 

- Eventos a nivel de aplicación y de sesión
- Eventos a nivel de página
- Eventos a nivel de control

Veremos estos eventos a continuación.

Eventos a nivel de aplicación y de sesión

Son eventos globales de nuestra aplicación web, como pueden ser el inicio de la aplicación, finalización de una sesión, etc. Estos eventos pueden ser manejados en el archivo Global.asax, que aparece al crear un proyecto. 

El archivo Global.asax es opcional y nos permite manejar eventos de Aplicación y de Session en nuestra aplicación ASP.NET. El archivo Global.asax reside en el directorio raíz de una aplicación de ASP.NET. Este archivo se compila en tiempo de ejecución, no es accesible por URL y debe ubicarse en el directorio raíz de la solución.



Listado de eventos de aplicación y sesión, y su respectiva descripción:

Evento
Acción asociada
Application_Start
Se le llama cuando se solicita el primer recurso (por ejemplo, una página) en una aplicación ASP.NET. Sólo se llama una vez durante el ciclo de vida.
Application_BeginRequest
Inicio petición al servidor (solicitar una página)
Application_EndRequest
Fin de petición al servidor (la página ya ha sido solicitada)
Application_End
Todas las sesiones de usuario expiran
Application_AuthenticateRequest
Petición de autenticación
Application_Error
La aplicación lanza un error
Session_Start
Un nuevo usuario solicita una página de la aplicación web
Session_End
Un usuario deja de hacer peticiones a la aplicación web y su tiempo de sesión expira.
 

Eventos a nivel de página

Casi siempre originados por una interacción del usuario con nuestra aplicación web, como el submit de un formulario o pulsar sobre un enlace.
 
Cuando se carga una página ASP.NET, ésta recorre durante su ejecución  distintas fases de procesamiento. Es muy importante conocerlas para escribir el código en el sitio adecuado para conseguir lo que deseamos.


Listado de eventos de página, y su respectiva descripción:

Evento
Acción asociada
Page_PreInit
Es el primer evento que es posible utilizar como
manejador en una página. Generalmente utilizado cuando se crean controles dinámicamente.
Page_Init
Este evento es lanzado luego que cada control ha sido inicializado. Este evento generalmente es utilizado para cambiar los valores iniciales de los
controles.
Page_InitComplete
Este evento es lanzado antes que el ViewState haya sido cargado para la página y para los controles. Generalmente es usado cuando se necesita ejecutar código luego de que la página haya sido inicializada.
Page_PreLoad
Después de que se provoca este evento, carga el ViewState para la página y para los controles.
Page_Load
Los controles del servidor se cargan en un nuevo objeto de tipo Page. Ahora el programador puede acceder a la información del ViewState y manejar los controles de la página, contenido, etc.
Page_LoadComplete
Todos los controles han sido cargados.
Page_PreRender
El objeto Page va a generarse en código interpretable por el navegador en cuanto finalice este evento, por lo que podemos hacer modificaciones antes de que se genere.
Page_Render
Este método genera el HTML y los scripts necesarios para el cliente.
Page_Unload
El objeto Page deja de ser referenciable, se destruye.

Eventos a nivel de control

Son los eventos propios de los controles. Existen una infinidad de eventos asociados a los controles, y que van desde su propio ciclo de vida, eventos ejecutados por la interacción del usuario y eventos de validación.

Todo control pasa por un ciclo de vida, al igual que una página, y cada etapa tiene eventos que podemos manejar en nuestro código. La cantidad y complejidad de los eventos en el ciclo de vida pueden variar, en dependencia del control a usar.

Ahora, hay otros eventos que son disparados cuando el usuario hace uso de ellos, por ejemplo, al dar click en un botón, seleccionar un elemento de un combo y llenar otro combo según lo seleccionado en el primero, la paginación en una tabla de datos, etc. Todo esto puede ser manejado del lado del servidor y realizar tareas sencillas o complejas.

Otro tipo de eventos son los de validación. Aunque gran parte se maneja del lado del cliente, es posible utilizarlos del lado del servidor. Un ejemplo de evento de validación es cuando se debe verificar si el dato ingresado corresponde a un correo electrónico. Si el valor es válido, se continua con el resto del proceso, sino, se envía un mensaje de validación y el proceso normal no es ejecutado.

Esto de los eventos de control es muy amplio, así que lo vamos a ir viendo conforme construyamos ejemplos que hagan uso de estos eventos. Muchos controles comparten los mismos tipos de eventos, así que no va a ser necesario explicarlos muchas veces. Hay otros que son propios de un tipo de control y algunos podrían manejar procesos complejos. Todo esto lo veremos más adelante, por el momento les dejo solamente una idea.

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.