ASP.NET 2.0 también proporciona supervisión de estado y de aplicaciones con todas las funciones. El sistema se compone de un modelo de eventos totalmente extensible y un motor de eventos que puede enviar eventos a una variedad de receptores. Por ejemplo, puede configurar su aplicación ASP.NET para enviar un correo electrónico diario indicando que el servidor se está ejecutando e incluyendo la cantidad de memoria disponible. Asimismo, puede crear un evento de salud vinculado a una excepción no controlada. El contenido de excepción, los encabezados de solicitud y la hora y fecha se pueden enviar a una base de datos de registro de errores.
ASP.NET 2.0 incluye eventos integrados, incluidos latidos, eventos de vida útil de la aplicación (inicio/detención/compilación) y eventos de captura de errores (excepciones no controladas). Sin embargo, puede construir fácilmente sobre estas clases base para recrear y generar sus propios eventos desde su aplicación. Por ejemplo, puede crear un evento personalizado para registrar cuando el centésimo usuario hace clic en un enlace en particular.
La característica realmente poderosa del sistema de monitoreo de salud ASP.NET 2.0 es que es completamente configurable a través de los archivos web.config y machine.config. Con XML normal, puede definir eventos, definir proveedores (receptores de eventos) y enviar eventos específicos a proveedores específicos.
Creación de eventos Los eventos tienen una estructura similar a las excepciones. En otras palabras, la clase de evento en sí misma casi no tiene funcionalidad excepto como contenedor de mensajes. En términos de monitoreo de salud, todos los eventos heredan de System.Web.Management.WebBaseEvent. Sin embargo, también puede derivar de clases base de alto nivel que se utilizan para fines especializados, como recopilar datos de solicitudes HTTP o manejar excepciones.
Listado 4. Eventos personalizados
usando System;
usando System.Web.Management
clase pública CustomEvent: WebBaseEvent;
{
public const int EventCode = WebEventCodes.WebExtendedBase + 10;
público MyEvent (mensaje de cadena, objeto eventSource)
: base (mensaje, fuente de evento, código de evento)
{ }
}
La parte más importante de la creación de un evento personalizado es proporcionar un EventCode único. Todos los códigos de eventos integrados están en la enumeración WebEventCodes. Los eventos personalizados deben tener números que comiencen desde WebEventCodes.WebExtendedBase + 1. Aparte de eso, la única tarea común al crear eventos personalizados es inicializar el evento correctamente.
Uso de eventos Aunque los eventos integrados se activan automáticamente, puede agregar código a su aplicación para activar eventos personalizados en cualquier momento.
Listado 5. Generación de un evento
<script runat="server">
void Page_Load(Remitente del objeto, EventArgs e)
{ // Generar un evento personalizado MyEvent myEvent =
new MyEvent("cargando página de muestra de evento web", this);
</script>
Cuando genera un evento desde una página ASP.NET, simplemente crea una nueva instancia del evento y luego ejecuta el método Raise(). El método Raise() entrega automáticamente la instancia del evento al motor de monitoreo de salud. Luego, el motor asigna el evento a perfiles y proveedores y lo entrega al proveedor correcto. En última instancia, el proveedor entrega el evento al receptor correcto.
Configuración de la supervisión del estado La supervisión del estado se configura en una nueva área del archivo machine.Config o Web.Config. Puede configurar la sección para configurar un latido web que informe periódicamente el estado de la aplicación. También puede configurar su aplicación para generar eventos y pasarlos a través de varios proveedores.
La configuración de eventos debe identificar cada evento en el área de mapeo de eventos. Los eventos se identifican por un nombre único y un tipo completo. El nombre del evento se utiliza como enlace en el área de reglas.
Listado 6. Área de mapeo de eventos
<!-- Los mapeos de eventos definen los eventos que se monitorean -->
<asignaciones de eventos>
<agregar nombre="Solicitudes web de muestra"
tipo="Samples.AspNet.SampleWebRequestEvent, SampleWebRequestEvent,
Versión=0.0.0.0, Cultura=neutral, PublicKeyToken=f0c63b9a560d5e5a"/>
</eventMappings>
ASP.NET 2.0 incluye varios eventos integrados, configurados con los siguientes nombres:
• Todos los eventos. Todos los nombres de eventos capturan cualquier WebBaseEvent. Esta clase de eventos es un conjunto amplio para todos los eventos capturados por el sistema de monitoreo de salud.
• Latido del corazón. Los eventos Heartbeat utilizan WebHeartBeatEvent para proporcionar notificaciones periódicas sobre el estado de una aplicación web.
• Eventos de vida útil de la aplicación. Los eventos de vida útil de la aplicación incluyen iniciar y detener la aplicación y recompilar parte o la totalidad de la aplicación. Estos eventos se basan en WebApplicationLifetimeEvent e informan la fecha, hora y estado actual cuando ocurre el evento de duración.
• Todos los errores. La categoría Todos los errores recopila cualquier anomalía o error detectado por el sistema. Estos eventos se basan en WebBaseErrorEvent.
• Errores de infraestructura. Utilice WebErrorEvent para detectar errores relacionados con el tiempo de ejecución de ASP.NET o IIS. Estos eventos son subclases de todas las categorías de errores y son principalmente relevantes para los administradores de sistemas más que para los desarrolladores de aplicaciones.
• Error de procesamiento de solicitud. Cualquier error o excepción que ocurra durante la solicitud desencadena un WebRequestErrorEvent. Este evento registra la solicitud entrante y los errores asociados con el procesamiento de la solicitud. Los errores de procesamiento de solicitudes también son un subconjunto de todas las categorías de errores.
• Todas las revisiones. Puede utilizar un sistema de seguimiento del estado para proporcionar intentos de auditoría a través de WebAuditEvents. Este evento registra automáticamente las acciones de los usuarios activos en una aplicación web. Si utiliza la suplantación, la auditoría de eventos le ayudará a realizar un seguimiento de quién utiliza su aplicación y cómo se utiliza.
• Auditoría de fallos. WebFailureAuditEvent es un tipo de evento de auditoría especial que se activa cuando un usuario intenta iniciar sesión en su sitio web con un nombre de usuario o contraseña no válidos. Este evento también ocurre cuando un usuario no puede autenticarse para el recurso especificado.
• Revisión exitosa. WebSuccessAuditEvent es la contraparte de un evento de falla que ocurre cada vez que el usuario se autentica o realiza alguna otra acción que requiere un registro de auditoría.
Los eventos personalizados son fáciles de crear, aunque debe agregar código a su aplicación para generar el evento.
Configuración de proveedores Cada proveedor debe estar registrado en un archivo de configuración. El registro de un proveedor requiere el nombre y tipo únicos de la aplicación. Este tipo contiene el nombre seguro completo de la clase de proveedor real. El nombre del proveedor se utiliza como enlace en el área de reglas.
Listado 7. Proveedor
<healthMonitoring Enabled="true" heartBeatInterval="0">
<!-- Los proveedores vinculan eventos de salud a varios objetivos, como WMI o correo electrónico SMTP -->
<proveedores>
<agregar nombre="WmiEventProvider" tipo="System.Web.Management.WebWmiEventProvider,
System.Web,Versión=1.2.3400.0,Cultura=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
ASP.NET 2.0 viene con proveedores para WMI, Windows Event Monitor, correo electrónico SMTP y bases de datos de SQL Server. Al ampliar la clase base correcta, puede crear proveedores personalizados para conectarse a otros receptores de eventos.
Asignación de eventos a proveedores
El último paso en la configuración de la supervisión del estado es conectar eventos a proveedores con reglas. Las reglas proporcionan un vínculo entre un buen nombre de evento, clase de evento, proveedor y perfil o categoría de evento. También puede utilizar reglas para definir un intervalo de tiempo mínimo para desencadenar eventos específicos.
Listado 8. Reglas
<!-- Las reglas vinculan eventos a proveedores y perfiles, y definen intervalos para la verificación de eventos -->
<reglas>
<add name="Eventos de base de datos personalizados" eventName="CustomDBEvents"
proveedor="WmiEventProvider" perfil="Base de datos" minInterval="00:01:00" />
<add name="Solicitudes web estándar" eventName="Todos los eventos"
proveedor="SqlEventProvider" perfil="Predeterminado" minInterval="00:01:00" /> </rules>
</monitoreodesalud>
Las reglas realizan varias tareas diferentes configuradas por diferentes propiedades:
• nombre. El nombre de la regla es el nombre descriptivo que aparece cuando el evento se envía al receptor.
• nombre del evento. eventName se asigna a un evento configurado en la zona.
• proveedor. Proveedor es un enlace al proveedor configurado en la zona. Cualquier evento que coincida con esta regla se entregará a través de este proveedor a los objetivos admitidos por este proveedor. Por ejemplo, System.Web.Management.SqlWebEventProvider escribe automáticamente eventos en una base de datos de SQL Server.
• perfil. Diferentes proveedores utilizan propiedades de perfil como filtros para mostrar eventos. Por ejemplo, un proveedor de correo electrónico podría enviar un mensaje inmediato para cualquier evento con un perfil "urgente", pero también podría enviar solo un correo electrónico diario con una recopilación de eventos de perfil "rutinarios" para ese día.
• intervalomínimo. Algunos eventos, como los latidos del corazón, deben activarse en el intervalo de tiempo más corto posible. Puede utilizar esta propiedad para establecer el intervalo mínimo de eventos.
Esta área de configuración le permite configurar varios eventos relacionados con la salud y asignar los eventos a varios proveedores. Por ejemplo, puede configurar un latido que envíe un evento WMI cada 10 minutos. Asimismo, puede configurar una alerta por correo electrónico para cualquier excepción no detectada.
Artículos relacionados:
http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B893664
http://blog.csdn.net/dshpsky/archive/2006/06/18/810893.aspx