Partager via


Extension des événements de contrôle d'état ASP.NET

Mise à jour : novembre 2007

Vous pouvez effectuer les tâches suivantes pour étendre les fonctionnalités de contrôle d'état ASP.NET.

  • Créez une classe d'événements Web personnalisée en héritant des types d'événement Web standard. Notez que si votre application hérite de WebBaseEvent ou WebBaseErrorEvent, elle doit s'exécuter avec une confiance partielle. Pour tous les autres événements, elle doit s'exécuter avec une confiance totale. Pour ajouter des données personnalisées à un événement personnalisé, substituez la méthode FormatCustomEventDetails. Ne substituez pas la méthode ToString. Cela évite l'écrasement par réécriture ou la falsification des informations système sensibles. Les événements personnalisés doivent être déclenchés explicitement par l'appel à la méthode Raise. (Les événements standard peuvent être déclenchés uniquement par ASP.NET.) Pour obtenir des exemples de code, consultez Comment : implémenter et déclencher des événements de contrôle d'état ASP.NET personnalisés.

  • Personnalisez un type d'événement standard en créant une classe qui implémente l'interface IWebEventCustomEvaluator.

  • Créez un fournisseur personnalisé pour traiter un événement en créant une classe qui hérite de la classe WebEventProvider ou BufferedWebEventProvider. Si votre fournisseur enregistre des informations dans un journal, vous pouvez également utiliser la classe WebEventFormatter. Les fournisseurs d'événements personnalisés peuvent être utilisés pour enregistrer des événements dans un fichier journal personnalisé, envoyer des données d'événement à des applications tierces, etc. Pour obtenir des exemples de code, consultez Comment : implémenter l'exemple de fournisseur personnalisé de contrôle d'état.

Mise en mémoire tampon des événements de contrôle d'état ASP.NET

Vous pouvez configurer les fournisseurs d'événements de contrôle d'état de la messagerie (SqlWebEventProvider, SimpleMailWebEventProvider et TemplatedMailWebEventProvider) afin qu'ils utilisent la mise en mémoire tampon d'événements. Ainsi, vous réduisez l'impact de l'envoi fréquent de messages électroniques ou de l'exécution de plusieurs insertions SQL Server sur les performances de l'application. La mise en mémoire tampon d'événements de contrôle d'état permet également d'éviter d'imposer une charge excessive au serveur SQL Server et au serveur SMTP lorsque le volume d'événements est important.

Mise en mémoire tampon du fournisseur d'événements SQL Server

Si vous activez la mise en mémoire tampon du fournisseur d'événements SQL Server, le fournisseur met en mémoire tampon des informations d'événements selon le mode mémoire tampon spécifié avant d'insérer par lot, les informations d'événements dans la base de données.

Par défaut, le fournisseur SqlWebEventProvider n'est pas configuré pour utiliser la mise en mémoire tampon. Chaque fois qu'un événement est déclenché, ses informations sont insérées immédiatement dans la base de données. Vous pouvez substituer ce paramètre par défaut en activant la mise en mémoire tampon dans l'élément providers du fichier Web.config où le fournisseur SQL est spécifié. Pour ce faire, affectez la valeur true à l'attribut buffer de l'élément add. Si vous configurez votre propre fournisseur SQL (c'est-à-dire si vous n'utilisez pas SqlWebEventProvider) et que vous ne spécifiez pas de valeur pour l'attribut buffer, la valeur par défaut est true.

Vous pouvez personnaliser le comportement de mise en mémoire tampon en sélectionnant un mode mémoire tampon prédéfini. Vous pouvez également ajouter des éléments personnalisés à la collection bufferModes. Chaque élément définit des propriétés telles que la taille de la mémoire tampon et la fréquence de vidage de celle-ci. Vous pouvez configurer ensuite le fournisseur pour utiliser l'un des modes mémoire tampon définis.

L'exemple qui suit illustre les paramètres de configuration du fournisseur d'événements SQL avec la mise en mémoire tampon activée.

Remarque :

L' élément AnalysisbufferModes est déjà configuré dans le fichier Web.config racine et ne doit plus être déclaré dans un fichier Web.config de niveau application. L'élément SqlWebEventProviderproviders est également configuré dans le fichier Web.config racine, mais l'attribut buffer a la valeur false et l'attribut bufferMode la valeur Notification. Par conséquent, l'élément providers affiché dans l'exemple doit être déclaré dans un fichier Web.config de niveau application. Vous devez également utiliser un élément clear ou remove pour supprimer la configuration de niveau supérieur du fournisseur SqlWebEventProvider.

