WMI 提供者

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

WMI 是 Microsoft 對「Web 架構企業管理」(Web-Based Enterprise Management,WBEM) 標準的實作。如需 WMI SDK 的詳細資訊,請參閱 MSDN Library (https://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi\_start\_page.asp)。WBEM 是一套業界標準,說明應用程式如何將管理測試設備公開至外部管理工具。

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

內建 WMI 提供者可以在應用程式的組態檔中啟動。這可以透過 system.ServiceModel element一節中 <diagnostics> ElementwmiProviderEnabled 屬性完成,如下列範例組態所示:

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

這個組態項目會公開 WMI 介面。現在,管理應用程式可以透過這個介面進行連線,並存取應用程式的管理測試設備。

自訂 WMI 物件

新增 WMI 物件至服務,可以將使用者定義的資訊連同內建 WMI 提供者的資訊一併公開。只要使用 Installutil.exe 應用程式將服務的結構描述發行至 WMI,就能達成這個目的。有關完成這項作業的指示以及詳細資料,可在本主題結尾的安裝指示中找到。

存取 WMI 資訊

您可以使用各種不同方式來存取 WMI 資料。Microsoft 為指令碼 Visual Basic 應用程式、C++ 應用程式和 .NET Framework 提供了 WMI API (https://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/using\_wmi.asp)。

這個範例會使用兩個 Java 指令碼:一個是用來列舉電腦上執行的服務及其部分屬性,而第二個則是用來檢視使用者定義的 WMI 資料。指令碼會開啟 WMI 提供者的連線、剖析資料,以及顯示收集到的資料。

請啟動範例以建立 WCF 服務的執行中執行個體。在服務執行的同時,請於命令提示字元中使用下列命令來執行各個 Java 指令碼:

cscript EnumerateServices.js

指令碼會存取服務中包含的測試設備,然後產生下列輸出:

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

1 service(s) found.
|-PID:           5776
|-DistinguishedName:  CalculatorService@https://localhost/ServiceModelSamples/service.svc
|-Endpoints:     1 endpoints
  |-CalculatorService.ICalculator@https://localhost/ServiceModelSamples/service.svc
    |-Address:                        https://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\v2.0.50727"),將服務結構描述發行至 WMI。只有在已對 service.dll 檔案進行變更時,才需要執行這個步驟。如需詳細資訊,請參閱<HOW TO:為檢測的應用程式發行結構描述至 WMI>一節中的<透過檢測應用程式提供管理資訊>,網址為:https://msdn2.microsoft.com/en-us/library/ms186147.aspx (本頁面可能為英文)。

  4. 若要在單一或跨電腦的組態中執行本範例,請遵循執行 Windows Communication Foundation 範例中的指示。

    ms751442.note(zh-tw,VS.90).gif注意:
    如果是在安裝 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 呈現的資料。

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.