ASP.NET 2.0 bietet außerdem eine umfassende Anwendungsüberwachung und Gesundheitsüberwachung. Das System besteht aus einem vollständig erweiterbaren Ereignismodell und einer Ereignis-Engine, die Ereignisse an verschiedene Empfänger senden kann. Beispielsweise können Sie Ihre ASP.NET-Anwendung so konfigurieren, dass sie täglich eine E-Mail sendet, die angibt, dass der Server ausgeführt wird, und die Menge des verfügbaren Speichers angibt. Ebenso können Sie ein Gesundheitsereignis erstellen, das mit einer nicht behandelten Ausnahme verknüpft ist. Ausnahmeinhalte, Anforderungsheader sowie Uhrzeit und Datum können alle an eine Fehlerprotokollierungsdatenbank gesendet werden.
ASP.NET 2.0 umfasst integrierte Ereignisse, einschließlich Heartbeats, Anwendungslebensdauerereignisse (Starten/Stoppen/Kompilieren) und Fehlerfallenereignisse (nicht behandelte Ausnahmen). Sie können jedoch problemlos auf diesen Basisklassen aufbauen, um Ihre eigenen Ereignisse aus Ihrer Anwendung neu zu erstellen und auszulösen. Sie können beispielsweise ein benutzerdefiniertes Ereignis erstellen, um aufzuzeichnen, wann der hundertste Benutzer auf einen bestimmten Link klickt.
Die wirklich leistungsstarke Funktion des ASP.NET 2.0-Zustandsüberwachungssystems besteht darin, dass es vollständig über die Dateien web.config und machine.config konfigurierbar ist. Mit normalem XML können Sie Ereignisse definieren, Anbieter (Ereignisempfänger) definieren und bestimmte Ereignisse an bestimmte Anbieter senden.
Ereignisse erstellen Ereignisse ähneln in ihrer Struktur Ausnahmen. Mit anderen Worten: Die Ereignisklasse selbst hat fast keine Funktionalität, außer als Nachrichtencontainer. Im Hinblick auf die Gesundheitsüberwachung erben alle Ereignisse von System.Web.Management.WebBaseEvent. Sie können jedoch auch von Basisklassen auf hoher Ebene ableiten, die für spezielle Zwecke verwendet werden, beispielsweise zum Sammeln von HTTP-Anforderungsdaten oder zum Behandeln von Ausnahmen.
Listing 4. Benutzerdefinierte Ereignisse
mit System;
mit System.Web.Management;
öffentliche Klasse CustomEvent: WebBaseEvent
{
public const int EventCode = WebEventCodes.WebExtendedBase + 10;
public MyEvent(string message, object eventSource)
: base(Nachricht, EventSource, EventCode)
{ }
}
Der wichtigste Teil beim Erstellen eines benutzerdefinierten Ereignisses ist die Bereitstellung eines eindeutigen EventCodes. Alle integrierten Ereigniscodes befinden sich in der WebEventCodes-Enumeration. Benutzerdefinierte Ereignisse sollten Nummern haben, die mit WebEventCodes.WebExtendedBase + 1 beginnen. Abgesehen davon besteht die einzige häufige Aufgabe beim Erstellen benutzerdefinierter Ereignisse darin, das Ereignis korrekt zu initialisieren.
Verwenden von Ereignissen Obwohl integrierte Ereignisse automatisch ausgelöst werden, können Sie Ihrer Anwendung jederzeit Code hinzufügen, um benutzerdefinierte Ereignisse auszulösen.
Listing 5. Auslösen eines Ereignisses
<script runat="server">
void Page_Load(Object sender, EventArgs e)
{ // Ein benutzerdefiniertes Ereignis auslösen MyEvent myEvent =
new MyEvent("loading webevent example page", this);
</script>
Wenn Sie ein Ereignis von einer ASP.NET-Seite auslösen, erstellen Sie einfach eine neue Instanz des Ereignisses und führen dann die Raise()-Methode aus. Die Raise()-Methode übermittelt die Ereignisinstanz automatisch an die Integritätsüberwachungs-Engine. Die Engine ordnet das Ereignis dann Profilen und Anbietern zu und übergibt das Ereignis an den richtigen Anbieter. Der Anbieter übermittelt das Ereignis letztendlich an den richtigen Empfänger.
Konfigurieren der Integritätsüberwachung Die Integritätsüberwachung wird in einem neuen Bereich in der Datei „machine.Config“ oder „Web.Config“ konfiguriert. Sie können den Abschnitt so konfigurieren, dass ein Web-Heartbeat eingerichtet wird, der regelmäßig den Status der Anwendung meldet. Sie können Ihre Anwendung auch so konfigurieren, dass sie Ereignisse generiert und diese über verschiedene Anbieter weiterleitet.
Beim Konfigurieren von Ereignissen muss jedes Ereignis im Ereigniszuordnungsbereich identifiziert werden. Ereignisse werden durch einen eindeutigen Namen und einen vollständigen Typ identifiziert. Der Veranstaltungsname wird als Link im Regelbereich verwendet.
Listing 6. Ereigniszuordnungsbereich
<!-- Ereigniszuordnungen definieren die Ereignisse, die überwacht werden -->
<eventMappings>
<add name="SampleWebRequests"
type="Samples.AspNet.SampleWebRequestEvent, SampleWebRequestEvent,
Version=0.0.0.0, Kultur=neutral, PublicKeyToken=f0c63b9a560d5e5a"/>
</eventMappings>
ASP.NET 2.0 wird mit mehreren integrierten Ereignissen geliefert, die mit den folgenden Namen konfiguriert sind:
• Alle Ereignisse. Alle Ereignisnamen erfassen jedes WebBaseEvent. Diese Ereignisklasse ist ein umfassender Sammelbegriff für jedes vom Gesundheitsüberwachungssystem erfasste Ereignis.
• Herzschlag. Heartbeat-Ereignisse verwenden WebHeartBeatEvent, um regelmäßige Benachrichtigungen über den Status einer Webanwendung bereitzustellen.
• Ereignisse zur Anwendungslebensdauer. Zu den Ereignissen für die Anwendungslebensdauer gehören das Starten und Stoppen der Anwendung sowie das Neukompilieren eines Teils oder der gesamten Anwendung. Diese Ereignisse basieren auf WebApplicationLifetimeEvent und melden Datum, Uhrzeit und aktuellen Status, wenn das Lifetime-Ereignis auftritt.
• Alle Fehler. In der Kategorie „Alle Fehler“ werden alle vom System erkannten Anomalien oder Fehler erfasst. Diese Ereignisse basieren auf WebBaseErrorEvent.
• Infrastrukturfehler. Verwenden Sie WebErrorEvent, um Fehler im Zusammenhang mit der ASP.NET-Laufzeitumgebung oder IIS abzufangen. Diese Ereignisse sind Unterklassen aller Fehlerkategorien und in erster Linie für Systemadministratoren und nicht für Anwendungsentwickler relevant.
• Fehler bei der Verarbeitung der Anfrage. Jeder Fehler oder jede Ausnahme, die während der Anforderung auftritt, löst ein WebRequestErrorEvent aus. Dieses Ereignis protokolliert die eingehende Anfrage und die mit der Verarbeitung der Anfrage verbundenen Fehler. Fehler bei der Anforderungsverarbeitung sind ebenfalls eine Teilmenge aller Fehlerkategorien.
• Alle Bewertungen. Sie können ein Integritätsüberwachungssystem verwenden, um Prüfversuche über WebAuditEvents bereitzustellen. Dieses Ereignis zeichnet automatisch die Aktionen aktiver Benutzer in einer Webanwendung auf. Wenn Sie Identitätswechsel verwenden, können Sie durch Überwachungsereignisse den Überblick darüber behalten, wer Ihre Anwendung verwendet und wie sie verwendet wird.
• Fehleraudit. WebFailureAuditEvent ist ein spezieller Audit-Ereignistyp, der ausgelöst wird, wenn ein Benutzer versucht, sich mit einem ungültigen Benutzernamen oder Passwort bei Ihrer Website anzumelden. Dieses Ereignis tritt auch auf, wenn ein Benutzer für die angegebene Ressource nicht authentifiziert werden kann.
• Erfolgreiche Überprüfung. WebSuccessAuditEvent ist das Gegenstück zu einem Fehlerereignis, das immer dann auftritt, wenn sich der Benutzer authentifiziert oder eine andere Aktion ausgeführt hat, die eine Überwachungsprotokollierung erfordert.
Benutzerdefinierte Ereignisse lassen sich leicht erstellen, allerdings müssen Sie Ihrer Anwendung Code hinzufügen, um das Ereignis auszulösen.
Konfigurieren von Anbietern Jeder Anbieter muss in einer Konfigurationsdatei registriert werden. Für die Registrierung eines Anbieters sind der eindeutige Name und Typ der Anwendung erforderlich. Dieser Typ enthält den vollständigen starken Namen der tatsächlichen Anbieterklasse. Der Name des Anbieters wird als Link im Regelbereich verwendet.
Listing 7. Anbieter
<healthMonitoring Enabled="true" heartBeatInterval="0">
<!-- Anbieter verknüpfen Gesundheitsereignisse mit verschiedenen Zielen wie WMI oder SMTP-E-Mail -->
<Anbieter>
<add name="WmiEventProvider" type="System.Web.Management.WebWmiEventProvider,
System.Web,Version=1.2.3400.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
ASP.NET 2.0 enthält Anbieter für WMI, Windows Event Monitor, SMTP-E-Mail und SQL Server-Datenbanken. Durch Erweitern der richtigen Basisklasse können Sie benutzerdefinierte Anbieter erstellen, um eine Verbindung zu anderen Ereignisempfängern herzustellen.
Zuordnen von Ereignissen zu Anbietern
Der letzte Schritt bei der Konfiguration der Gesundheitsüberwachung besteht darin, Ereignisse mithilfe von Regeln mit Anbietern zu verbinden. Regeln stellen eine Verbindung zwischen einem guten Veranstaltungsnamen, einer Veranstaltungsklasse, einem Anbieter und einem Veranstaltungsprofil oder einer Veranstaltungskategorie her. Sie können Regeln auch verwenden, um ein Mindestzeitintervall für das Auslösen bestimmter Ereignisse festzulegen.
Listing 8. Regeln
<!-- Regeln verknüpfen Ereignisse mit Anbietern und Profilen und definieren Intervalle für die Ereignisprüfung -->
<Regeln>
<add name="Benutzerdefinierte Datenbankereignisse" eventName="CustomDBEvents"
anbieter="WmiEventProvider" profile="Database" minInterval="00:01:00" />
<add name="Standard-Webanfragen" eventName="Alle Ereignisse"
anbieter="SqlEventProvider" profile="Default" minInterval="00:01:00" /> </rules>
</healthMonitoring>
Regeln führen verschiedene Aufgaben aus, die durch unterschiedliche Eigenschaften konfiguriert werden:
• Name. Der Regelname ist der Anzeigename, der angezeigt wird, wenn das Ereignis an den Empfänger gesendet wird.
• Ereignisname. eventName wird einem in der Zone konfigurierten Ereignis zugeordnet.
• Anbieter. Provider ist ein Link zu dem in der Zone konfigurierten Provider. Alle Ereignisse, die dieser Regel entsprechen, werden über diesen Anbieter an von diesem Anbieter unterstützte Ziele übermittelt. Beispielsweise schreibt System.Web.Management.SqlWebEventProvider Ereignisse automatisch in eine SQL Server-Datenbank.
• Profil. Verschiedene Anbieter nutzen Profileigenschaften als Filter für die Anzeige von Ereignissen. Beispielsweise könnte ein E-Mail-Anbieter eine Sofortnachricht für jedes Ereignis mit einem „dringenden“ Profil senden, aber möglicherweise auch nur eine tägliche E-Mail mit einer Zusammenstellung von „routinemäßigen“ Profilereignissen für diesen Tag.
• minIntervall. Einige Ereignisse, wie z. B. Heartbeats, müssen innerhalb des kürzestmöglichen Zeitintervalls ausgelöst werden. Mit dieser Eigenschaft können Sie das minimale Ereignisintervall festlegen.
In diesem Konfigurationsbereich können Sie verschiedene gesundheitsbezogene Ereignisse einrichten und die Ereignisse verschiedenen Anbietern zuordnen. Beispielsweise könnten Sie einen Heartbeat einrichten, der alle 10 Minuten ein WMI-Ereignis sendet. Ebenso können Sie eine E-Mail-Benachrichtigung für alle nicht erfassten Ausnahmen einrichten.
Verwandte Artikel:
http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B893664
http://blog.csdn.net/dshpsky/archive/2006/06/18/810893.aspx