ASP.NET 2.0 fournit également des fonctionnalités complètes de surveillance des applications et de surveillance de l'état. Le système est composé d'un modèle d'événements entièrement extensible et d'un moteur d'événements capable d'envoyer des événements à divers récepteurs. Par exemple, vous pouvez configurer votre application ASP.NET pour envoyer un e-mail quotidien indiquant que le serveur est en cours d'exécution et incluant la quantité de mémoire disponible. De même, vous pouvez créer un événement de santé lié à une exception non gérée. Le contenu des exceptions, les en-têtes de requête, ainsi que l'heure et la date peuvent tous être envoyés à une base de données de journalisation des erreurs.
ASP.NET 2.0 inclut des événements intégrés, notamment des pulsations, des événements de durée de vie de l'application (démarrage/arrêt/compilation) et des événements d'interruption d'erreurs (exceptions non gérées). Cependant, vous pouvez facilement construire sur ces classes de base pour recréer et déclencher vos propres événements à partir de votre application. Par exemple, vous pouvez créer un événement personnalisé pour enregistrer le moment où le centième utilisateur clique sur un lien particulier.
La fonctionnalité la plus puissante du système de surveillance de l'état ASP.NET 2.0 est qu'il est entièrement configurable via les fichiers web.config et machine.config. En utilisant du XML normal, vous pouvez définir des événements, définir des fournisseurs (destinataires d'événements) et envoyer des événements spécifiques à des fournisseurs spécifiques.
Création d'événements Les événements ont une structure similaire aux exceptions. En d’autres termes, la classe d’événements elle-même n’a pratiquement aucune fonctionnalité, sauf en tant que conteneur de messages. En termes de surveillance de l'état, tous les événements héritent de System.Web.Management.WebBaseEvent. Cependant, vous pouvez également dériver des classes de base de haut niveau utilisées à des fins spécialisées, telles que la collecte de données de requête HTTP ou la gestion des exceptions.
Listing 4. Événements personnalisés
utilisant System ;
en utilisant System.Web.Management ;
classe publique CustomEvent : WebBaseEvent
{
public const int EventCode = WebEventCodes.WebExtendedBase + 10 ;
public MyEvent (message de chaîne, objet eventSource)
: base(message, eventSource, EventCode)
{ }
}
La partie la plus importante de la création d'un événement personnalisé consiste à fournir un EventCode unique. Tous les codes d'événement intégrés se trouvent dans l'énumération WebEventCodes. Les événements personnalisés doivent avoir des numéros commençant par WebEventCodes.WebExtendedBase + 1. En dehors de cela, la seule tâche courante lors de la création d’événements personnalisés consiste à initialiser correctement l’événement.
Utilisation des événements Bien que les événements intégrés se déclenchent automatiquement, vous pouvez ajouter du code à votre application pour déclencher des événements personnalisés à tout moment.
Listing 5. Déclenchement d'un événement
<script runat="server">
void Page_Load (expéditeur d'objet, EventArgs e)
{ // Déclenche un événement personnalisé MyEvent myEvent =
new MyEvent("chargement de la page d'exemple webevent", this); myEvent.Raise( );
</script>
Lorsque vous déclenchez un événement à partir d'une page ASP.NET, vous créez simplement une nouvelle instance de l'événement, puis exécutez la méthode Raise(). La méthode Raise() transmet automatiquement l'instance d'événement au moteur de surveillance de l'état. Le moteur mappe ensuite l'événement aux profils et aux fournisseurs et transmet l'événement au bon fournisseur. Le fournisseur transmet finalement l’événement au bon destinataire.
Configuration de la surveillance de l'état La surveillance de l'état est configurée dans une nouvelle zone du fichier machine.Config ou Web.Config. Vous pouvez configurer la section pour configurer un battement de cœur Web qui signale périodiquement l'état de l'application. Vous pouvez également configurer votre application pour générer des événements et transmettre les événements via différents fournisseurs.
La configuration des événements doit identifier chaque événement dans la zone de mappage des événements. Les événements sont identifiés par un nom unique et un type complet. Le nom de l'événement est utilisé comme lien dans la zone des règles.
Listing 6. Zone de mappage d'événements
<!-- Les mappages d'événements définissent les événements qui sont surveillés -->
<eventMappings>
<ajouter un nom="SampleWebRequests"
type="Samples.AspNet.SampleWebRequestEvent, SampleWebRequestEvent,
Version=0.0.0.0, Culture=neutre, PublicKeyToken=f0c63b9a560d5e5a"/>
</eventMappings>
ASP.NET 2.0 est livré avec plusieurs événements intégrés, configurés avec les noms suivants :
• Tous les événements. Tous les noms d'événements capturent n'importe quel WebBaseEvent. Cette classe d'événements est un vaste fourre-tout pour chaque événement capturé par le système de surveillance de l'état de santé.
• Battement de coeur. Les événements Heartbeat utilisent WebHeartBeatEvent pour fournir des notifications périodiques sur l'état d'une application Web.
• Événements de durée de vie de l'application. Les événements de durée de vie de l'application incluent le démarrage et l'arrêt de l'application, ainsi que la recompilation d'une partie ou de la totalité de l'application. Ces événements sont basés sur WebApplicationLifetimeEvent et signalent la date, l'heure et l'état actuel lorsque l'événement de durée de vie se produit.
• Toutes les erreurs. La catégorie Toutes les erreurs collecte toutes les anomalies ou erreurs détectées par le système. Ces événements sont basés sur WebBaseErrorEvent.
• Erreurs d'infrastructure. Utilisez WebErrorEvent pour détecter les erreurs liées au runtime ASP.NET ou à IIS. Ces événements sont des sous-classes de toutes les catégories d'erreurs et concernent principalement les administrateurs système plutôt que les développeurs d'applications.
• Erreur de traitement de la demande. Toute erreur ou exception survenant lors de la requête déclenche un WebRequestErrorEvent. Cet événement enregistre la demande entrante et les erreurs associées au traitement de la demande. Les erreurs de traitement des demandes constituent également un sous-ensemble de toutes les catégories d’erreurs.
• Tous les avis. Vous pouvez utiliser un système de surveillance de l'état pour fournir des tentatives d'audit via WebAuditEvents. Cet événement enregistre automatiquement les actions des utilisateurs actifs dans une application Web. Si vous utilisez l'usurpation d'identité, l'audit des événements vous aidera à savoir qui utilise votre application et comment ils sont utilisés.
• Audit d'échec. WebFailureAuditEvent est un type d'événement d'audit spécial qui est déclenché lorsqu'un utilisateur tente de se connecter à votre site Web avec un nom d'utilisateur ou un mot de passe non valide. Cet événement se produit également lorsqu'un utilisateur ne peut pas être authentifié pour la ressource spécifiée.
• Examen réussi. WebSuccessAuditEvent est la contrepartie d'un événement d'échec qui se produit chaque fois que l'utilisateur s'est authentifié ou a effectué une autre action nécessitant une journalisation d'audit.
Les événements personnalisés sont faciles à créer, même si vous devez ajouter du code à votre application pour déclencher l'événement.
Configuration des fournisseurs Chaque fournisseur doit être enregistré dans un fichier de configuration. L'enregistrement d'un fournisseur nécessite le nom et le type uniques de l'application. Ce type contient le nom fort complet de la classe de fournisseur réelle. Le nom du fournisseur est utilisé comme lien dans la zone des règles.
Listing 7. Fournisseur
<healthMonitoring Enabled="true" heartBeatInterval="0">
<!-- Les fournisseurs associent les événements d'intégrité à diverses cibles telles que les e-mails WMI ou SMTP -->
<fournisseurs>
<add name="WmiEventProvider" type="System.Web.Management.WebWmiEventProvider,
System.Web,Version=1.2.3400.0,Culture=neutre, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
ASP.NET 2.0 est livré avec des fournisseurs pour les bases de données WMI, Windows Event Monitor, la messagerie SMTP et SQL Server. En étendant la classe de base appropriée, vous pouvez créer des fournisseurs personnalisés pour vous connecter à d'autres récepteurs d'événements.
Mappage des événements aux fournisseurs
La dernière étape de la configuration de la surveillance de l'état consiste à connecter les événements aux fournisseurs avec des règles. Les règles fournissent un lien entre un bon nom d'événement, une classe d'événement, un fournisseur et un profil ou une catégorie d'événement. Vous pouvez également utiliser des règles pour définir un intervalle de temps minimum pour déclencher des événements spécifiques.
Listing 8. Règles
<!-- Les règles relient les événements aux fournisseurs et aux profils et définissent les intervalles de vérification des événements -->
<règles>
<add name="Événements de base de données personnalisés" eventName="CustomDBEvents"
supplier="WmiEventProvider" profile="Base de données" minInterval="00:01:00" />
<add name="Demandes Web standard" eventName="Tous les événements"
supplier="SqlEventProvider" profile="Default" minInterval="00:01:00" /> </rules>
</healthMonitoring>
Les règles effectuent plusieurs tâches différentes configurées par différentes propriétés :
• nom. Le nom de la règle est le nom convivial qui apparaît lorsque l'événement est envoyé au destinataire.
• nom_événement. eventName correspond à un événement configuré dans la zone.
• fournisseur. Le fournisseur est un lien vers le fournisseur configuré dans la zone. Tous les événements correspondant à cette règle seront diffusés via ce fournisseur vers des cibles prises en charge par ce fournisseur. Par exemple, System.Web.Management.SqlWebEventProvider écrit automatiquement les événements dans une base de données SQL Server.
• profil. Différents fournisseurs utilisent les propriétés du profil comme filtres pour afficher les événements. Par exemple, un fournisseur de messagerie peut envoyer un message immédiat pour tout événement avec un profil « urgent », mais peut également envoyer uniquement un e-mail quotidien avec une compilation d'événements de profil « de routine » pour cette journée.
• minIntervalle. Certains événements, tels que les battements de cœur, doivent se déclencher dans l'intervalle de temps le plus court possible. Vous pouvez utiliser cette propriété pour définir l'intervalle minimum des événements.
Cette zone de configuration vous permet de paramétrer divers événements liés à la santé et de mapper les événements à différents prestataires. Par exemple, vous pouvez configurer un battement de cœur qui envoie un événement WMI toutes les 10 minutes. De même, vous pouvez configurer une alerte par e-mail pour toute exception non détectée.
Articles connexes :
http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B893664
http://blog.csdn.net/dshpsky/archive/2006/06/18/810893.aspx