Proveedor WMI
Este ejemplo muestra cómo recopilar los datos de los servicios Windows Communication Foundation (WCF) en el tiempo de ejecución mediante el proveedor del Instrumental de administración de Windows (WMI) que está integrado en WCF. Asimismo, este ejemplo muestra cómo agregar un objeto WMI definido por el usuario a un servicio. El ejemplo activa el proveedor WMI para Ejemplo de introducción y muestra cómo recopilar los datos del servicio ICalculator
en el tiempo de ejecución.
WMI es la implementación de Microsoft del estándar Web-Based Enterprise Management (WBEM). Para obtener más información sobre SDK de WMI, consulte MSDN Library. (https://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi\_start\_page.asp). WBEM es un estándar de la industria para saber cómo exponen las aplicaciones la instrumentación de administración a las herramientas de administración externas.
WCF implementa un proveedor de WMI, un componente que expone la instrumentación en el tiempo de ejecución a través de una interfaz compatible con WBEM. Las herramientas de administración pueden establecer la conexión con los servicios a través de la interfaz en el tiempo de ejecución. WCF expone atributos de servicios como direcciones, enlaces, comportamientos y agentes de escucha.
El proveedor de WMI integrado se activa en el archivo de configuración de la aplicación. Esto se consigue a través del atributo wmiProviderEnabled de <diagnostics> Element en la sección system.ServiceModel element, tal y como se muestra en la configuración del ejemplo siguiente:
<system.serviceModel>
...
<diagnostics wmiProviderEnabled="true" />
...
</system.serviceModel>
Esta entrada de configuración expone una interfaz WMI. Ahora, las aplicaciones de administración pueden establecer la conexión a través de esta interfaz y obtener acceso a la instrumentación de administración de la aplicación.
Objeto WMI personalizado
Agregar objetos WMI a un servicio permite revelar la información definida por el usuario junto con la información de proveedor WMI integrada. Esto se logra publicando el esquema del servicio en WMI mediante la aplicación Installutil.exe. Las instrucciones para conseguirlo, además de más información, se pueden encontrar en las instrucciones de instalación al final del tema.
Acceso a la información de WMI
Se puede tener acceso a los datos de WMI de maneras muy distintas. Microsoft proporciona las API de WMI para scripts, aplicaciones Visual Basic, aplicaciones C++ y .NET Framework (https://msdn.microsoft.com/library/default.asp? url=/library/en-us/wmisdk/wmi/using_wmi.asp) .
Este ejemplo utiliza dos scripts de Java: uno para enumerar servicios que se ejecutan en el equipo junto con algunas de sus propiedades y el segundo para ver los datos de WMI definidos por el usuario. El script abre una conexión con el proveedor WMI, analiza los datos y muestra los datos recopilados.
Inicie el ejemplo para crear una instancia en ejecución de un servicio WCF. Mientras el servicio se está ejecutando, ejecute cada script de Java usando el comando siguiente en el símbolo del sistema:
cscript EnumerateServices.js
El script obtiene acceso al instrumental contenido en el servicio y genera la salida siguiente:
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
Después, ejecute el segundo script de Java para mostrar los datos de WMI definidos por el usuario:
cscript EnumerateCustomObjects.js
El script tiene acceso al instrumental definido por el usuario contenido en los servicios y genera el resultado siguiente:
1 WMIObject(s) found.
|-PID: 30285bfd-9d66-4c4e-9be2-310499c5cef5
|-InstanceId: 3839
|-WMIInfo: User Defined WMI Information.
El resultado muestra que hay un servicio que se ejecuta en el equipo. El servicio expone un extremo que implementa el contrato ICalculator
. Los valores del comportamiento y el extremo que el extremo implementa se muestran como la suma de elementos individuales de la pila de mensajería.
WMI no se limita a exponer el instrumental de administración de la infraestructura WCF. La aplicación puede exponer sus propios elementos de datos específicos del dominio a través del mismo mecanismo. WMI es un mecanismo unificado para la inspección y control de un servicio web.
Para configurar, generar y ejecutar el ejemplo
Asegúrese de que ha realizado el Procedimiento de instalación único para ejemplos de Windows Communication Foundation.
Para generar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Generación de ejemplos de Windows Communication Foundation.
Publique el esquema de los servicios en WMI ejecutando Installutil.exe (las ubicaciones predeterminadas para Installutil.exe son "%WINDIR%\Microsoft.NET\Framework\v2.0.50727") en el archivo service.dll en el directorio de hospedaje. Este paso sólo debe ejecutarse cuando se hayan realizado los cambios en el archivo service.dll. Para obtener más información, consulte el tema sobre cómo proporcionar información de administración mediante la instrumentación de aplicaciones en: https://msdn2.microsoft.com/en-us/library/ms186147.aspx en la sección "Cómo publicar en WMI el esquema de una aplicación instrumentada".
Para ejecutar el ejemplo en una configuración de equipos única o cruzada, siga las instrucciones de Ejecución de ejemplos de Windows Communication Foundation.
Nota
Si instalara WCF después de instalar ASP.NET, es posible que necesite ejecutar "%WINDIR%\ Microsoft.Net\Framework\v3.0\Windows Communication Foundation\servicemodelreg.exe " -r -x para proporcionar el permiso de cuenta de ASPNET para publicar objetos WMI.
Vea los datos del ejemplo que aparece mediante WMI usando los comandos:
cscript EnumerateServices.js
ocscript EnumerateCustomObjects.js
.
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.