Usando Eventos de Monitoramento de Integridade do ASP.NET.
Você pode executar as seguintes tarefas para estender os recursos de monitoramento de integridade ASP.NET.
Crie uma classe de evento da Web personalizada através de herança dos tipos de eventos da Web padrão.Observe que se seu aplicativo herda de WebBaseEvent ou de WebBaseErrorEvent ele deve executar em confiança parcial.Para todos os outros eventos ele deve executado em confiança total.Para adicionar dados personalizados a um evento personalizado, substitua o método FormatCustomEventDetails.Não substitua o método ToString.Isso é para evitar sobrescrever ou violar informações confidenciais do sistema.Eventos personalizados devem ser disparados explicitamente chamando o método Raise.(Os eventos padrão podem ser gerados apenas pelo ASP.NET.) Para obter exemplos de código, consulte Como: Implementar e disparar Custom ASP.NET integridade Monitoring Events.
Personalize um tipo de evento padrão criando uma classe que implementa a interface IWebEventCustomEvaluator.
Crie um provedor personalizado para processar um evento, criando uma classe que herda da classe WebEventProvider ou BufferedWebEventProvider.Se o seu provedor executa o log, também pode usar a classe WebEventFormatter.Provedores de eventos personalizados podem ser usados para registrar eventos em um arquivo de log personalizado, enviar dados de evento para aplicativos de terceiros e assim por diante.Para obter exemplos de código, consulte Como: Implementar o integridade Monitoring Custom provedor Example.
Armazenando Eventos de Monitoramento de Integridade do ASP.NET.
Você pode configurar eventos de monitoramento de provedores para SQL e integridade de e-mail (SqlWebEventProvider, SimpleMailWebEventProvider e TemplatedMailWebEventProvider) para usar o armazenamento de eventos.Isso ajuda a reduzir o efeito no desempenho do aplicativo do envio frequente de mensagens de e-mail ou executar frequentes inserções no servidor SQL.Armazenando eventos de monitoramento de integridade, você também protege os servidores SMTP e SQL de cargas intensas que podem ser causadas por alto volume eventos.
Armazenamento do Provedor de Eventos SQL
Se você ativar armazenamento para o provedor de eventos SQL, o provedor armazena informações de evento de acordo com o modo de armazenamento especificado antes de inserir as informações de evento no banco de dados em um lote.
Por padrão, o provedor SqlWebEventProvider não está configurado para usar armazenamento.Sempre que um evento é disparado, suas informações imediatamente são inseridas no banco de dados.Você pode substituir essa configuração padrão, permitindo armazenamento em buffer no elemento Providers do arquivo Web.config onde o provedor SQL está especificado.Para fazer isso, configura-se o atributo buffer do elemento adicionar para true.Se você configurar seu próprio provedor SQL (ou seja, se você não usar SqlWebEventProvider), e se você não especificar um valor para o atributo buffer, o padrão é true.
Você pode personalizar o comportamento do buffer, selecionando um modo de buffer predefinido.Como alternativa, você pode adicionar elementos personalizados para a coleção bufferModes.Cada elemento define as propriedades, como o tamanho do buffer e a frequência para liberar o buffer.Em seguida, você pode configurar o provedor para usar um dos modos de buffer que você definiu.
O exemplo a seguir mostra as definições de configuração para o provedor de eventos SQL com o armazenamento em buffer ativado.
![]() |
---|
O elemento AnalysisbufferModes já está configurado no arquivo raiz Web.config e não tem que ser declarado novamente em um arquivo Web.config no nível do aplicativo.O elemento SqlWebEventProviderproviders também é configurado no arquivo raiz Web.config, mas o atributo buffer é definido como false e o atributo bufferMode é definido como Notification.Portanto, o elemento providers que é mostrado no exemplo deve ser declarado em um arquivo Web.config no nível do aplicativo.Você também deve usar um elemento Limpar ou Remover para remover a configuração de nível mais alto para o provedor SqlWebEventProvider. |
No exemplo, o provedor de eventos SQL é configurado para usar o modo Analysis de buffer quando o buffer estiver ativado, que é definido no elemento bufferModes.Nesse modo, o provedor libera as informações de evento a cada 5 minutos.Ele libera até 100 eventos por notificação e armazena até 1000 eventos no caso de um aumento repentino na frequência de eventos.O provedor garante não enviar os eventos mais frequentemente que uma vez a cada minuto.
<healthMonitoring>
<providers>
<clear/>
<add
ConnectionStringName="LocalSqlServer"
maxEventDetailsLength="1073741823"
buffer="true"
bufferMode="Analysis"
name="SqlWebEventProvider"
type="System.Web.Management.SqlWebEventProvider,System.Web, Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"
/>
</providers>
<bufferModes>
<add
name="Analysis"
maxBufferSize="1000"
maxFlushSize="100"
urgentFlushThreshold="100"
regularFlushInterval="00:05:00"
urgentFlushInterval="00:01:00"
maxBufferThreads="1"
/>
</bufferModes>
</healthMonitoring>
Armazenamento do Provedor de Eventos de E-mail
Se você ativar armazenamento em buffer para os provedores de eventos de e-mail, o armazenador dos provedores dispara os eventos antes que de enviarem mensagens e-mail com notificações de evento.Se você configurar um provedor de eventos de e-mail e você não especificar um valor para o atributo buffer do elemento adicionar para provedor de eventos de e-mail, o padrão é true.Você pode desativar armazenamento definindo o atributo buffer como false.
Você pode personalizar o comportamento do buffer, selecionando um modo de buffer predefinido.Como alternativa, você pode adicionar elementos personalizados para a coleção bufferModes.Cada elemento define as propriedades, como o tamanho do buffer e a frequência para liberar o buffer.Em seguida, você pode configurar o provedor para usar um dos modos de buffer que você definiu.É recomendável que você use o modo CriticalNotification.
O exemplo a seguir mostra as definições de configurações para os provedores de eventos de e-mail com o armazenamento em buffer desativado para a classe SimpleMailWebEventProvider e ativado para a classe TemplatedMailWebEventProvider.O provedor TemplatedMailWebEventProvider está configurado para usar o modo de armazenamento CriticalNotification, que já está configurado no arquivo raiz Web.config.No modo CriticalNotification, o provedor tenta liberar todas as informações de evento, assim que os eventos são recebidos.No entanto, a tentativa de liberação não funcionará com mais frequência do que a cada minuto para evitar colocar uma carga pesada no servidor de email.As mensagens são de tamanho gerenciável.As informações são para 20 eventos no máximo.
Se o sistema de monitoramento de integridade receber mais informações de evento que o máximo permitido, os eventos mais antigos são ignorados quando novos eventos são gerados.O sistema de monitoramento de integridade tenta evitar cancelamento de eventos, liberando com mais frequência quando o buffer está ficando cheio.No entanto, ele não tentará enviar quaisquer informações para eventos se eles tiverem sido interrompidos.(No entanto, ele inclui notificação na próxima liberação de eventos que foram descartados). Os eventos mais recentes serão atrasados em mais cinco minutos se o provedor ficar sob carga pesada, supondo que eles não sejam ignorados por causa de um buffer cheio.
<healthMonitoring>
<providers>
<!-- mail provider with attributes that are always relevant -->
<add
name="SimpleMailWebEventProvider"
type="System.Web.Management.SimpleMailWebEventProvider"
to="SystemAdministrator@contoso.com"
from="HealthMonitoring@contoso.com"
buffer="false"
/>
<!-- mail provider with attributes that are relevant only
when buffering is enabled -->
<add
name="SampleTemplatedMailWebEventProvider"
type="System.Web.Management.TemplatedMailWebEventProvider"
to="SystemAdministrator@contoso.com"
from="HealthMonitoring@contoso.com"
buffer="true"
bufferMode="Critical Notification"
template="Template.aspx" />
</providers>
<bufferModes>
<add
name="Critical Notification"
maxBufferSize="100" maxFlushSize="20"
urgentFlushThreshold="1"
regularFlushInterval="Infinite"
urgentFlushInterval="00:01:00"
maxBufferThreads="1"
/>
</bufferModes>
</healthMonitoring>
Para o exemplo funcionar, você deve configurar um servidor SMTP no arquivo de configuração, conforme mostrado no exemplo o seguir.
<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network
defaultCredentials="true"
host="127.0.0.1"
port="25"
username="username"
password="password" />
</smtp>
</mailSettings>
</system.net>
Para obter mais informações, consulte < mailSettings > Elemento (configurações de rede).
![]() |
---|
Não há riscos de segurança associados em armazenar senhas de texto não criptografadas em um arquivo de configuração.Se você mantiver credenciais no arquivo de configuração, você deve criptografar o conteúdo do elemento de configuração <processModel> usando configuração protegida.Para obter mais informações, consulte Criptografando informações de configuração usando configuração protegida. |
Configurações do Modo de Armazenamento
Você pode definir os seguintes atributos do elemento adicionar no elemento bufferModes para especificar o comportamento do buffer:
regularFlushInterval As informações de eventos regulares liberam intervalo.
urgentFlushThreshold O número de eventos cujas informações devem ser armazenadas em buffer antes que o buffer seja liberado.
As configurações a seguir especificam as garantias feitas pelo provedor para o receptor de eventos.
maxBufferSize O número máximo de eventos cujas informações o buffer manterá.Se o número de eventos no buffer puder exceder esse valor, os eventos mais antigos serão descartados.
maxFlushSize O número máximo de eventos cujas informações o provedor irá liberar de cada vez.
urgentFlushInterval O tempo mínimo em que o provedor aguardará antes de executar outra liberação urgente.Se a hora representada pela propriedade urgentFlushInterval não passou desde a última liberação, mas o buffer estiver cheio, informações de eventos mais antigos são descartadas do buffer.O provedor mantém registro de quantos eventos foram descartados e inclui um aviso na próxima notificação de evento.
Usando WMI para Rastrear ASP.NET Eventos de Monitoramento de Integridade
Uma maneira para monitorar os eventos de integridade do ASP.NET é usar o provedor de eventos Instrumento de Gerenciamento do Windows (WMI), a classe WmiWebEventProvider.Este provedor converte eventos de monitoramento de integridade (eventos da Web) para eventos WMI.WMI fornece um modelo padrão de objeto em que as entidades que você deseja monitorar possam ser representadas como objetos.Essas entidades representam computadores, placas de rede, impressoras, aplicativos de software e assim por diante.As entidades são mapeadas no modelo de objeto WMI para que eles possam ser monitorados por aplicativos personalizados.A ilustração a seguir mostra a relação entre os eventos da Web ASP.NET, WMI e um aplicativo do consumidor que escuta eventos WMI.
Relação entre o ASP.NET e o WMI
Conexão Entre Eventos de Saúde e WMI
Monitoramento de integridade ASP.NET fornece a infraestrutura para a conexão entre eventos de saúde e WMI.Ele faz isso mapeando esses eventos para as classes WMI para que elas possam ser tratadas como objetos WMI.Ele também oferece o suporte para processamento de eventos de integridade e distribuição para o sistema WMI.Para obter detalhes sobre como mapear os eventos do ASP.NET para WMI, consulte Demonstra Passo a passo: Ouvindo eventos WMI no ASP.NET integridade Monitoring.Para obter mais informações sobre o Instrumentação de Gerenciamento do Windows, consulte Windows Management instrumentação no site do MSDN.
A lista a seguir descreve as etapas que são necessárias para monitorar eventos de integridade com WMI:
Defina o mapeamento entre as classes de evento da Web e objetos WMI.Essa etapa já é feita para você para cada classe padrão de evento da Web.Esses mapeamentos são contidos no arquivo formato MOF (MOF) para ASP.NET, < versão > %SystemRoot%\Microsoft.NET\Framework\ \ASPNET.mof do arquivo.
Observação:
Todos os eventos personalizados são mapeados para o tipo de evento base em WMI.Não é possível mapear um evento personalizado de monitoramento de integridade ASP.NET para um evento WMI arbitrário.
Por exemplo, o código a seguir mostra a definição de classe WMI mapeada para o tipo WebHeartbeatEvent.
class HeartbeatEvent : ManagementEvent { /* * ProcessStatistics */ DATETIME ProcessStartTime; sint32 ThreadCount; sint64 WorkingSet; sint64 PeakWorkingSet; sint64 ManagedHeapSize; sint32 AppdomainCount; sint32 RequestsExecuting; sint32 RequestsQueued; sint32 RequestsRejected; };
Para obter mais informações sobre os arquivos MOF, consulte Managed Object Format in the SDK DO WMI no MSDN.
Defina um provedor de monitoramento de integridade ASP.NET que processará os eventos.
O provedor padrão é a classe WmiWebEventProvider.Por padrão, isso já está configurado na seção healthMonitoring do arquivo raiz Web.config usando o seguinte elemento:
<providers> <add name="WmiWebEventProvider" type="System.Web.Management.WmiWebEventProvider,System.Web, Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" /> </providers>
Insira as configurações apropriadas na seção healthMonitoring do arquivo de configuração para criar a associação entre classes de evento da Web e o provedor de eventos WMI, a classe WmiWebEventProvider.
Por padrão, o provedor de eventos WMI não se inscreve para nenhum evento da Web.Você pode usar os seguintes elementos em um arquivo Web.config no nível do aplicativo para inscrever o provedor de eventos WMI para todos os eventos da Web.Por padrão, o tipo de evento All Events é configurado no elemento eventMappings no arquivo raiz Web.config.Ele é mapeado para a classe WebBaseEvent.
<rules> <add name="Testing Wmi" eventName="All Events" provider="WmiWebEventProvider" profile="Critical" /> </rules>
Criar um aplicativo para escutar eventos WMI, ou usar um aplicativo de terceiros.
O exemplo de código em Demonstra Passo a passo: Ouvindo eventos WMI no ASP.NET integridade Monitoring cria um aplicativo de console que exibe informações sobre eventos sempre que é gerado um evento da Web.
Personalizando a Infraestrutura de Eventos da Integridade WMI
Quando ocorre um evento da Web, monitoramento da integridade ASP.NET distribui-o ao objeto WmiWebEventProvider.O objeto do provedor processa o evento e preenche os dados apropriados de acordo com a definição da classe relacionada ao MOF.O provedor, em seguida, distribui esses dados para o sistema WMI, usando uma chamada para código não gerenciado.
A única opção de personalização para enviar os eventos da Web para WMI é se você criar um aplicativo personalizado que consome monitorando de eventos de integridade ASP.NET após eles serem emitidos como eventos WMI.Nesse caso, a única alteração de configuração que você precisará fazer é configurar um novo elemento rules conforme listado anteriormente.Seu aplicativo escutará pelos eventos da integridade do ASP.NET no formulário de eventos WMI, como emitido pelo sistema operacional.Para obter mais informações, consulte Demonstra Passo a passo: Ouvindo eventos WMI no ASP.NET integridade Monitoring.
![]() |
---|
Você não pode estender a classe WmiWebEventProvider.As únicas classes provedoras de eventos que você pode estender são as classes WebEventProvider e BufferedWebEventProvider. |
Implementando o monitorando de integridadede eventos e provedores personalizados no ASP.NET
Por padrão, alguns eventos já são capturados nos contadores de desempenho, capturados no log de eventos ou enviadas para o sistema de rastreamento do ASP.NET.Você pode ativar outros eventos, mapeando-los para provedores existentes.Para obter mais informações, consulte a seção " consumindo da Eventos com Evento Fornecedores " em Visão Geral do Monitoramento da Integridade do ASP.NET.
Se nenhum dos eventos da Web ou provedores das classes existentes atenderem às suas necessidades, você pode estendê-los.A tabela a seguir lista maneiras que você pode personalizar o monitoramento da integridade ASP.NET.
Tarefa |
Implementação |
Exemplo |
---|---|---|
Criar uma classe de Evento da Web personalizada. |
Crie uma classe que herda de WebBaseEvent e implementa o método virtual Raise.Para adicionar dados personalizados a um evento personalizado, substitua o método FormatCustomEventDetails. |
Como: Implementar e disparar Custom ASP.NET integridade Monitoring Events |
Criar um provedor de evento personalizado para processar um evento da Web interna ou personalizada. |
Crie uma classe que herda da classe WebEventProvider (ou uma das classes derivadas).Se o seu provedor executa o log, também herda da classe WebEventFormatter. |
Como: Implementar o integridade Monitoring Custom provedor Example |
Consulte também
Tarefas
Como: bloquear ASP.NET configuração Settings
Conceitos
Visão Geral do Monitoramento da Integridade do ASP.NET
Visão Geral da Configuração ASP.NET
Referência
bufferModes elemento para healthMonitoring (ASP.NET Settings Esquema)
provedores de elemento para healthMonitoring (ASP.NET Settings Esquema)