Error al crear contadores de rendimiento mediante el servicio WCF

Este artículo le ayuda a resolver el error que se produce al configurar el servicio Windows Communication Foundation (WCF) para publicar contadores de rendimiento.

Versión del producto original:   Windows Communication Foundation
Número KB original:   3058669

Síntomas

Al configurar el servicio WCF para publicar contadores de rendimiento, algunos o todos los contadores de rendimiento no aparecen en la interfaz de usuario del Monitor de rendimiento (PerfMon). Además, recibirá el siguiente mensaje de error en el archivo svclog:

Error al cargar contadores de rendimiento para el servicio. Los contadores de rendimiento no estarán disponibles para este servicio.

También puede recibir el siguiente mensaje de advertencia en el archivo svclog:

Es posible que los nombres de instancia del contador de rendimiento no sean únicos.

Causa

Este problema se produce porque WCF usa la combinación de nombre de servicio, nombre de contrato, nombre de operación y URI como el nombre de instancia del contador de rendimiento que crea. Cuando el nombre alcanza una longitud determinada, se acorta reemplazando una parte del nombre por un valor hash corto. Cuando los nombres de operación son lo suficientemente similares y tienen valores hash abreviados en conflicto, WCF intenta crear por error dos instancias de contador con el mismo nombre de instancia. Esto conduce a un error al crear contadores de rendimiento y WCF no proporciona información de contador de rendimiento para ese servicio.

Solución

Hay dos formas de solucionar esta incidencia:

  • La opción uno requiere cambiar los nombres de servicio, contrato o operación para asegurarse de que los nombres de instancia de contador no entren en conflicto.
  • La opción dos no requiere cambiar los nombres. Pero solo está disponible para las aplicaciones que ejecutan .NET Framework 4.6 o versiones posteriores, y requiere que el usuario que hospeda el servicio tenga los permisos que se describen en la opción dos .

Opción uno

Puede cambiar el nombre del servicio, el contrato o la operación para que sea lo suficientemente corto o lo suficientemente diferente. El nombre de instancia de un contador de operaciones es (ServiceName).(ContractName).(OperationName)@(first endpoint listener address) . Para evitar conflictos, asegúrese de que el nombre tiene menos de 64 caracteres o que no hay operaciones en el servicio que comiencen con los mismos 13 caracteres.
Por ejemplo, suponga que tiene un servicio llamado , con un contrato llamado y operaciones llamadas y que Service IService se MyOperationName1 MyOperationName2 hospedan en http://mybusinessaddress.com/endpoint . Los nombres de instancia de contador antes de acortar Service.IService.MyOperationName1@http://mybusinessaddress.com/endpoint serían y Service.IService.MyOperationName2@http://mybusinessaddress.com/endpoint . Ambos se acortan Service.IServi91.MyOperationNa78@39mybusinessaddress.com/endpoint a , y eso provoca un conflicto. Puede evitar este conflicto cambiando los nombres de operación para que no comiencen con los mismos 13 caracteres (por ejemplo, OperationName1 y MyOperationName2 ). También puede evitarlo acortando otra parte del nombre, como hospedar el servicio en , para mantener el nombre de instancia http://mybusinessaddress.com/e en 64 caracteres. De esta manera, el nombre de instancia del contador no se acortará.

Opción dos

Cuando la aplicación ejecuta .NET Framework 4.6 o versiones posteriores, puede habilitar una configuración en WCF para asegurarse de que los nombres de instancia son únicos anexando un hash más largo al final de un nombre de instancia. Debe realizar las dos acciones siguientes:

  • Agregue la siguiente línea al appSettings archivo de configuración:

    <appSettings>
       <add key="wcf:ensureUniquePerformanceCounterInstanceNames" value="true" />
    </appSettings>
    
  • Asegúrese de que el usuario que hospeda el servicio sea un administrador o un miembro del grupo de usuarios del monitor Windows usuario.

Nota

El usuario que necesita estos permisos hospeda el servicio WCF. Por ejemplo, en escenarios de host propio, es el usuario el que ejecuta el servicio. Si el servicio se hospeda a través de IIS, es el usuario ApplicationPoolIdentity el que debe agregarse al grupo de usuarios.

Cuando está habilitado y el usuario que hospeda el servicio no es un administrador ni en el grupo de usuarios descrito anteriormente, WCF omitirá esta configuración y emitirá la siguiente advertencia en el archivo appSetting svclog:

Es posible que los nombres de instancia de contador de rendimiento no sean únicos

Más información