共用方式為


WMI 提供者

WMIProvider 範例會示範如何在執行階段使用 WCF 內建的 Windows Management Instrumentation (WMI) 提供者從 Windows Communication Foundation (WCF) 服務收集資料。 此外,這個範例還會示範如何將使用者定義的 WMI 物件新增至服務。 此範例會啟動使用者入門的 WMI 提供者,並示範如何在執行階段從 ICalculator 服務收集資料。

WMI 是 Microsoft 對「Web 架構企業管理」(Web-Based Enterprise Management,WBEM) 標準的實作。 如需 WMI SDK 的詳細資訊,請參閱 Windows Management Instrumentation。 WBEM 是一套業界標準,說明應用程式如何將管理測試設備公開至外部管理工具。

WCF 會實作 WMI 提供者,這是可透過 WBEM 相容介面,在執行階段公開測試設備的元件。 管理工具可在執行階段透過介面連線至服務。 WCF 會公開服務的屬性,例如位址、繫結、行為和接聽項。

內建 WMI 提供者可以在應用程式的組態檔中啟動。 若要執行此作業,請使用 <system.serviceModel> 區段中 <diagnostics>wmiProviderEnabled 屬性,如下列範例設定所示:

<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 版本,請遵循 Building the Windows Communication Foundation Samples中的指示。

  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. 請使用命令 cscript EnumerateServices.jscscript EnumerateCustomObjects.js,檢視由範例透過 WMI 呈現的資料。

另請參閱