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 服务。
设置、生成和运行示例
若要生成解决方案的 C# 或 Visual Basic .NET 版本,请按照 生成 Windows Communication Foundation 示例中的说明进行操作。
通过在宿主目录中的 service.dll 文件上运行 InstallUtil.exe(InstallUtil.exe 的默认位置为“%WINDIR%\Microsoft.NET\Framework\v4.0.30319”),将服务架构发布到 WMI。 仅当对 service.dll 文件进行更改时,才需要执行此步骤。
要使用单机配置或跨计算机配置运行示例,请按照运行 Windows Communication Foundation 示例中的说明进行操作。
注释
如果在安装 ASP.NET 后安装了 WCF,则可能需要运行“%WINDIR%\ Microsoft.Net\Framework\v3.0\Windows Communication Foundation\servicemodelreg.exe”-r -x 来授予 ASPNET 帐户发布 WMI 对象的权限。
使用命令查看通过 WMI 显示出来的示例中的数据:
cscript EnumerateServices.js
或cscript EnumerateCustomObjects.js
。