Практическое руководство. Отправка электронной почты для извещений мониторинга работоспособности
Обновлен: Ноябрь 2007
Можно настроить приложение ASP.NET для отправки уведомлений по электронной почте при возникновении веб-события наблюдения за работоспособностью ASP.NET. Для этого можно настроить один из доступных поставщиков веб-событий электронной почты.
Система наблюдения за работоспособностью ASP.NET поставляется с несколькими поставщиками событий, получающими данные веб-события наблюдения за работоспособностью. Только поставщики событий EventLogWebEventProvider, SqlWebEventProvider и WmiWebEventProvider сконфигурированы в корневом файле Web.config. Этот раздел описывает, как добавить параметры конфигурации для поставщиков веб-событий электронной почты и как включить прослушивание определенных событий этими поставщиками.
Список веб-событий, которые может прослушивать поставщик, содержится в элементе <eventMappings> в корневом файле Web.config, или в теме "Веб-события" раздела ASP.NET Health Monitoring Overview.
Отправка электронной почты из веб-приложения
Примеры кода этого раздела требуют настройки веб-приложения для отправки сообщений электронной почты. В следующей процедуре показано, как настроить приложение, если служба простого протокола передачи почты (SMTP) установлена и настроена на веб-сервере, и имеется доступ к SMTP-серверу, который может доставлять сообщения электронной почты. Дополнительные сведения см. в разделе Практическое руководство. Установка и настройка виртуальных серверов SMTP в IIS 6.0.
Настройка приложения ASP.NET для отправки электронной почты
Откройте файл Web.config приложения и настройте элемент <mailSettings> в разделе <System.Net>. Необходимо задать метод доставки в атрибуте deliveryMethod элемента <SMTP> и имя SMTP-сервера в атрибуте host элемента <network>. Кроме того, рекомендуется установить атрибут 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.config приложения и добавьте новый элемент <providers> в элемент <healthMonitoring> раздела <system.web>. Этот новый элемент providers является местом, где будет происходить настройка поставщика веб-события SimpleMailWebEventProvider. Этот поставщик входит в систему наблюдения за работоспособностью 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 на собственный адрес электронной почты для выполнения последующих шагов тестирования в этой процедуре.
Добавьте новый элемент <rules> в элемент <healthMonitoring>. Этот новый элемент rules настраивает поставщиков электронной почты для прослушивания всех веб-событий.
Параметры конфигурации могут выглядеть так, как показано в следующем примере:
<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 совпадает с атрибутом name элемента providers на предыдущем шаге. Атрибут eventName этого элемента rules совпадает с именем атрибута предварительно сконфигурированного элемента eventMappings в корневом файле Web.config. Эта конфигурация будет отправлять сообщение электронной почты для каждого веб-события, возникающего в приложении ASP.NET. Включая запуск приложения, остановку, изменения конфигурации и запросы, но не ограничиваясь только ими.
В целях этой процедуры определите элементы 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.config приложения и добавьте новый элемент <providers> в элемент <healthMonitoring> раздела <system.web>. Этот новый элемент providers является местом, где будет происходить настройка поставщика веб-события TemplatedMailWebEventProvider. Этот поставщик входит в систему наблюдения за работоспособностью 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. Значение Notification атрибута bufferMode предварительно определено в корневом файле Web.config. За дополнительными сведениями о буферизации обратитесь к разделу Расширение событий мониторинга состояния ASP.NET.
Атрибут name является произвольным и используется для идентификации поставщика на следующем шаге. Измените атрибуты to и from на собственный адрес электронной почты для выполнения последующих шагов тестирования в этой процедуре.
Добавьте новый элемент <rules> в элемент <healthMonitoring>. Этот новый элемент rules настраивает поставщиков электронной почты для прослушивания всех веб-событий.
Параметры конфигурации могут выглядеть так, как показано в следующем примере:
<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 совпадает с атрибутом name элемента providers на предыдущем шаге. Атрибут eventName этого атрибута rules совпадает с атрибутом name предварительно сконфигурированного элемента eventMappings в корневом файле Web.config. Эта конфигурация отправит сообщение электронной почты для каждого запроса, сделанного на странице или другом ресурсе в приложении ASP.NET.
Создайте файл шаблона электронной почты с именем Template.aspx и поместите его в корневую папку приложения. Имя файла является значением атрибута template элемента providers. При возникновении в приложении события запроса файл шаблона заполняется данными с использованием строковых выражений и отправляется как сообщение уведомления электронной почты. Сведения об использовании выражений см. в разделе Общие сведения о выражениях 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)
Элемент eventMappings для элемента healthMonitoring (схема параметров ASP.NET)
Элемент providers для элемента healthMonitoring (схема параметров ASP.NET)
Элемент rules для элемента rules для элемента healthMonitoring (схема параметров ASP.NET)
Элемент <smtp> (параметры сети)
Другие ресурсы
ASP.NET Health Monitoring Overview