Compartilhar via


Rastreamento analítico do WCF

O exemplo WCFAnalyticTracingExtensibility demonstra como adicionar seus próprios eventos de rastreamento ao fluxo de rastreamentos analíticos que o WCF (Windows Communication Foundation) grava no ETW no .NET Framework. Os rastreamentos analíticos destinam-se a facilitar a visibilidade dos serviços, sem pagar uma penalidade de alto desempenho. Este exemplo mostra como usar as System.Diagnostics.Eventing APIs para gravar eventos que se integram aos serviços do 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 Melhore a depuração e o ajuste de desempenho com o ETW.

Como descartar o EventProvider

Este exemplo usa a System.Diagnostics.Eventing.EventProvider classe, que implementa System.IDisposable. Ao implementar o rastreamento para um serviço WCF, é provável que você use os recursos do EventProvider durante toda a vida útil do serviço. Por esse motivo e para fins de legibilidade, este exemplo nunca descarta o EventProvider encapsulado. 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 Dispose.

Self-Hosting versus Hospedagem na 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 extensíveis de usuário 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 no diretório raiz.

    <SiteName><ApplicationVirtualPath>|<ServiceVirtualPath>|<ServiceName>

  • Se o aplicativo estiver na raiz.

    <SiteName>|<ServiceVirtualPath>|<ServiceName>

Para serviços autohospedados, 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 do Evento Personalizado

O manifesto do Provedor de Eventos do ETW do WCF define três eventos criados para serem emitidos por autores do serviço WCF no código de serviço. A tabela a seguir mostra um detalhamento dos três eventos.

Acontecimento Descrição ID do evento
UserDefinedInformationEventOccurred Emita este evento quando houver uma ocorrência importante no serviço, que não seja um problema. Por exemplo, você pode emitir um evento depois de fazer uma chamada com êxito para um banco de dados. 301
UserDefinedWarningOccurred Emita esse evento quando ocorrer um problema que pode resultar em uma falha no futuro. Por exemplo, você pode emitir um evento de aviso quando uma chamada para um banco de dados falhar, mas você conseguiu se recuperar ao voltar para um repositório de dados redundante. 302
UserDefinedErrorOccurred Emita este evento quando o serviço não funcionar como esperado. Por exemplo, você poderá emitir um evento se uma chamada a um banco de dados falhar e você não conseguir 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 do WCF (WcfTestClient.exe).

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

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

    Adicione o endereço do endpoint na caixa de entrada.

  6. Clique em OK para fechar o 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 do serviço WCF.

  8. No menu Iniciar , selecione Ferramentas Administrativas e, em seguida, Visualizador de Eventos. Habilite os logs de Análise e Depuração .

  9. No modo de exibição de árvore no Visualizador de Eventos, navegue até o 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 Servidor de Aplicativos-Aplicações, selecione Exibir e, em seguida, Mostrar registros analíticos e de depuração.

    Verifique se a opção Mostrar Logs de Análise e Depuração está marcada. Habilite o log Analítico.

    No modo de exibição de árvore no Visualizador de Eventos, navegue até o Visualizador de Eventos, Logs de Aplicativos e Serviços, Microsoft, Windows, Application Server-Applications e, em seguida, Análise. Clique com o botão direito do mouse em Análise e selecione Habilitar Log.

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

    1. No cliente de teste do WCF, clique duas vezes em Adicionar() no 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 visualizador de eventos que você já abriu. Navegue até o Visualizador de Eventos, Logs de Aplicativos e Serviços, Microsoft, Windows, Application Server-Applications.

  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.

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

Para limpar (opcional)

  1. Abra Visualizador de Eventos.

  2. Navegue até o 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 Análise e selecione Desabilitar Log.

  3. Navegue até o Visualizador de Eventos, Logs de Aplicativos e Serviços, Microsoft, Windows, Application-Server-Applications e, em seguida, Análise. Clique com o botão direito do mouse em Análise 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. Você pode ver uma mensagem de erro que diz: "A descrição da ID de evento <id> da fonte Microsoft-Windows-Application Server-Applications não pode ser encontrada." 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 você encontrar esse erro, selecione Atualizar no menu Ações . Em seguida, o evento deverá decodificar corretamente.

Consulte também