Rastreamento analítico WCF

O exemplo WCFAnalyticTracingExtensibility demonstra como adicionar seus próprios eventos de rastreamento ao fluxo de rastreamentos analíticos que o Windows Communication Foundation (WCF) grava no ETW no .NET Framework. Os rastreamentos analíticos destinam-se a facilitar a obtenção de visibilidade dos seus serviços sem pagar uma penalidade de alto desempenho. Este exemplo mostra como usar as System.Diagnostics.Eventing APIs para escrever eventos que se integram aos serviços WCF.

Para obter mais informações sobre as System.Diagnostics.Eventing APIs, consulte System.Diagnostics.Eventing.

Para saber mais sobre o rastreamento de eventos no Windows, consulte Melhorar a depuração e o ajuste de desempenho com o ETW.

Descartando EventProvider

Este exemplo usa a classe, que implementa System.Diagnostics.Eventing.EventProviderSystem.IDisposableo . Ao implementar o rastreamento para um serviço WCF, é provável que você possa usar os EventProviderrecursos do durante o tempo de vida do serviço. Por esta razão, e para facilitar a leitura, esta amostra nunca elimina o embrulho EventProvider. Se, por algum motivo, seu serviço tiver requisitos diferentes para rastreamento e você precisar descartar esse recurso, modifique esse exemplo de acordo com as práticas recomendadas para descartar recursos não gerenciados. Para obter mais informações sobre como descartar recursos não gerenciados, consulte Implementando um método de descarte.

Self-Hosting vs. Alojamento Web

Para serviços hospedados na Web, os rastreamentos analíticos do WCF fornecem um campo, chamado "HostReference", que é usado para identificar o serviço que está emitindo os rastreamentos. Os rastreamentos de usuário extensíveis podem participar desse modelo e este exemplo demonstra as práticas recomendadas para fazer isso. O formato de uma referência de host da Web quando o caractere de pipe '|' realmente aparece na cadeia de caracteres resultante pode ser qualquer um dos seguintes:

  • Se o aplicativo não estiver na raiz.

    <SiteName><ApplicationVirtualPath>|<ServiceVirtualPath>|<Nome do Serviço>

  • Se o aplicativo estiver na raiz.

    <Nome> do Site|<ServiceVirtualPath>|<Nome do Serviço>

Para serviços auto-hospedados, os rastreamentos analíticos do WCF não preenchem o campo "HostReference". A WCFUserEventProvider classe neste exemplo se comporta consistentemente quando usada por um serviço auto-hospedado.

Detalhes personalizados do evento

O manifesto do Provedor de Eventos ETW do WCF define três eventos que são projetados para serem emitidos pelos autores do serviço WCF a partir do código de serviço. A tabela seguinte apresenta uma desagregação dos três eventos.

Evento Descrição ID do Evento
UserDefinedInformationEventOccurred Emita este evento quando algo importante acontecer no seu serviço que não seja um problema. Por exemplo, você pode emitir um evento depois de fazer uma chamada para um banco de dados com êxito. 301
UserDefinedWarningOccurred Emita esse evento quando ocorrer um problema que possa resultar em uma falha no futuro. Por exemplo, você pode emitir um evento de aviso quando uma chamada para um banco de dados falha, mas conseguiu se recuperar recorrendo a um armazenamento de dados redundante. 302
UserDefinedErrorOccurred Emita esse evento quando o serviço não se comportar conforme o esperado. Por exemplo, você pode emitir um evento se uma chamada para um banco de dados falhar e não for possível recuperar os dados de outro lugar. 303

