Partilhar via


Provedor WMI

O exemplo do WMIProvider demonstra como recolher dados dos serviços da Windows Communication Foundation (WCF) em tempo de execução, utilizando o fornecedor Windows Management Instrumentation (WMI) que está integrado no WCF. Além disso, este exemplo demonstra como adicionar um objeto WMI definido pelo usuário a um serviço. O exemplo ativa o provider WMI para o Getting Started e demonstra como recolher dados do serviço ICalculator 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.

WCF implementa um provedor WMI, um componente que expõe a instrumentação durante a execução através de uma interface compatível com WBEM. As ferramentas de gestão podem ligar-se 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 do atributo wmiProviderEnabled de <diagnósticos> 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 o 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 endpoint que implementa o contrato ICalculator. As definições de comportamento e vinculação implementadas pelo ponto de extremidade são apresentadas como a soma dos 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çãoOne-Time 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 são "%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.

    Observação

    Se você instalou o WCF depois de instalar o ASP.NET, talvez seja necessário executar o -r -x%WINDIR%\ Microsoft.Net\Framework\v3.0\Windows Communication Foundation\servicemodelreg.exe" 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.

Ver também