다음을 통해 공유


WMI Provider

이 샘플에서는 WCF에 빌드된 WMI(Windows Management Instrumentation) 공급자를 사용하여 런타임에 WCF(Windows Communication Foundation) 서비스에서 데이터를 수집하는 방법을 보여 줍니다. 또한 사용자 정의 WMI 개체를 서비스에 추가하는 방법도 보여 줍니다. 샘플에서는 Getting Started 샘플에 대해 WMI 공급자를 활성화하고 런타임에 ICalculator 서비스에서 데이터를 수집하는 방법을 보여 줍니다.

WMI는 Microsoft에서 구현한 WBEM(Web-Based Enterprise Management) 표준입니다. WMI SDK에 대한 자세한 내용은 MSDN Library를 참조하십시오 (https://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi\_start\_page.asp). WBEM은 응용 프로그램에서 외부 관리 도구에 관리 계측을 노출하는 방법을 지정하는 산업 표준입니다.

WCF는 런타임에 WBEM 호환 인터페이스를 통해 계측을 노출하는 구성 요소인 WMI 공급자를 구현합니다. 관리 도구는 런타임에 인터페이스를 통해 서비스에 연결될 수 있습니다. WCF에서는 주소, 바인딩, 동작 및 수신기와 같은 서비스 특성을 노출합니다.

기본 제공 WMI 공급자는 응용 프로그램의 구성 파일에서 활성화합니다. 이 작업은 다음 샘플 구성에 표시된 것과 같이 system.ServiceModel element 섹션의 <diagnostics> Element에 있는 wmiProviderEnabled 특성을 통해 수행됩니다.

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

이 구성 항목은 WMI 인터페이스를 노출합니다. 관리 응용 프로그램이 이 인터페이스를 통해 연결하여 응용 프로그램의 관리 계측에 액세스할 수 있습니다.

사용자 지정 WMI 개체

서비스에 WMI 개체를 추가하면 기본 제공 WMI 공급자 정보와 함께 사용자 정의 정보를 표시할 수 있습니다. 그러려면 Installutil.exe 응용 프로그램을 사용하여 WMI에 서비스의 스키마를 게시합니다. 이 작업을 수행하기 위한 지침과 자세한 설명은 항목 끝 부분에 있는 설치 지침을 참조하십시오.

WMI 정보 액세스

다양한 방식으로 WMI 데이터에 액세스할 수 있습니다. Microsoft에서는 스크립트, Visual Basic 응용 프로그램, C++ 응용 프로그램 및 .NET Framework(https://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/using\_wmi.asp)에 WMI API를 제공합니다.

이 샘플에서는 두 개의 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 Script를 실행하여 사용자 정의 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는 웹 서비스의 검사 및 제어를 위한 통합 메커니즘입니다.

샘플을 설치, 빌드 및 실행하려면

  1. Windows Communication Foundation 샘플의 일회 설치 절차를 수행했는지 확인합니다.

  2. C# 또는 Visual Basic .NET 버전의 솔루션을 빌드하려면 Windows Communication Foundation 샘플 빌드의 지침을 따릅니다.

  3. 호스팅 디렉터리에 있는 service.dll 파일에서 InstallUtil.exe(기본 위치는 "%WINDIR%\Microsoft.NET\Framework\v2.0.50727")를 실행하여 WMI에 서비스 스키마를 게시합니다. 이 단계는 service.dll 파일이 수정된 경우에만 실행되어야 합니다. 자세한 내용은 https://msdn2.microsoft.com/en-us/library/ms186147.aspx에 있는 응용 프로그램 계측을 통한 관리 정보 제공의 "방법: 계측된 응용 프로그램에서 WMI에 스키마 게시"(영문 페이지일 수 있음) 단원을 참조하십시오.

  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.js 또는 cscript EnumerateCustomObjects.js 명령을 사용하여 WMI를 통해 표시된 샘플의 데이터를 봅니다.

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