Para usar este exemplo

  1. Usando o Visual Studio, abra o arquivo de solução WCFAnalyticTracingExtensibility.sln.

  2. Para criar a solução, pressione Ctrl+Shift+B.

  3. Para executar a solução, pressione Ctrl+F5.

    No navegador da Web, clique em Calculator.svc. O URI do documento WSDL para o serviço deve aparecer no navegador. Copie esse URI.

  4. Execute o cliente de teste WCF (WcfTestClient.exe).

    O cliente de teste WCF (WcfTestClient.exe) está localizado em \<Visual Studio Install Dir>\Common7\IDE\WcfTestClient.exe.

  5. Dentro do cliente de teste WCF, adicione o serviço selecionando Arquivo e, em seguida, Adicionar Serviço.

    Adicione o endereço do ponto de extremidade na caixa de entrada.

  6. Clique em OK para fechar a caixa de diálogo.

    O serviço ICalculator é adicionado no painel esquerdo em Meus projetos de serviço.

  7. Abra o aplicativo Visualizador de Eventos.

    Antes de invocar o serviço, inicie o Visualizador de Eventos e verifique se o log de eventos está escutando os eventos de rastreamento emitidos pelo serviço WCF.

  8. No menu Iniciar, selecione Ferramentas Administrativas e, em seguida, Visualizador de Eventos. Habilite os logs analítico e de depuração .

  9. Na vista em árvore no Visualizador de Eventos, navegue até Visualizador de Eventos, Registos de Aplicações e Serviços, Microsoft, Windows e, em seguida , Aplicações do Servidor de Aplicações. Clique com o botão direito do mouse em Application Server-Applications, selecione Exibir e Mostrar Logs Analíticos e de Depuração.

    Verifique se a opção Mostrar logs analíticos e de depuração está marcada. Habilite o log analítico .

    Na vista em árvore no Visualizador de Eventos, navegue até Visualizador de Eventos, Registos de Aplicações e Serviços, Microsoft, Windows, Aplicações de Servidor de Aplicações e, em seguida , Analítico. Clique com o botão direito do mouse em Analítico e selecione Ativar Log.

  10. Teste o serviço usando o cliente de teste WCF.

    1. No cliente de teste WCF, clique duas vezes em Add() sob o nó de serviço ICalculator.

      O método Add() aparece no painel direito com dois parâmetros.

    2. Digite 2 para o primeiro parâmetro e 3 para o segundo parâmetro.

    3. Clique em Invocar para invocar o método.

  11. Vá para a janela do Visualizador de Eventos que você já abriu. Navegue até Visualizador de Eventos, Logs de Aplicativos e Serviços, Microsoft, Windows, Aplicativos de Servidor de Aplicativos.

  12. Clique com o botão direito do mouse no nó analítico e selecione Atualizar.

    Os eventos aparecem no painel direito.

  13. Localize o evento com a ID 303 e clique duas vezes nele para abri-lo e inspecionar seu conteúdo.

    Este evento foi emitido pelo Add() método do serviço ICalculator e tem uma carga útil igual a "2+3=5".

Para limpar (Opcional)

  1. Abra o Visualizador de Eventos.

  2. Navegue até Visualizador de Eventos, Logs de Aplicativos e Serviços, Microsoft, Windows e, em seguida, Application-Server-Applications. Clique com o botão direito do mouse em Analítico e selecione Desativar Log.

  3. Navegue até Visualizador de Eventos, Logs de Aplicativos e Serviços, Microsoft, Windows, Application-Server-Applications e, em seguida, Analytic. Clique com o botão direito do mouse em Analítico e selecione Limpar Log.

  4. Clique em Limpar para limpar os eventos.

Problema Conhecido

Há um problema conhecido no Visualizador de Eventos em que ele pode falhar ao decodificar eventos ETW. Poderá ver uma mensagem de erro que diz: "Não foi possível encontrar a descrição do ID de Evento <da origem> Microsoft-Windows-Application Server-Applications. O componente que gera esse evento não está instalado no computador local ou a instalação está corrompida. Você pode instalar ou reparar o componente no computador local." Se encontrar esse erro, selecione Atualizar no menu Ações . O evento deve então decodificar corretamente.

Consulte também