Dans l'exemple, le fournisseur d'événements SQL est configuré pour utiliser le mode mémoire tampon Analysis lorsque la mise en mémoire tampon est activée, celle-ci étant définie dans l'élément bufferModes. Avec ce mode, le fournisseur vide les informations d'événements toutes les 5 minutes. Il supprime jusqu'à 100 événements par notification et met en mémoire tampon jusqu'à 1 000 événements en cas d'augmentation soudaine de la fréquence des événements. Le fournisseur garantit que la fréquence d'envoi des événements ne sera pas supérieure à une fois par minute.

<healthMonitoring>
  <providers>
    <clear/>
    <add 
      ConnectionStringName="LocalSqlServer" 
      maxEventDetailsLength="1073741823"
      buffer="true" 
      bufferMode="Analysis" 
      name="SqlWebEventProvider"
      type="System.Web.Management.SqlWebEventProvider,System.Web, Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" 
    />
  </providers>
  <bufferModes>
    <add 
      name="Analysis" 
      maxBufferSize="1000" 
      maxFlushSize="100"
      urgentFlushThreshold="100" 
      regularFlushInterval="00:05:00"
      urgentFlushInterval="00:01:00" 
      maxBufferThreads="1"
    />
  </bufferModes>
</healthMonitoring>

Mise en mémoire tampon du fournisseur d'événements de messagerie

Si vous activez la mise en mémoire tampon pour les fournisseurs d'événements de messagerie, ceux-ci mettent en mémoire tampon les événements avant d'envoyer des messages électroniques sous forme de notifications d'événement. Si vous configurez un fournisseur d'événements de messagerie et que vous ne spécifiez pas de valeur pour l'attribut buffer de son élément add, la valeur par défaut est true. Vous pouvez désactiver la mise en mémoire tampon en affectant à l'attribut buffer la valeur false.

Vous pouvez personnaliser le comportement de mise en mémoire tampon en sélectionnant un mode mémoire tampon prédéfini. Vous pouvez également ajouter des éléments personnalisés à la collection bufferModes. Chaque élément définit des propriétés telles que la taille de la mémoire tampon et la fréquence de vidage de celle-ci. Vous pouvez configurer ensuite le fournisseur pour utiliser l'un des modes mémoire tampon définis. Il est conseillé d'utiliser le mode CriticalNotification.

L'exemple suivant illustre les paramètres de configuration des fournisseurs d'événements de messagerie, avec la mise en mémoire tampon désactivée pour la classe SimpleMailWebEventProvider et activée pour la classe TemplatedMailWebEventProvider. Le fournisseur TemplatedMailWebEventProvider est configuré pour utiliser le mode mémoire tampon CriticalNotification déjà configuré dans le fichier Web.config racine. En mode CriticalNotification, le fournisseur tente de vider toutes les informations d'événement dès réception des événements. Toutefois, la tentative de vidage n'est pas effectuée plus d'une fois par minute afin d'éviter d'imposer une charge excessive au serveur de messagerie. Les messages conservent une taille acceptable. Les informations concernent 20 événements au maximum.

Si le système de contrôle d'état reçoit davantage d'informations d'événements que le maximum autorisé, les événements les plus anciens sont supprimés à mesure que de nouveaux événements sont générés. Le système de contrôle d'état tente d'éviter la suppression d'événements en effectuant un vidage plus fréquent lorsque la mémoire tampon arrive à saturation. Toutefois, il ne tentera pas d'envoyer des informations pour les événements s'ils ont été supprimés. (Il signale cependant lors du vidage suivant que les événements ont été supprimés.) Les événements plus récents peuvent être différés de cinq minutes au plus si le fournisseur est surchargé, en supposant qu'ils n'ont pas été supprimés en raison de la saturation de la mémoire tampon.

<healthMonitoring>
  <providers>
    <!-- mail provider with attributes that are always relevant -->
    <add 
      name="SimpleMailWebEventProvider" 
      type="System.Web.Management.SimpleMailWebEventProvider"
      to="SystemAdministrator@contoso.com"
      from="HealthMonitoring@contoso.com"
      buffer="false" 
    />
    <!-- mail provider with attributes that are relevant only 
         when buffering is enabled -->
    <add 
      name="SampleTemplatedMailWebEventProvider" 
      type="System.Web.Management.TemplatedMailWebEventProvider"
      to="SystemAdministrator@contoso.com" 
      from="HealthMonitoring@contoso.com" 
      buffer="true" 
      bufferMode="Critical Notification"
      template="Template.aspx" />
  </providers>
  <bufferModes>
    <add 
      name="Critical Notification" 
      maxBufferSize="100" maxFlushSize="20"
      urgentFlushThreshold="1" 
      regularFlushInterval="Infinite" 
      urgentFlushInterval="00:01:00"
      maxBufferThreads="1"
    />
  </bufferModes> 
</healthMonitoring>

Pour que l'exemple fonctionne, vous devez configurer un serveur SMTP dans le fichier de configuration, comme illustré dans l'exemple suivant.

