如何:发送运行状况监视通知电子邮件
更新:2007 年 11 月
可以将某个 ASP.NET 应用程序配置为在发生 ASP.NET 运行状况监视 Web 事件时发送电子邮件通知。为此,可以配置一个可用的电子邮件 Web 事件提供程序。
ASP.NET 运行状况监视系统随附有几个事件提供程序,它们使用运行状况监视 Web 事件数据。在根 Web.config 文件中只能预先配置 EventLogWebEventProvider、SqlWebEventProvider 和 WmiWebEventProvider 事件提供程序。本主题介绍如何为电子邮件 Web 事件提供程序添加配置设置以及如何使这些提供程序侦听某些事件。
有关提供程序可以侦听的 Web 事件的列表,请参见根 Web.config 文件中的 <eventMappings> 元素,或者参见 ASP.NET 运行状况监视概述 中的“Web 事件”部分。
从 Web 应用程序发送电子邮件
本主题中的代码示例要求将 Web 应用程序配置为发送电子邮件。以下过程说明在下面的情况中如何配置应用程序:在 Web 服务器上安装并配置了简单邮件传输协议 (SMTP) 服务,并且可以访问可传递电子邮件的 SMTP 服务器。有关更多信息,请参见如何:在 IIS 6.0 中安装和配置 SMTP 虚拟服务器。
将 ASP.NET 应用程序配置为发送电子邮件
打开对应于您的应用程序的 Web.config 文件,并配置 <system.net> 节内的 <mailSettings> 元素。需要在 <smtp> 元素的 deliveryMethod 属性中指定传递方法,并在 <network> 元素的 host 属性内指定 SMTP 服务器的名称。另外建议您将 defaultCredentials 属性设置为 true。(其他属性在元素主题中加以说明。)
您的配置设置看起来可能类似于下面的示例。
<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>
配置邮件提供程序
配置 SimpleMailWebEventProvider Web 事件提供程序
打开对应于您的应用程序的 Web.config 文件,并在 <system.web> 节的 <healthMonitoring> 元素内添加新的 <providers> 元素。这一新 providers 元素是您配置 SimpleMailWebEventProvider Web 事件提供程序之处。此提供程序包含在 ASP.NET 运行状况监视系统中,但它没有在根 Web.config 文件中为您预先配置。
您的配置设置看起来可能类似于下面的示例。
<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>
为达到此过程的目的,请将 buffer 属性设置为 false 以禁用事件缓冲。name 属性是任意的,它用于标识下一步中的提供程序。将 to 和 from 属性更改为您自己的电子邮件地址,以完成此过程后面部分中的测试步骤。
在 <healthMonitoring> 元素内添加新的 <rules> 元素。这一新 rules 元素将电子邮件提供程序配置为侦听所有 Web 事件。
您的配置设置看起来可能类似于下面的示例。
<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>
provider 属性与上一步中 providers 元素的 name 属性相同。此 rules 元素的 eventName 属性与在根 Web.config 文件中预先配置的 eventMappings 元素的 name 属性相同。此配置将为您的 ASP.NET 应用程序中发生的每个 Web 事件发送电子邮件。其中包括但不限于应用程序启动和停止、配置更改以及请求。
为达到此过程的目的,请在同一个配置文件内定义上一步中的 rules 元素和 provider 元素。provider 元素还可以存在于配置文件链中朝向根 Web.config 文件的高端配置文件中。
从您的应用程序中请求页面来测试配置。如果您更改了配置设置(这将引发应用程序重新启动事件),则有可能已经收到电子邮件。收到的电子邮件可能有类似于下面的示例邮件的一个主题行和邮件正文。
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 --------------- ---------------
配置 TemplatedMailWebEventProvider Web 事件提供程序
打开对应于您的应用程序的 Web.config 文件,并在 <system.web> 节的 <healthMonitoring> 元素内添加新的 <providers> 元素。这一新 providers 元素是您配置 TemplatedMailWebEventProvider Web 事件提供程序之处。此提供程序包含在 ASP.NET 运行状况监视系统中,但它没有在根 Web.config 文件中为您预先配置。
您的配置设置看起来可能类似于下面的示例。
<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>
为达到此过程的目的,请将 buffer 属性设置为 false 以禁用事件缓冲。根 Web.config 文件中预先定义了 bufferMode 属性值 Notification。有关缓冲的更多信息,请参见 扩展 ASP.NET 运行状况监视事件。
name 属性是任意的,它用于标识下一步中的提供程序。将 to 和 from 属性更改为您自己的电子邮件地址,以完成此过程后面部分中的测试步骤。
在 <healthMonitoring> 元素内添加新的 <rules> 元素。这一新 rules 元素将电子邮件提供程序配置为侦听所有 Web 事件。
您的配置设置看起来可能类似于下面的示例。
<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>
provider 属性与上一步中 providers 元素的 name 属性相同。此 rules 元素的 eventName 属性与在根 Web.config 文件中预先配置的 eventMappings 元素的 name 属性相同。此配置将为您的 ASP.NET 应用程序中向页面或其他资源发出的每个请求发送电子邮件。
创建一个名为 Template.aspx 的电子邮件模板文件,并将它放在应用程序的根目录中。此文件名是 providers 元素的 template 属性值。当应用程序中发生请求事件时,将使用字符串表达式向此模板文件填充数据,并将该文件作为通知电子邮件发送。有关使用表达式的信息,请参见 ASP.NET 表达式概述。
您的模板文件看起来可能类似于下面的示例。
<%@ Page Language="cs" %> <%@ Import Namespace="System.Web.Management" %> <script runat="server"> 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 runat="server" id="Label0" /><p /> <asp:Label runat="server" id="Label1" /><p /> <asp:Label runat="server" id="Label2" /><p /> <asp:Label runat="server" id="Label3" /><p /> <asp:Label runat="server" id="Label4" /><p /> <asp:Label runat="server" id="Label5" /><p /> <asp:Label runat="server" id="Label6" /><p /> <asp:Label runat="server" id="Label7" /><p /> <asp:Label runat="server" id="Label8" /><p /> <asp:Label runat="server" id="Label9" /><p /> <asp:DataList id="EventList" runat="server"> <ItemTemplate> Event Received Sequence: <%# DataBinder.Eval(Container.DataItem, "EventSequence") %><br> Details: <%# Container.DataItem.ToString() %> </ItemTemplate> </asp:DataList>
从您的应用程序中请求页面来测试配置。您应该很快收到一封电子邮件,其中包含类似于下面的示例邮件的一个主题行和邮件正文。
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>
请参见
参考
healthMonitoring 元素(ASP.NET 设置架构)
healthMonitoring 的 eventMappings 元素(ASP.NET 设置架构)
healthMonitoring 的 providers 元素(ASP.NET 设置架构)
healthMonitoring 的 rules 元素(ASP.NET 设置架构)