O ASP.NET 2.0 também fornece monitoramento completo de aplicativos e monitoramento de integridade. O sistema é composto por um modelo de eventos totalmente extensível e um mecanismo de eventos que pode enviar eventos para uma variedade de receptores. Por exemplo, você pode configurar seu aplicativo ASP.NET para enviar um email diário indicando que o servidor está em execução e incluindo a quantidade de memória disponível. Da mesma forma, você pode criar um evento de integridade vinculado a uma exceção não tratada. Conteúdo de exceção, cabeçalhos de solicitação e hora e data podem ser enviados para um banco de dados de registro de erros.
O ASP.NET 2.0 inclui eventos integrados, incluindo pulsações, eventos de vida útil do aplicativo (iniciar/parar/compilar) e eventos de interceptação de erros (exceções não tratadas). No entanto, você pode facilmente construir sobre essas classes base para recriar e gerar seus próprios eventos a partir de seu aplicativo. Por exemplo, você pode criar um evento personalizado para registrar quando o centésimo usuário clica em um link específico.
O recurso realmente poderoso do sistema de monitoramento de integridade do ASP.NET 2.0 é que ele é totalmente configurável por meio dos arquivos web.config e machine.config. Usando XML normal, você pode definir eventos, definir provedores (receptores de eventos) e enviar eventos específicos para provedores específicos.
Criando Eventos Os eventos são semelhantes em estrutura às exceções. Em outras palavras, a classe de evento em si quase não tem funcionalidade, exceto como contêiner de mensagens. Em termos de monitoramento de integridade, todos os eventos herdam de System.Web.Management.WebBaseEvent. No entanto, você também pode derivar de classes base de alto nível usadas para fins especializados, como coletar dados de solicitação HTTP ou manipular exceções.
Listagem 4. Eventos customizados
usando System;
usando System.Web.Management;
classe pública CustomEvent: WebBaseEvent;
{
public const int EventCode = WebEventCodes.WebExtendedBase + 10;
public MyEvent(string mensagem, objeto eventSource)
: base(mensagem, eventSource, EventCode)
{ }
}
A parte mais importante da criação de um evento personalizado é fornecer um EventCode exclusivo. Todos os códigos de eventos integrados estão na enumeração WebEventCodes. Os eventos personalizados devem ter números começando em WebEventCodes.WebExtendedBase + 1. Fora isso, a única tarefa comum na criação de eventos personalizados é inicializar o evento corretamente.
Usando eventos Embora os eventos integrados sejam disparados automaticamente, você pode adicionar código ao seu aplicativo para disparar eventos personalizados a qualquer momento.
Listagem 5. Gerando um evento
<script runat="server">
void Page_Load (remetente do objeto, EventArgs e)
{ // Gera um evento personalizado MyEvent myEvent =
new MyEvent("carregando página de amostra do webevent", this);
</script>
Ao gerar um evento a partir de uma página ASP.NET, basta criar uma nova instância do evento e executar o método Raise(). O método Raise() entrega automaticamente a instância do evento ao mecanismo de monitoramento de integridade. O mecanismo então mapeia o evento para perfis e provedores e transfere o evento para o provedor correto. Em última análise, o provedor entrega o evento ao receptor correto.
Configurando o monitoramento de integridade O monitoramento de integridade é configurado em uma nova área no arquivo machine.Config ou Web.Config. Você pode configurar a seção para configurar uma pulsação da web que reporte periodicamente o status do aplicativo. Você também pode configurar seu aplicativo para gerar eventos e transmiti-los por meio de vários provedores.
A configuração de eventos deve identificar cada evento na área de mapeamento de eventos. Os eventos são identificados por um nome exclusivo e um tipo completo. O nome do evento é usado como link na área de regras.
Listagem 6. Área de mapeamento de eventos
<!-- Os mapeamentos de eventos definem os eventos que são monitorados -->
<eventMappings>
<add name="SampleWebRequests"
type="Samples.AspNet.SampleWebRequestEvent, SampleWebRequestEvent,
Versão = 0.0.0.0, Cultura = neutra, PublicKeyToken = f0c63b9a560d5e5a"/>
</eventMappings>
O ASP.NET 2.0 vem com vários eventos integrados, configurados com os seguintes nomes:
• Todos os eventos. Todos os nomes de eventos capturam qualquer WebBaseEvent. Essa classe de evento é um amplo resumo para cada evento capturado pelo sistema de monitoramento de funcionamento.
• Batimento cardíaco. Os eventos de pulsação usam WebHeartBeatEvent para fornecer notificações periódicas sobre o status de um aplicativo Web.
• Eventos de vida útil do aplicativo. Os eventos de vida útil do aplicativo incluem iniciar e parar o aplicativo e recompilar parte ou todo o aplicativo. Esses eventos são baseados em WebApplicationLifetimeEvent e relatam a data, a hora e o status atual quando o evento vitalício ocorre.
• Todos os erros. A categoria Todos os Erros coleta quaisquer anomalias ou erros detectados pelo sistema. Esses eventos são baseados em WebBaseErrorEvent.
• Erros de infraestrutura. Use WebErrorEvent para detectar erros relacionados ao tempo de execução do ASP.NET ou IIS. Esses eventos são subclasses de todas as categorias de erros e são relevantes principalmente para administradores de sistema, e não para desenvolvedores de aplicativos.
• Erro no processamento da solicitação. Qualquer erro ou exceção que ocorra durante a solicitação aciona um WebRequestErrorEvent. Este evento registra a solicitação recebida e os erros associados ao processamento da solicitação. Erros de processamento de solicitações também são um subconjunto de todas as categorias de erros.
• Todas as revisões. Você pode usar um sistema de monitoramento de integridade para fornecer tentativas de auditoria por meio de WebAuditEvents. Este evento registra automaticamente as ações de usuários ativos em uma aplicação web. Se você estiver usando representação, os eventos de auditoria ajudarão você a controlar quem está usando seu aplicativo e como eles estão sendo usados.
• Auditoria de falhas. WebFailureAuditEvent é um tipo de evento de auditoria especial que é acionado quando um usuário tenta fazer login no seu site com um nome de usuário ou senha inválidos. Este evento também ocorre quando um usuário não pode ser autenticado para o recurso especificado.
• Revisão bem-sucedida. WebSuccessAuditEvent é a contrapartida de um evento de falha que ocorre sempre que o usuário se autenticou ou executou alguma outra ação que requer log de auditoria.
Eventos personalizados são fáceis de criar, embora seja necessário adicionar código ao seu aplicativo para acionar o evento.
Configurando Provedores Cada provedor deve ser registrado em um arquivo de configuração. O registro de um provedor requer o nome e o tipo exclusivos do aplicativo. Este tipo contém o nome forte completo da classe de provedor real. O nome do provedor é usado como link na área de regras.
Listagem 7. Provedor
<healthMonitoring Enabled="true" heartBeatInterval="0">
<!-- Os provedores vinculam eventos de saúde a vários alvos, como WMI ou e-mail SMTP -->
<provedores>
<add name="WmiEventProvider" type="System.Web.Management.WebWmiEventProvider,
System.Web,Versão=1.2.3400.0,Cultura=neutro, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
O ASP.NET 2.0 vem com provedores para WMI, Windows Event Monitor, e-mail SMTP e bancos de dados SQL Server. Ao estender a classe base correta, você pode criar provedores customizados para conectar-se a outros receptores de eventos.
Mapeando eventos para provedores
A etapa final na configuração do monitoramento de funcionamento é conectar eventos a provedores com regras. As regras fornecem um link entre um bom nome de evento, classe de evento, provedor e perfil ou categoria de evento. Você também pode usar regras para definir um intervalo de tempo mínimo para acionar eventos específicos.
Listagem 8. Regras
<!-- As regras vinculam eventos a provedores e perfis e definem intervalos para verificação de eventos -->
<regras>
<add name="Eventos de banco de dados personalizados" eventName="CustomDBEvents"
provedor="WmiEventProvider" profile="Banco de dados" minInterval="00:01:00" />
<add name="Solicitações padrão da Web" eventName="Todos os eventos"
provedor="SqlEventProvider" profile="Default" minInterval="00:01:00" /> </rules>
</healthMonitoring>
As regras executam diversas tarefas diferentes configuradas por diferentes propriedades:
• nome. O nome da regra é o nome amigável que aparece quando o evento é enviado ao destinatário.
• nomedoevento. eventName mapeia para um evento configurado na zona.
• provedor. Provedor é um link para o provedor configurado na zona. Quaisquer eventos que correspondam a esta regra serão entregues através deste fornecedor aos destinos suportados por este fornecedor. Por exemplo, System.Web.Management.SqlWebEventProvider grava eventos automaticamente em um banco de dados SQL Server.
• perfil. Diferentes provedores usam propriedades de perfil como filtros para exibir eventos. Por exemplo, um provedor de e-mail pode enviar uma mensagem imediata para qualquer evento com perfil “urgente”, mas também pode enviar apenas um e-mail diário com uma compilação de eventos de perfil “rotineiros” para aquele dia.
• minIntervalo. Alguns eventos, como pulsações, devem ser acionados no menor intervalo de tempo possível. Você pode usar esta propriedade para configurar o intervalo mínimo de eventos.
Esta área de configuração permite configurar vários eventos relacionados à saúde e mapear os eventos para vários provedores. Por exemplo, você pode configurar uma pulsação que envia um evento WMI a cada 10 minutos. Da mesma forma, você pode configurar um alerta por e-mail para quaisquer exceções não detectadas.
Artigos relacionados:
http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B893664
http://blog.csdn.net/dshpsky/archive/2006/06/18/810893.aspx