<system.net>
  <mailSettings>
    <smtp deliveryMethod="Network">
      <network 
        defaultCredentials="true" 
        host="127.0.0.1" 
        port="25" 
        username="username" 
        password="password" />
    </smtp>
  </mailSettings>
</system.net>

Pour plus d'informations, consultez <mailSettings>, élément (paramètres réseau).

Remarque :

Il existe certains risques de sécurité lorsque des mots de passe en texte clair sont stockés dans un fichier de configuration. Si vous conservez des informations d'identification dans le fichier de configuration, vous devez chiffrer le contenu de l'élément de configuration <mailSettings> en protégeant la configuration. Pour plus d'informations, consultez Chiffrement des informations de configuration à l'aide de la configuration protégée.

Paramètres du mode mémoire tampon

Vous pouvez définir les attributs suivants de l'élément add dans l'élément bufferModes pour spécifier le comportement de la mémoire tampon :

  • regularFlushInterval   Intervalle normal de vidage des informations d'événements

  • urgentFlushThreshold   Nombre d'événements dont les informations doivent être mises en mémoire tampon avant qu'elle ne soit vidée.

Les paramètres suivants spécifient les éléments garantis par le fournisseur au récepteur d'événements.

  • maxBufferSize   Nombre maximal d'événements dont la mémoire tampon stocke les informations. Si le nombre d'événements dans la mémoire tampon dépasse cette valeur, les événements plus anciens sont supprimés.

  • maxFlushSize   Nombre maximal d'événements dont les informations sont vidées simultanément par le fournisseur.

  • urgentFlushInterval   Délai d'attente minimal du fournisseur avant qu'il n'exécute un autre vidage urgent. Si le délai représenté par la propriété urgentFlushInterval n'est pas encore dépassé depuis le dernier vidage mais que la mémoire tampon est saturée, les informations d'événements plus anciens sont éliminées de la mémoire tampon. Le fournisseur assure le suivi du nombre d'événements supprimés et inclut un avertissement lors de la notification d'événements suivante.

Utilisation de WMI pour effectuer le suivi des événements de contrôle d'état ASP.NET

Une façon de contrôler les événements d'état ASP.NET consiste à utiliser le fournisseur d'événements Windows Management Instrumentation (WMI), la classe WmiWebEventProvider. Ce fournisseur convertit des événements de contrôle d'état Web (événements Web) en événements WMI. WMI fournit un modèle objet standard dans lequel les entités que vous souhaitez contrôler peuvent être représentées sous forme d'objets. Ces entités représentent des ordinateurs, des cartes réseau, des imprimantes, des applications de logiciel, et ainsi de suite. Les entités sont mappées au modèle objet WMI afin de pouvoir être contrôlées par des applications personnalisées. L'illustration suivante montre la relation entre les événements Web ASP.NET, WMI et une application consommateur qui écoute les événements WMI.

Relation entre ASP.NET et WMI

Connexion entre les événements d'état et WMI

Le contrôle d'état ASP.NET fournit l'infrastructure de la connexion entre les événements d'état et WMI. Il mappe ces événements dans les classes WMI afin qu'ils puissent être traités comme objets WMI. Il fournit également l'assistance pour traiter les événements d'état et les distribuer au système WMI. Pour plus d'informations sur le mappage des événements ASP.NET dans WMI, consultez Procédure pas à pas : écoute des événements WMI lors du contrôle d'état ASP.NET. Pour plus d'informations sur WMI, consultez Windows Management Instrumentation (en anglais) sur le site Web MSDN.

