No ASP.NET 2.0, os eventos podem ser monitorados usando o atributo healthMonitoring. O atributo healthMonitoring é um provedor baseado em método onde você pode construir seu próprio provedor. Utilizando o atributo healthMonitoring, podemos registrar erros, eventos bem-sucedidos, etc., para diferentes fontes de dados, como logs de eventos, Sql Server e até criar nossos próprios provedores herdando a classe WebEventProvider. Neste artigo, vou explicar como configurar um aplicativo Web que detecta erros do SqlServer e envia um email para o endereço de email de alguém. Primeiro, dê uma olhada no fragmento do programa healthMonitoring em web.config, onde você pode criar os eventos que usará.
<healthMonitoring Enabled="true|false" heartBeatInterval="intervalo de tempo">
<bufferModes>... </bufferModes>
<provedores>... </provedores>
<eventMappings>... </eventMappings>
<perfis>... </perfis>
<regras>... </regras>
</healthMonitoring>
Se você observar o elemento <healthMonitoring>, poderá determinar se pode definir o atributo como válido ou inválido e também pode especificar o intervalo de tempo para que WebHeaderBeatEvent seja despertado. healthMonitoring tem 5 filhos.
bufferModes, onde você pode definir o tamanho do buffer de um provedor.
Provedores, aqui descreve os Provedores que tratam do evento.
eventMappings, aqui você pode desenhar nomes de eventos relacionados a tipos de eventos amigáveis.
perfis, onde você define uma coleção de conjuntos de parâmetros que podem ser usados para configurar eventos.
regras, desenhe o gráfico de eventos dos Provedores aqui.
Você pode ler mais sobre esses elementos na documentação do VS 2550.
Antes de continuar, aqui está uma lista de alguns dos provedores em ASP.NET:
System.Web.Management.MailWebEventProvider
System.Web.Management.SimpleMailWebEventProvider
System.Web.Management.TemplatedMailWebEventProvider
System.Web.Management.TraceWebEventProvider
System.Web.Management.EventLogWebEventProvider
System.Web.Management.SqlWebEventProvider
System.Web.Management.WmiWebEventProvider
não precisa explicá-los, os nomes nos dizem o que fazem. Mencione também que o SqlWebEventProvider depende do servidor Sql para funcionar, que armazena eventos na tabela aspnet_Web_Event. Para instalar este banco de dados, o assistente aspnet_regsql.exe localizado na pasta do framework deve ser executado.
Agora, configure o programa para ter erro de login no provedor do servidor Sql e gerar erro ao enviar email.
A seguir está um exemplo de uso de SqlWebEventProvider e SimpleMailWebEventProvider para armazenar eventos de erro.
<healthMonitoring habilitado="true" heartBeatInterval="0">
<bufferModos>
<add name="Notificação crítica" maxBufferSize="100" maxFlushSize="20"urgentFlushThreshold="1" regularFlushInterval="Infinite" urgenteFlushInterval="00:01:00" maxBufferThreads="1"/> <
add name="Análise "maxBufferSize="1000" maxFlushSize="100" urgenteFlushThreshold="100"
regularFlushInterval="00:05:00" urgenteFlushInterval="00:01:00" maxBufferThreads="1"/>
</bufferModes>
<providers>
<add name="CriticalMailEventProvider" type="System.Web.Management.SimpleMailWebEventProvider, System.Web ..." [email protected] [email protected] prioridade="Alta" bodyHeader=" Aviso!"
bodyFooter="Por favor, investigue o mais rápido possível." subjectPrefix="Ação necessária." buffer="true" bufferMode="Critical Notification" maxEventLength="4096" maxSize="4096" maxMessagesPerNotification="1"/>
<add name="SqlWebEventProvider" type="System.Web.Management.SqlWebEventProvider, System.Web ..."
connectionStringName="LocalSqlServer" maxEventDetailsLength="1073741823" buffer="true"
bufferMode="Analysis"/>
</providers>
<eventMappings>
<add name="Todos os Erros" type="System.Web.Management.WebBaseErrorEvent, System.Web ..."/>
<add name="Erros de processamento de solicitação" type="System.Web.Management.WebRequestErrorEvent, System.Web .../>
</eventMappings>
<profiles>
<add name="Default" minInstances="1" maxLimit=" Infinito" minInterval="00:10:00"/>
</profiles>
<rules>
<add name="Todos os erros padrão" eventName="Todos os erros" provedor="SqlWebEventProvider" profile="Padrão"
minInterval="00:00:30"/>
<add name="Erros de processamento de solicitação" eventName="Erros de processamento de solicitação" Provider="CriticalMailEventProvider" profile="Default"/>
</rules>
</healthMonitoring>
Neste exemplo No , use o provedor SQL para registrar todos os eventos de erro e use o provedor de email para enviar uma mensagem quando o evento de erro de solicitação da Web for ativado.
Aqui estão alguns eventos lançados com 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
pode usar esses eventos para criar o perfil de um provedor. Você também pode criar seus próprios eventos herdados da classe WebBaseEvent.
Para ativar automaticamente um evento, você pode usar o método wakeup da classe WebBaseEvent:
try
{
//....
}
catch(Exceção e)
{
se (HealthMonitoringManager.Enabled)
{
WebBaseEvent.Raise(new WebErrorEvent("Minha mensagem de erro", null, 5000, e));
}
}
ou:
if (HealthMonitoringManager.Enabled)
{
Evento WebErrorEvent = new WebErrorEvent("Minha mensagem de erro", null, 5000, e);
evento.Raise();
}