Gewusst wie: Senden von E-Mail für Systemüberwachungsbenachrichtigungen
Aktualisiert: November 2007
ASP.NET-Anwendungen können für das Senden einer E-Mail-Benachrichtigung beim Eintreten eines Webereignisses der ASP.NET-Systemüberwachung konfiguriert werden. Konfigurieren Sie zu diesem Zweck einen der vorhandenen E-Mail-Anbieter für Webereignisse.
Die ASP.NET-Systemüberwachung verfügt über mehrere Ereignisanbieter, die Webereignisdaten der Systemüberwachung verwenden. In der Stammdatei Web.config sind nur die Ereignisanbieter EventLogWebEventProvider, SqlWebEventProvider und WmiWebEventProvider vorkonfiguriert. In diesem Thema wird das Hinzufügen von Konfigurationseinstellungen für E-Mail-Anbieter für Webereignisse beschrieben. Außerdem wird beschrieben, wie diese Anbieter für das Erkennen bestimmter Ereignisse aktiviert werden können.
Eine Liste der Webereignisse, die der Anbieter erkennen kann finden Sie unter dem <eventMappings>-Element in der Stammdatei Web.config oder im Abschnitt zu Webereignissen unter Übersicht über die ASP.NET-Systemüberwachung.
Senden von E-Mails aus der Webanwendung
Für die Codebeispiele in diesem Thema muss die Webanwendung für das Senden von E-Mail-Nachrichten konfiguriert sein. In der folgenden Prozedur wird veranschaulicht, wie die Anwendung konfiguriert wird, wenn bereits ein SMTP-Dienst (Simple Mail Transfer Protocol) vorhanden und auf dem Webserver eingerichtet ist und der Zugriff auf den SMTP-Server, über den E-Mail-Nachrichten versendet werden, möglich ist. Weitere Informationen hierzu finden Sie unter Gewusst wie: Installieren und Konfigurieren von virtuellen SMTP-Servern in IIS 6.0.
So konfigurieren Sie die ASP.NET-Anwendung für das Senden von E-Mail
Öffnen Sie die Datei Web.config für die Anwendung, und konfigurieren Sie im <system.net>-Abschnitt das <mailSettings>-Element. Im deliveryMethod-Attribut des <smtp>-Elements muss eine Übermittlungsmethode angegeben werden; außerdem muss der Name des SMTP-Servers im host-Attribut des <network>-Elements angegeben werden. Ferner wird empfohlen, das defaultCredentials-Attribut auf true festzulegen. (Andere Attribute sind verfügbar und in den Elementthemen dokumentiert.)
In der nachfolgenden Darstellung finden Sie ein Beispiel für die Konfigurationseinstellungen:
<configuration xmlns="https://schemas.microsoft.com/.NetConfiguration/v2.0"> <system.net> <mailSettings> <smtp deliveryMethod="Network"> <network defaultCredentials="true" host="smtpservername" /> </smtp> </mailSettings> </system.net> <!-- Other configuration settings. --> </configuration>
Konfigurieren der E-Mail-Anbieter
So konfigurieren Sie den SimpleMailWebEventProvider-Webereignisanbieter
Öffnen Sie die Datei Web.config für die Anwendung, und fügen Sie im <healthMonitoring>-Element des <system.web>-Abschnitts ein neues <providers>-Element hinzu. Der SimpleMailWebEventProvider-Webereignisanbieter wird im neuen providers-Element konfiguriert. Dieser Anbieter ist in der ASP.NET-Systemüberwachung enthalten, jedoch nicht in der Datei Web.config vorkonfiguriert.
In der nachfolgenden Darstellung finden Sie ein Beispiel für die Konfigurationseinstellungen:
<configuration> <system.web> <healthMonitoring enabled="true" heartbeatInterval="0"> <providers> <add name="exampleMailWebEventProvider" type="System.Web.Management.SimpleMailWebEventProvider" to="someone@contoso.com" from="someone@contoso.com" buffer="false" subjectPrefix="WebEvent has fired" /> </providers> </healthMonitoring> </system.web> <!-- Other configuration settings. --> </configuration>
Deaktivieren Sie für diese Prozedur den Ereignispuffer, indem Sie das buffer-Attribut auf false festlegen. Das name-Attribut ist beliebig; es wird verwendet, um im nächsten Schritt den Anbieter zu identifizieren. Geben Sie für das to-Attribut und das from-Attribut Ihre E-Mail-Adresse ein, um das Testverfahren im späteren Verlauf dieser Prozedur abzuschließen.
Fügen Sie im <healthMonitoring>-Element ein neues <rules>-Element hinzu. Mit dem neuen rules-Element werden die E-Mail-Anbieter für das Erkennen aller Webereignisse konfiguriert.
In der nachfolgenden Darstellung finden Sie ein Beispiel für die Konfigurationseinstellungen:
<configuration> <system.web> <healthMonitoring enabled="true" heartbeatInterval="0"> <!-- <providers> element from the previous step --> <rules> <add name="Testing Mail Event Providers" eventName="All Events" provider="exampleMailWebEventProvider" profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:01:00" custom="" /> </rules> </healthMonitoring> </system.web> <!-- Other configuration settings. --> </configuration>
Das provider-Attribut entspricht dem name-Attribut des providers-Elements im vorherigen Schritt. Das eventName-Attribut des rules-Elements entspricht dem name-Attribute des vorkonfigurierten eventMappings-Elements in der Stammdatei Web.config. In dieser Konfiguration wird für jedes Webereignis, das in der ASP.NET-Anwendung eintritt, eine E-Mail-Nachricht gesendet. Dazu gehören u. a. das Starten und Beenden einer Anwendung, Änderungen an der Konfiguration sowie Anforderungen.
Definieren Sie für diese Prozedur das rules-Element und das provider-Element aus dem vorherigen Schritt in der gleichen Konfigurationsdatei. Das provider-Element kann auch in einer Konfigurationsdatei vorhanden sein, die sich an einer höheren Position in der Kette der Konfigurationsdateien, und damit näher an der Stammdatei Web.config befindet.
Überprüfen Sie die Konfiguration, indem Sie eine Seite von der Anwendung anfordern. Möglicherweise haben Sie bereits eine E-Mail-Nachricht erhalten, wenn Sie die Konfigurationseinstellungen geändert haben, wodurch ein Neustartereignis für die Anwendung ausgelöst wird. Der Betreff und der Meldungstext dieser E-Mail können in etwa wie folgt aussehen:
Subject: Event Notification 1, part 1: WebEvent has fired <event> Body:
Application Information --------------- Application domain: /LM/w3svc/1/ROOT/ Trust level: Full Application Virtual Path: / Application Path: Machine name:
Events --------------- ---------------
So konfigurieren Sie den TemplatedMailWebEventProvider-Webereignisanbieter
Öffnen Sie die Datei Web.config für die Anwendung, und fügen Sie im <healthMonitoring>-Element des <system.web>-Abschnitts ein neues <providers>-Element hinzu. Der TemplatedMailWebEventProvider-Webereignisanbieter wird im neuen providers-Element konfiguriert. Dieser Anbieter ist in der ASP.NET-Systemüberwachung enthalten, jedoch nicht in der Stammdatei Web.config vorkonfiguriert.
In der nachfolgenden Darstellung finden Sie ein Beispiel für die Konfigurationseinstellungen:
<configuration> <system.web> <healthMonitoring enabled="true" heartbeatInterval="0"> <providers> <add name="exampleTemplatedMailWebEventProvider" type="System.Web.Management.TemplatedMailWebEventProvider" template="template.aspx" detailedTemplateErrors="true" to="someone@contoso.com" from="someone@contoso.com" buffer="true" bufferMode="Notification" maxMessagesPerNotification="1" maxEventsPerMessage="1" /> </providers> </healthMonitoring> </system.web> <!-- Other configuration settings. --> </configuration>
Aktivieren Sie für diese Prozedur den Ereignispuffer, indem Sie das buffer-Attribut auf false festlegen. Der bufferMode-Attributwert Notification ist in der Stammdatei Web.config vordefiniert. Weitere Informationen zur Pufferung finden Sie unter Erweitern von ASP.NET-Systemüberwachungsereignissen.
Das name-Attribut ist beliebig; es wird verwendet, um im nächsten Schritt den Anbieter zu identifizieren. Geben Sie für das to-Attribut und das from-Attribut Ihre E-Mail-Adresse ein, um das Testverfahren im späteren Verlauf dieser Prozedur abzuschließen.
Fügen Sie im <healthMonitoring>-Element ein neues <rules>-Element hinzu. Mit dem neuen rules-Element werden die E-Mail-Anbieter für das Erkennen aller Webereignisse konfiguriert.
In der nachfolgenden Darstellung finden Sie ein Beispiel für die Konfigurationseinstellungen:
<configuration> <system.web> <healthMonitoring enabled="true" heartbeatInterval="0"> <!-- <providers> element from the previous step --> <rules> <add name="Testing Templated Mail Event Providers" eventName="Request Processing Events" provider="exampleTemplatedMailWebEventProvider" profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:00:00" custom="" /> </rules> </healthMonitoring> </system.web> <!-- Other configuration settings. --> </configuration>
Das provider-Attribut entspricht dem name-Attribut des providers-Elements im vorherigen Schritt. Das eventName-Attribut des rules-Attributs entspricht dem name-Attribute des vorkonfigurierten eventMappings-Elements in der Stammdatei Web.config. In dieser Konfiguration wird für jede Anforderung einer Seite oder einer anderen Ressource in der ASP.NET-Anwendung eine E-Mail-Nachricht gesendet.
Erstellen Sie die E-Mail-Vorlagendatei Template.aspx, und fügen Sie sie dem Stamm der Anwendung hinzu. Dieser Dateiname stellt den Wert des template-Attributs des providers-Elements dar. Wenn ein Anforderungsereignis in der Anwendung eintritt, wird die Vorlagendatei unter Verwendung von Zeichenfolgenausdrücken mit Daten gefüllt und als Benachrichtigungs-E-Mail gesendet. Informationen zum Verwenden von Ausdrücken finden Sie unter Übersicht über ASP.NET-Ausdrücke.
Nachfolgend finden Sie ein Beispiel für eine Vorlagendatei:
<%@ Page Language="cs" %> <%@ Import Namespace="System.Web.Management" %> <script > void Page_Load() { MailEventNotificationInfo info = TemplatedMailWebEventProvider.CurrentNotification; Label0.Text = "EventsDiscardedByBuffer: " + info.EventsDiscardedByBuffer + '\n'; Label1.Text = "EventsInBuffer: " + info.EventsInBuffer + '\n'; Label2.Text = "NotificationSequence: " + info.NotificationSequence + '\n'; Label3.Text = "NotificationType: " + info.NotificationType + '\n'; Label4.Text = "EventsInNotification: " + info.EventsInNotification + '\n'; Label5.Text = "EventsRemaining: " + info.EventsRemaining + '\n'; Label6.Text = "MessagesInNotification: " + info.MessagesInNotification + '\n'; Label7.Text = "eventsDiscardedDueToMessageLimit: " + info.EventsDiscardedDueToMessageLimit + '\n'; Label8.Text = "messageSequence: " + info.MessageSequence + '\n'; Label9.Text = "LastNotificationUtc: " + info.LastNotificationUtc.ToLocalTime().ToString() + '\n'; EventList.DataSource = info.Events; EventList.DataBind(); } </script> <asp:Label id="Label0" /><p /> <asp:Label id="Label1" /><p /> <asp:Label id="Label2" /><p /> <asp:Label id="Label3" /><p /> <asp:Label id="Label4" /><p /> <asp:Label id="Label5" /><p /> <asp:Label id="Label6" /><p /> <asp:Label id="Label7" /><p /> <asp:Label id="Label8" /><p /> <asp:Label id="Label9" /><p /> <asp:DataList id="EventList" > <ItemTemplate> Event Received Sequence: <%# DataBinder.Eval(Container.DataItem, "EventSequence") %><br> Details: <%# Container.DataItem.ToString() %> </ItemTemplate> </asp:DataList>
Überprüfen Sie die Konfiguration, indem Sie eine Seite von der Anwendung anfordern. Unmittelbar darauf sollten Sie eine E-Mail-Nachricht erhalten, deren Betreff und Meldungstext in etwa wie folgt aussehen:
Subject: Event Notification 1, part 1: <event> Body: EventsDiscardedByBuffer: 0 EventsInBuffer: 0 NotificationSequence: 1 NotificationType: Flush EventsInNotification: 1 EventsRemaining: 0 MessagesInNotification: 1 eventsDiscardedDueToMessageLimit: 0 messageSequence: 1 LastNotificationUtc: 1/1/0001 12:00:00 AM Event Received Sequence: 1 Details: <event information>
Siehe auch
Referenz
healthMonitoring-Element (ASP.NET-Einstellungsschema)
eventMappings-Element für healthMonitoring (ASP.NET-Einstellungsschema)
providers-Element für healthMonitoring (ASP.NET-Einstellungsschema)
rules-Element für healthMonitoring (ASP.NET-Einstellungsschema)
<smtp>-Element (Netzwerkeinstellungen)
Weitere Ressourcen
Übersicht über die ASP.NET-Systemüberwachung