Provedor WMI

O exemplo WMIProvider demonstra como coletar dados de serviços do Windows Communication Foundation (WCF) em tempo de execução usando o provedor WMI (Instrumentação de Gerenciamento do Windows) que é incorporado ao WCF. Além disso, este exemplo demonstra como adicionar um objeto WMI definido pelo usuário a um serviço. O exemplo ativa o provedor WMI para a Introdução e demonstra como coletar dados do ICalculator serviço em tempo de execução.

WMI é a implementação da Microsoft do padrão Web-Based Enterprise Management (WBEM). Para obter mais informações sobre o SDK do WMI, consulte Instrumentação de gerenciamento do Windows. O WBEM é um padrão do setor para como os aplicativos expõem a instrumentação de gerenciamento a ferramentas de gerenciamento externas.

O WCF implementa um provedor WMI, um componente que expõe a instrumentação em tempo de execução por meio de uma interface compatível com WBEM. As ferramentas de gerenciamento podem se conectar aos serviços através da interface em tempo de execução. O WCF expõe atributos de serviços como endereços, associações, comportamentos e ouvintes.

O provedor WMI interno é ativado no arquivo de configuração do aplicativo. Isso é feito por meio wmiProviderEnabled do atributo do <diagnóstico> na <seção system.serviceModel>, conforme mostrado na seguinte configuração de exemplo:

<system.serviceModel>
    ...
    <diagnostics wmiProviderEnabled="true" />
    ...
</system.serviceModel>

Esta entrada de configuração expõe uma interface WMI. As aplicações de gestão podem agora ligar-se através desta interface e aceder à instrumentação de gestão da aplicação.

Objeto WMI personalizado

Adicionar objetos WMI a um serviço torna possível revelar informações definidas pelo usuário junto com as informações internas do provedor WMI. Isso é feito publicando o esquema do serviço no WMI usando o aplicativo Installutil.exe. Instruções para fazer isso, juntamente com mais detalhes podem ser encontradas nas instruções de configuração no final do tópico.

Acessando informações do WMI

Os dados WMI podem ser acessados de muitas maneiras diferentes. A Microsoft fornece APIs WMI para scripts, aplicativos Visual Basic, aplicativos C++ e o .NET Framework. Para obter mais informações, consulte Usando WMI.

Este exemplo usa dois scripts Java: um para enumerar serviços em execução no computador junto com algumas de suas propriedades e o segundo para exibir dados WMI definidos pelo usuário. O script abre uma conexão com o provedor WMI, analisa dados e exibe os dados coletados.

Inicie o exemplo para criar uma instância em execução de um serviço WCF. Enquanto o serviço estiver em execução, execute cada script Java usando o seguinte comando no prompt de comando:

cscript EnumerateServices.js

O script acessa a instrumentação contida no serviço e produz a seguinte saída:

Microsoft (R) Windows Script Host Version 5.6
Copyright © Microsoft Corporation 1996-2001. All rights reserved.

1 service(s) found.
|-PID:           5776
|-DistinguishedName:  CalculatorService@http://localhost/ServiceModelSamples/service.svc
|-Endpoints:     1 endpoints
  |-CalculatorService.ICalculator@http://localhost/ServiceModelSamples/service.svc
    |-Address:                        http://localhost/ServiceModelSamples/service.svc
    |-CounterInstanceName:
    |-AddressHeaders:                 0
    |-ContractType:                   Contract.Name='ICalculator'
    |-BindingElements:                4 bindings
      |-BindingElements[0]
        |-Type:                       TransactionFlowBindingElement
      |-BindingElements[1]
        |-Type:                       SymmetricSecurityBindingElement
      |-BindingElements[2]
        |-Type:                       TextMessageEncodingBindingElement
        |-MaxReadPoolSize:            64
        |-MaxWritePoolSize:           16
      |-BindingElements[3]
        |-Type:                       HttpTransportBindingElement
        |-ManualAddressing:           false
        |-MaxBufferSize:              65536
        |-AllowCookies:               false
        |-AuthenticationScheme:       Anonymous
        |-BypassProxyOnLocal:         false
        |-HostNameComparisonMode:     StrongWildcard
        |-ProxyAddress:               null
        |-ProxyAuthenticationScheme:  Anonymous
        |-Realm:
        |-TransferMode:               Buffered
        |-UseDefaultWebProxy:         true
|-Behaviors:     5 behaviors
      |-Behavior[0]
      |-Type:                       ServiceBehaviorAttribute
        |-AddressFilterMode:               Exact
        |-AutomaticSessionShutdown:        true
        |-ConcurrencyMode:                 Single
        |-IncludeExceptionDetailInFaults:  false
        |-InstanceContextMode:             PerSession
        |-TransactionIsolationLevel:       Unspecified
        |-TransactionTimeout:              null
        |-ValidateMustUnderstand:          true
      |-Behavior[1]
      |-Type:                       AspNetCompatibilityRequirementsAttribute
      |-Behavior[2]
      |-Type:                       ServiceDebugBehavior
      |-Behavior[3]
      |-Type:                       ServiceAuthorizationBehavior
      |-Behavior[4]
      |-Type:                       Behavior

Em seguida, execute o segundo Java Script para exibir os dados WMI definidos pelo usuário:

cscript EnumerateCustomObjects.js

O script acessa a instrumentação definida pelo usuário contida nos serviços e produz a seguinte saída:

1 WMIObject(s) found.
|-PID:           30285bfd-9d66-4c4e-9be2-310499c5cef5
|-InstanceId:    3839
|-WMIInfo:       User Defined WMI Information.

A saída mostra que há um único serviço em execução no computador. O serviço expõe um ponto de extremidade que implementa o ICalculator contrato. As configurações de comportamento e associação implementadas pelo ponto de extremidade são listadas como a soma de elementos individuais da pilha de mensagens.

O WMI não se limita a expor a instrumentação de gerenciamento da infraestrutura WCF. O aplicativo pode expor seus próprios itens de dados específicos do domínio por meio do mesmo mecanismo. WMI é um mecanismo unificado para inspeção e controle de um serviço Web.

Para configurar, compilar e executar o exemplo

  1. Certifique-se de ter executado o procedimento de instalação única para os exemplos do Windows Communication Foundation.

  2. Para criar a edição C# ou Visual Basic .NET da solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.

  3. Publique o esquema de serviços no WMI executando o InstallUtil.exe (os locais padrão para InstallUtil.exe é "%WINDIR%\Microsoft.NET\Framework\v4.0.30319") no arquivo service.dll no diretório de hospedagem. Esta etapa só precisa ser executada quando forem feitas alterações no arquivo service.dll.

  4. Para executar o exemplo em uma configuração de computador único ou entre computadores, siga as instruções em Executando os exemplos do Windows Communication Foundation.

    Nota

    Se você instalou o WCF após a instalação do ASP.NET, talvez seja necessário executar "%WINDIR%\ Microsoft.Net\Framework\v3.0\Windows Communication Foundation\servicemodelreg.exe " -r -x para dar permissão à conta ASPNET para publicar objetos WMI.

  5. Visualize os dados do exemplo surgidos através do WMI usando os comandos: cscript EnumerateServices.js ou cscript EnumerateCustomObjects.js.

Consulte também