Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O exemplo WCFAnalyticTracingExtensibility demonstra como adicionar os seus próprios eventos de rastreio ao fluxo de rastreios analíticos que o Windows Communication Foundation (WCF) grava no ETW em .NET Framework. Os rastreios analíticos destinam-se a facilitar a obtenção de visibilidade dos seus serviços sem pagar uma penalidade de desempenho elevado. 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 System.Diagnostics.Eventing.EventProvider, que implementa System.IDisposable. Ao implementar o rastreamento para um serviço WCF, provavelmente usará os recursos do EventProvider 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 autogeridos, 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 |
|---|---|---|
| EventoDeInformaçãoDefinidoPeloUsuárioOcorreu | 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 |
| AvisoDefinidoPeloUtilizadorOcorreu | 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 |
| ErroDefinidoPeloUtilizadorOcorreu | 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
Usando o Visual Studio, abra o arquivo de solução WCFAnalyticTracingExtensibility.sln.
Para criar a solução, pressione Ctrl+Shift+B.
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.
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.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.
Clique em OK para fechar a caixa de diálogo.
O serviço ICalculator é adicionado no painel esquerdo em Meus projetos de serviço.
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.
No menu Iniciar , selecione Ferramentas Administrativas e, em seguida, Visualizador de Eventos. Habilite os logs de análise e de depuração.
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. Ative 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.
Teste o serviço usando o cliente de teste WCF.
No cliente de teste WCF, clique duas vezes em Add() debaixo do nó de serviço ICalculator.
O método Add() aparece no painel direito com dois parâmetros.
Digite 2 para o primeiro parâmetro e 3 para o segundo parâmetro.
Clique em Invocar para invocar o método.
Vá para a janela do Visualizador de Eventos que você já abriu. Navegue até Visualizador de Eventos, Registos de Aplicações e Serviços, Microsoft, Windows, Servidor de Aplicações-Aplicações.
Clique com o botão direito do mouse no nó analítico e selecione Atualizar.
Os eventos aparecem no painel direito.
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)
Abra o Visualizador de Eventos.
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.
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.
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: "A descrição para o ID de Evento <id> da origem 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 encontrar esse erro, selecione Atualizar no menu Ações . O evento deve então ser decodificado corretamente.