La liste suivante décrit les étapes requises pour contrôler des événements d'état avec WMI :

  1. Définissez le mappage entre les classes d'événements Web et les objets WMI. Cette étape est déjà effectuée pour chaque classe d'événements Web standard. Ces mappages sont contenus dans le fichier MOF (Managed Object Format) pour ASP.NET, %SystemRoot%\Microsoft.NET\Framework\<version> fichier \aspnet.mof.

    Remarque :

    Tous les événements personnalisés sont mappés au type d'événement de base dans WMI. Il n'est pas possible de mapper un événement de contrôle d'état ASP.NET personnalisé à un événement WMI arbitraire.

    Par exemple, le code suivant affiche la définition de la classe WMI mappée au type WebHeartbeatEvent.

    class HeartbeatEvent : ManagementEvent {
        /*
         * ProcessStatistics    
         */
        DATETIME    ProcessStartTime;
        sint32      ThreadCount;
        sint64      WorkingSet;
        sint64      PeakWorkingSet;
        sint64      ManagedHeapSize;
        sint32      AppdomainCount;    
        sint32      RequestsExecuting;
        sint32      RequestsQueued;
        sint32      RequestsRejected;
    }; 
    

    Pour plus d'informations sur les fichiers MOF, consultez Managed Object Format dans le Kit de développement WMI SDK (en anglais) sur MSDN.

  2. Définissez un fournisseur de contrôle d'état ASP.NET qui sera responsable du traitement des événements.

    Le fournisseur standard est la classe WmiWebEventProvider. Par défaut, celle-ci est déjà configurée dans la section healthMonitoring du fichier Web.config racine à l'aide de l'élément suivant :

    <providers>
      <add 
        name="WmiWebEventProvider" 
        type="System.Web.Management.WmiWebEventProvider,System.Web, Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" 
      />
    </providers>
    
  3. Entrez les paramètres appropriés dans la section healthMonitoring du fichier de configuration pour créer une connexion entre les classes d'événements Web et le fournisseur d'événements WMI, la classe WmiWebEventProvider.

    Par défaut, le fournisseur d'événements WMI n'est abonné à aucun événement Web. Vous pouvez utiliser les éléments suivants dans un fichier Web.config de niveau application pour abonner le fournisseur d'événements WMI à tous les événements Web. Par défaut, le type d'événement All Events est configuré dans l'élément eventMappings du fichier Web.config racine. Il est mappé à la classe WebBaseEvent.

    <rules>
      <add 
        name="Testing Wmi"
        eventName="All Events" 
        provider="WmiWebEventProvider" 
        profile="Critical"
      />
    </rules>
    
  4. Créez une application pour écouter les événements WMI ou utilisez une application tierce.

    L'exemple de code dans Procédure pas à pas : écoute des événements WMI lors du contrôle d'état ASP.NET crée une application console qui affiche des informations d'événement toutes les fois qu'un événement Web est déclenché.

Personnalisation de l'infrastructure des événements d'état WMI

Lorsqu'un événement Web se produit, le contrôle d'état ASP.NET le distribue à l'objet WmiWebEventProvider. L'objet fournisseur traite l'événement et indique les données appropriées selon la définition de classe MOF connexe. Le fournisseur distribue ensuite ces données au système WMI en utilisant un appel au code non managé.

L'option de personnalisation d'envoi d'événements Web à WMI est uniquement disponible si vous créez une application personnalisée qui consomme des événements de contrôle d'état ASP.NET après qu'ils ont été émis sous la forme d'événements WMI. Dans ce cas, la seule modification de configuration que vous devez effectuer consiste à configurer un nouvel élément rules comme décrit ci-dessus. Votre application écoutera les événements d'état ASP.NET dans le formulaire d'événements WMI, dans la forme où ils sont émis par le système d'exploitation. Pour plus d'informations, consultez Procédure pas à pas : écoute des événements WMI lors du contrôle d'état ASP.NET.

Remarque :

Vous ne pouvez pas étendre la classe WmiWebEventProvider. Les seules classes de fournisseur d'événements que vous pouvez étendre sont les classes WebEventProvider et BufferedWebEventProvider.

Implémentation de fournisseurs et d'événements de contrôle d'état ASP.NET personnalisés

Par défaut, certains événements sont déjà capturés dans des compteurs de performance, dans le journal des événements ou encore envoyés au système de traçage ASP.NET. Vous pouvez activer d'autres événements en les mappant à des fournisseurs existants. Pour plus d'informations, consultez la section « Utilisation d'événements Web à l'aide de fournisseurs d'événements » de la rubrique Vue d'ensemble du contrôle d'état ASP.NET.

Si, parmi les classes de fournisseurs ou d'événements Web existantes, aucune ne satisfait à vos besoins, vous pouvez les étendre. Le tableau suivant répertorie plusieurs façons de personnaliser le contrôle d'état ASP.NET :

Tâche

Implémentation

Exemple

Créer une classe d'événements Web personnalisée.

Créez une classe qui hérite de WebBaseEvent et implémente la méthode virtuelle Raise. Pour ajouter des données personnalisées à un événement personnalisé, substituez la méthode FormatCustomEventDetails.

Comment : implémenter et déclencher des événements de contrôle d'état ASP.NET personnalisés

Créer un fournisseur d'événements personnalisé chargé de traiter un événement Web intégré ou personnalisé.

Créez une classe qui hérite de la classe WebEventProvider (ou l'une des classes dérivées). Si votre fournisseur enregistre des informations dans un journal, il faut également hériter de la classe WebEventFormatter.

Comment : implémenter l'exemple de fournisseur personnalisé de contrôle d'état

Voir aussi

Tâches

Comment : verrouiller des paramètres de configuration ASP.NET

Concepts

Vue d'ensemble du contrôle d'état ASP.NET

Vue d'ensemble de la configuration ASP.NET

Référence

bufferModes, élément de healthMonitoring (Schéma des paramètres ASP.NET)

providers, élément de healthMonitoring (Schéma des paramètres ASP.NET)