WMI 提供程序

WMIProvider 示例演示如何使用内置于 WCF 的 Windows Management Instrumentation (WMI) 提供程序在运行时从 Windows Communication Foundation (WCF) 服务收集数据。 此外,此示例演示如何将用户定义的 WMI 对象添加到服务。 该示例激活入门的 WMI 提供程序,并演示如何在运行时从 ICalculator 服务收集数据。

WMI 是Microsoft Web-Based 企业管理(WBEM)标准的实现。 有关 WMI SDK 的详细信息,请参阅 Windows Management Instrumentation。 WBEM 是一个行业标准,用于定义应用程序如何将管理工具接口公开给外部管理工具。

WCF 实现 WMI 提供程序,该提供程序是一个在运行时通过 WBEM 兼容接口公开规范的组件。 管理工具可以在运行时通过接口连接到服务。 WCF 公开服务的属性,例如地址、绑定、行为和侦听器。

内置 WMI 提供程序在应用程序的配置文件中激活。 这可以通过 > 部分中的 > 的 属性完成,如以下示例配置所示:

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

此配置条目公开 WMI 接口。 管理应用程序现在可以通过此接口进行连接,并访问应用程序的管理工具。

自定义 WMI 对象

将 WMI 对象添加到服务可以显示用户定义的信息以及内置的 WMI 提供程序信息。 这可以通过使用 Installutil.exe 应用程序将服务的架构发布到 WMI 来实现。 要完成此操作的说明以及更多详细信息,请参见本主题末尾的设置说明。

访问 WMI 信息

可以通过许多不同的方式访问 WMI 数据。 Microsoft为脚本、Visual Basic 应用程序、C++应用程序和 .NET Framework 提供 WMI API。 有关详细信息,请参阅 使用 WMI

此示例使用两个 Java 脚本:一个用于枚举计算机上运行的服务及其一些属性,另一个用于查看用户定义的 WMI 数据。 该脚本将打开与 WMI 提供程序的连接,分析数据,并显示收集的数据。

启动示例以创建 WCF 服务的正在运行的实例。 服务运行时,请在命令提示符处使用以下命令运行每个 Java 脚本:

cscript EnumerateServices.js

该脚本访问服务中包含的监测工具并生成以下输出:

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

接下来,运行第二个 Java 脚本以显示用户定义的 WMI 数据:

cscript EnumerateCustomObjects.js

该脚本访问在服务中包含的用户定义的监测工具,并生成以下输出:

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

输出显示计算机上运行了单个服务。 该服务公开一个实现 ICalculator 协定的终结点。 终结点实现的行为和绑定的设置被列为消息堆栈的各个元素的总和。

WMI 不仅限于提供 WCF 基础结构的管理工具。 应用程序可以通过同一机制公开其自己的特定于域的数据项。 WMI 是一种统一机制,用于检查和控制 Web 服务。

设置、生成和运行示例

  1. 请确保已执行 Windows Communication Foundation 示例的一次性安装过程

  2. 若要生成解决方案的 C# 或 Visual Basic .NET 版本,请按照 生成 Windows Communication Foundation 示例中的说明进行操作。

  3. 通过在宿主目录中的 service.dll 文件上运行 InstallUtil.exe(InstallUtil.exe 的默认位置为“%WINDIR%\Microsoft.NET\Framework\v4.0.30319”),将服务架构发布到 WMI。 仅当对 service.dll 文件进行更改时,才需要执行此步骤。

  4. 要使用单机配置或跨计算机配置运行示例,请按照运行 Windows Communication Foundation 示例中的说明进行操作。

    注释

    如果在安装 ASP.NET 后安装了 WCF,则可能需要运行“%WINDIR%\ Microsoft.Net\Framework\v3.0\Windows Communication Foundation\servicemodelreg.exe”-r -x 来授予 ASPNET 帐户发布 WMI 对象的权限。

  5. 使用命令查看通过 WMI 显示出来的示例中的数据:cscript EnumerateServices.jscscript EnumerateCustomObjects.js

另请参阅