次の方法で共有


WMI プロバイダー

WMIProvider サンプルでは、WCF に組み込まれている Windows Management Instrumentation (WMI) プロバイダーを使用して、実行時に Windows Communication Foundation (WCF) サービスからデータを収集する方法を示します。 また、このサンプルでは、ユーザー定義 WMI オブジェクトをサービスに追加する方法を示します。 このサンプルでは、 作業の開始 のために WMI プロバイダーをアクティブ化し、実行時に ICalculator サービスからデータを収集する方法を示します。

WMI は、Microsoft の Web-Based Enterprise Management (WBEM) 標準の実装です。 WMI SDK の詳細については、「 Windows Management Instrumentation」を参照してください。 WBEM は、アプリケーションが管理インストルメンテーションを外部管理ツールに公開する方法の業界標準です。

WCF は WMI プロバイダーを実装します。これは、WBEM 互換インターフェイスを介して実行時にインストルメンテーションを公開するコンポーネントです。 管理ツールは、実行時にインターフェイスを介してサービスに接続できます。 WCF は、アドレス、バインディング、動作、リスナーなどのサービスの属性を公開します。

組み込みの WMI プロバイダーは、アプリケーションの構成ファイルでアクティブ化されます。 これは、次のサンプル構成に示すように、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の使用」を参照してください。

このサンプルでは、2 つの Java スクリプトを使用します。1 つはコンピューターで実行されているサービスとそのプロパティの一部を列挙し、もう 1 つはユーザー定義 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

次に、2 番目の Java スクリプトを実行して、ユーザー定義 WMI データを表示します。

cscript EnumerateCustomObjects.js

このスクリプトは、サービスに含まれるユーザー定義のインストルメンテーションにアクセスし、次の出力を生成します。

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

出力は、コンピューター上で実行されている 1 つのサービスがあることを示しています。 サービスは、 ICalculator コントラクトを実装する 1 つのエンドポイントを公開します。 エンドポイントによって実装される動作とバインドの設定は、メッセージング スタックの個々の要素の合計として一覧表示されます。

WMI は、WCF インフラストラクチャの管理インストルメンテーションを公開することに限定されません。 アプリケーションは、同じメカニズムを使用して、独自のドメイン固有のデータ項目を公開できます。 WMI は、Web サービスの検査と制御のための統合メカニズムです。

サンプルを設定、ビルド、実行するには

  1. Windows Communication Foundation サンプルのOne-Time セットアップ手順を実行していることを確認します。

  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 をインストールした場合は、WMI オブジェクトを発行するアクセス許可を ASPNET アカウントに付与するために、"%WINDIR%\ Microsoft.Net\Framework\v3.0\Windows Communication Foundation\servicemodelreg.exe" -r -x を実行することが必要になる場合があります。

  5. またはコマンドを使用して、WMI を介して表示されたサンプルのデータを表示します。

こちらも参照ください