WMI プロバイダ
このサンプルでは、WCF に組み込まれている Windows Management Instrumentation (WMI) プロバイダを使用して、Windows Communication Foundation (WCF) サービスのデータを実行時に収集する方法を示します。また、このサンプルでは、ユーザー定義の WMI オブジェクトをサービスに追加する方法も示します。このサンプルは、「入門サンプル」用に WMI プロバイダをアクティブにし、ICalculator
サービスのデータを実行時に収集する方法を示します。
WMI は、Web ベースのエンタープライズ管理 (WBEM) 標準をマイクロソフトが実装したものです。WMI SDK の詳細については、MSDN ライブラリを参照してください。(https://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi\_start\_page.asp)。WBEM は、アプリケーションが Management Instrumentation を外部管理ツールに開示する業界標準の方法です。
WCF は WMI プロバイダを実装しています。これは、WBEAM と互換性のあるインターフェイスを通して実行時にインストルメンテーションを公開するコンポーネントです。管理ツールは、実行時にインターフェイスを通してサービスに接続できます。WCF では、アドレス、バインディング、動作、およびリスナなどのサービスの属性が開示されます。
組み込みの WMI プロバイダは、アプリケーションの構成ファイルでアクティブにされます。これは、次のサンプル構成に示すように、system.ServiceModel elementセクションの <diagnostics> Elementの wmiProviderEnabled 属性によって行われます。
<system.serviceModel>
...
<diagnostics wmiProviderEnabled="true" />
...
</system.serviceModel>
この構成エントリには、WMI インターフェイスが開示されます。管理アプリケーションはこのインターフェイスを通して接続し、アプリケーションの Management Instrumentation にアクセスできるようになります。
カスタム WMI オブジェクト
WMI オブジェクトをサービスに追加すると、組み込みの WMI プロバイダの情報と共にユーザー定義の情報を開示できます。これは、Installutil.exe アプリケーションを使用してサービスのスキーマを WMI に公開することによって実現されます。これを行うための手順および詳細情報は、このトピックの最後のセットアップ手順で示します。
WMI 情報へのアクセス
WMI データには、複数の異なる方法でアクセスできます。マイクロソフトは、スクリプト用、Visual Basic アプリケーション用、C++ アプリケーション用、および .NET Framework 用の WMI API を提供しています (https://msdn2.microsoft.com/en-us/library/aa393964.aspx)。
このサンプルでは、2 つの Java スクリプトを使用します。1 つ目は、コンピュータ上で実行されているサービスとその一部のプロパティを列挙するスクリプトで、2 つ目はユーザー定義の 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: 1444
|-DistinguishedName: CalculatorService@https://localhost/servicemodelsamples/service.svc
|-Endpoints: 2 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
|-CalculatorService.IMetadataExchange@https://localhost/servicemodelsamples/service.svc/mex
|-Address: https://localhost/servicemodelsamples/service.svc/mex
|-CounterInstanceName:
|-AddressHeaders: 0
|-ContractType: Contract.Name='IMetadataExchange'
|-BindingElements: 3 bindings
|-BindingElements[0]
|-Type: TransactionFlowBindingElement
|-BindingElements[1]
|-Type: TextMessageEncodingBindingElement
|-MaxReadPoolSize: 64
|-MaxWritePoolSize: 16
|-BindingElements[2]
|-Type: HttpTransportBindingElement
|-ManualAddressing: false
|-MaxBufferSize: 65536
|-AllowCookies: false
|-AuthenticationScheme: Anonymous
|-BypassProxyOnLocal: false
|-HostNameComparisonMode: StrongWildcard
|-ProxyAddress: null
|-ProxyAuthenticationScheme: Anonymous
|-Realm:
|-TransferMode: Buffered
|-UseDefaultWebProxy: true
|-Behaviors: 6 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: ServiceMetadataBehavior
|-ExternalMetadataLocation: null
|-EnableGetEnabled: undefined
|-HttpGetUrl: null
|-Behavior[3]
|-Type: ServiceDebugBehavior
|-Behavior[4]
|-Type: ServiceAuthorizationBehavior
|-Behavior[5]
|-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 インフラストラクチャの Management Instrumentation を公開するだけではありません。独自のドメイン固有のデータ アイテムを、同じ機構を使用して公開できます。WMI は、Web サービスの検査と制御のための統一された機構です。
サンプルを設定、ビルド、および実行するには
「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。
ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
サービス スキーマを WMI に公開します。これを行うには、ホスト ディレクトリ内の service.dll ファイルに対して、InstallUtil.exe (既定の場所は "%WINDIR%\Microsoft.NET\Framework\v2.0.50727") を実行します。この手順を実行する必要があるのは、service.dll ファイルを変更した場合のみです。詳細については、「アプリケーションのインストルメント化による管理情報の提供」(https://msdn2.microsoft.com/ja-jp/library/ms186147(VS.80).aspx) の「方法 : インストルメント化されたアプリケーションの WMI にスキーマを公開する」セクションを参照してください。
単一コンピュータ構成か複数コンピュータ構成かに応じて、「Windows Communication Foundation サンプルの実行」の手順に従います。
メモ : ASP.NET のインストール後に WCF をインストールした場合は、"%WINDIR%\Microsoft.Net\Framework\v3.0\Windows Communication Foundation\servicemodelreg.exe " -r -x を実行し、ASPNET アカウントに WMI オブジェクトを公開する権限を付与する必要がある場合があります。
コマンド
cscript EnumerateServices.js
またはcscript EnumerateCustomObjects.js
を使用して、WMI を通じて示されるサンプルのデータを表示します。
Copyright © 2007 by Microsoft Corporation.All rights reserved.