В ASP.NET 2.0 события можно отслеживать с помощью атрибута healthMonitoring. Атрибут healthMonitoring — это поставщик на основе метода, в котором вы можете создать свой собственный поставщик. Используя атрибут healthMonitoring, мы можем записывать ошибки, успешные события и т. д. для разных источников данных, таких как журналы событий, Sql Server, и даже создавать собственных провайдеров, наследующих класс WebEventProvider. В этой статье я расскажу о настройке веб-приложения, которое обнаруживает ошибки SqlServer и отправляет электронное письмо на чей-то адрес электронной почты. Для начала взгляните на фрагмент программы healthMonitoring в web.config, где вы можете создавать события, которые будете использовать.
<healthMonitoring Enabled="true|false" heartBeatInterval="интервал времени">
<bufferModes>... </bufferModes>
<поставщики>... </поставщики>
<eventMappings>... </eventMappings>
<профили>... </профили>
<правила>... </правила>
</healthMonitoring>
Если вы посмотрите на элемент <healthMonitoring>, вы сможете определить, можете ли вы установить атрибут действительным или недействительным, а также указать временной интервал для пробуждения WebHeaderBeatEvent. У HealthMonitoring 5 детей.
bufferModes, где вы можете определить размер буфера провайдера.
Поставщики, здесь описаны поставщики, которые обрабатывают событие.
eventMappings, здесь вы можете рисовать названия событий, связанные с дружественными типами событий.
профили, в которых вы определяете набор наборов параметров, которые можно использовать для настройки событий.
правил, нарисуйте здесь график событий Провайдеров.
Подробнее об этих элементах можно прочитать в документации VS 2550.
Прежде чем продолжить, вот список некоторых поставщиков ASP.NET:
System.Web.Management.MailWebEventProvider.
System.Web.Management.SimpleMailWebEventProvider
System.Web.Management.TemplateMailWebEventProvider
System.Web.Management.TraceWebEventProvider
System.Web.Management.EventLogWebEventProvider
System.Web.Management.SqlWebEventProvider
System.Web.Management.WmiWebEventProvider
не нуждается в пояснении, имена говорят нам, что они делают. Также отметим, что SqlWebEventProvider использует для работы сервер Sql, который хранит события в таблице aspnet_Web_Event. Чтобы установить эту базу данных, необходимо запустить мастер aspnet_regsql.exe, расположенный в папке framework.
Теперь настройте программу так, чтобы она выдавала ошибку входа в систему для поставщика сервера Sql и генерировала ошибку при отправке электронного письма.
Ниже приведен пример использования SqlWebEventProvider и SimpleMailWebEventProvider для хранения событий ошибок.
<healthMonitoring Enabled="true" heartBeatInterval="0">
<bufferModes>
<add name="Критическое уведомление" maxBufferSize="100" maxFlushSize="20"urgentFlushThreshold="1" RegularFlushInterval="Infinite" UrgentFlushInterval="00:01:00" maxBufferThreads="1"/> <
add name="Анализ" " maxBufferSize="1000" maxFlushSize="100" UrgentFlushThreshold="100"
RegularFlushInterval="00:05:00" UrgentFlushInterval="00:01:00" maxBufferThreads="1"/>
</bufferModes>
<провайдеры>
<add name="CriticalMailEventProvider" type="System.Web.Management.SimpleMailWebEventProvider, System.Web ..." [email protected] [email protected] Priority="High" bodyHeader=" Предупреждение!"
,
изучите как можно скорее."
type="System.Web.Management.SqlWebEventProvider, System.Web ..."
ConnectionStringName="LocalSqlServer" maxEventDetailsLength="1073741823" buffer="true"
ufferMode="Анализ"/>
</providers>
<eventMappings>
<add name="Все ошибки" type="System.Web.Management.WebBaseErrorEvent, System.Web ..."/>
<add name="Ошибки обработки запросов" type="System.Web.Management.WebRequestErrorEvent, System.Web .../>
</eventMappings>
<profiles>
<add name="Default" minInstances="1" maxLimit=" Infinite" minInterval="00:10:00"/>
</profiles>
<rules>
<add name="Все ошибки по умолчанию" eventName="Все ошибки" поставщик="SqlWebEventProvider" Profile="По умолчанию"
minInterval="00:00:30"/>
<add name="Ошибки обработки запросов" eventName="Ошибки обработки запросов" поставщик="CriticalMailEventProvider" Profile="Default"/>
</rules>
</healthMonitoring>
В этом примере В используйте поставщика Sql для записи всех событий ошибок и используйте поставщика почты для отправки сообщения при пробуждении события ошибки веб-запроса.
Вот некоторые события, выпущенные в ASP .NET 2.0:
System.Web.Management.WebBaseEvent.
System.Web.Management.WebHeartBeatEvent
System.Web.Management.WebApplicationLifetimeEvent
System.Web.Management.WebRequestEvent
System.Web.Management.WebBaseErrorEvent
System.Web.Management.WebErrorEvent
System.Web.Management.WebRequestErrorEvent
System.Web.Management.WebAuditEvent
System.Web.Management.WebFailureAuditEvent
System.Web.Management.WebSuccessAuditEvent
System.Web.Management.WebManagementEvent
System.Web.Management.WebViewStateFailureAuditEvent
System.Web.Management.WebAuthenticationFailureAuditEvent
System.Web.Management.WebAuthenticationSuccessAuditEvent
может использовать эти события для профилирования поставщика. Вы также можете создавать свои собственные события, унаследованные от класса WebBaseEvent.
Чтобы автоматически активировать событие, вы можете использовать метод пробуждения класса WebBaseEvent:
попробуйте
{
//....
}
catch (исключение е)
{
если (HealthMonitoringManager.Enabled)
{
WebBaseEvent.Raise(new WebErrorEvent("Мое сообщение об ошибке", null, 5000, e));
}
}
или:
если (HealthMonitoringManager.Enabled)
{
Событие WebErrorEvent = new WebErrorEvent("Мое сообщение об ошибке", null, 5000, e);
событие.Поднять();
}