2012-03-01 38 views
5

Hola,¿Cómo trabajar con los contadores de rendimiento y el servicio WCF en IIS?

Tengo un servicio de WCF en IIS 7 que comunica con una aplicación WinForm sobre TCP (WAS), ahora tengo que supervisar el rendimiento.

he añadido esto al archivo web.config:

<system.serviceModel> 
    <diagnostics performanceCounters="All" /> 

Después de abrir el Monitor de rendimiento corro un par de pruebas con mi WinForm para asegurarse de que el servicio está activado.

A continuación, abro el Monitor de rendimiento (en vivo), hago clic derecho y agrego los contadores. Amplío ServiceModelService 4.0.0.0 y selecciono Duración de llamadas y llamadas, también selecciono mi servicio (svc) que se indica en el cuadro de lista Instancia del objeto seleccionado y hago clic en el botón Agregar.

Al seleccionar Duración de llamadas y llamadas en ServiceModelOperation 4.0.0.0, ¿no hay ninguna instancia u operación para seleccionar? Lo mismo ocurre con ServiceModelEndpoint 4.0.0.0?

Al hacer clic en Aceptar, se agregarán dos contadores (ServiceModelService).

Luego hago clic en unfreeze display y comienzo mi aplicación de winform que hace un par de llamadas, sin embargo, no veo nada en el Monitor de rendimiento. He intentado hacer clic con el botón derecho en uno de los contadores de rendimiento y seleccionar "Escalar el contador seleccionado", pero ¿esto no hace nada?

El objetivo es simplemente ver qué tan bien funciona el servicio WCF (velocidad, duración, cantidad, conexiones, etc.) y también sería genial verificar las operaciones individuales.

¡Por favor ayuda!

Nota: este es el artículo que he tratado de seguir: http://dkochnev.blogspot.com/2011/06/wcf-framework-40-monitoring-service.html

Respuesta

2

servicios WCF incluye contadores de rendimiento que se puede rastrear con el Windows Performance monitor (Perfmon.exe). Puede lanzar esto desde las Herramientas administrativas en Windows Server 2003.

contadores de rendimiento se puede activar desde la sección de diagnóstico del archivo .config para el servicio, como se muestra en el siguiente ejemplo de configuración:

<configuration> 
    <system.serviceModel> 
    <diagnostics performanceCounters="All" /> 
    </system.serviceModel> 
</configuration> 

Es posible que desee echa un vistazo a estos artículos, que pueden servir de guía sobre cómo utilizar los contadores de rendimiento para los servicios de WCF:

+4

¿Has leído mi publicación? esto es lo que estoy haciendo, pero no obtengo ninguna lectura? ¿Podría ser porque estoy usando messageInspectors en WCF? – Banshee

+0

@Banshee, ¿hay alguna posibilidad de que pueda actualizar esto con su solución final, si corresponde? Estoy de acuerdo en que esta es una respuesta horrible. – Dan

4

Parece que esto podría ser un error (o una característica de diseño) con el funcionamiento de los contadores de rendimiento. Después de algunos poking, he encontrado esto en el MSDN forums:

Tengo el mismo problema.Parece que Microsoft trunca el final del nombre de la operación al nombrar la instancia del contador. Ellos reemplazan la parte truncada con algún tipo de número mágico de 2 dígitos base-10 . Supongo que es un hash, pero quién sabe cómo se genera realmente . El problema es que este número no está garantizado como único y puede causar colisiones en los nombres de los mostradores. Si se produce una colisión de este tipo, , parece que todos los contadores de punto final y operación se desvanecen (al menos para mí).

Tengo dos métodos llamados UpdateMarkupChunk y UpdateMarkupCancel. Si Comenta uno o el otro para que el otro no exista, ellos se resuelven a UpdateMarkupC53 en el nombre de la instancia del contador. Cuando yo comento ambos, ninguna de las instancias del contador aparece para ServiceModelEndpoint o ServiceModelOperation.

¿Puede sugerir una solución para esto, Microsoft? Tengo un servicio de producción ya en el lugar que me gustaría supervisar, y cambiar los nombres de operación no es una opción.

Y respondieron con Microsoft:

Estás en lo correcto. Y este comportamiento es por diseño. Hay un límite en la longitud del nombre de una instancia del contador de rendimiento.

Los contadores de rendimiento de la operación se encuentran en el objeto de rendimiento ServiceModelOperation 4.0.0.0 al visualizar con el Monitor de rendimiento (Perfmon.exe). Cada operación tiene una instancia individual . Es decir, si un contrato determinado tiene 10 operaciones, se asocian 10 operaciones instancias de contador con ese contrato. Las instancias de objetos se nombran usando el siguiente patrón:..

(ServiceName) (ContractName) (operationName) @ (primer punto final oyente dirección)

Cuando un nombre de Windows Communication Foundation (WCF) instancia de contador excede la longitud máxima, WCF reemplaza una parte del nombre de instancia con un valor hash.

por lo que parece, debido a esta limitación máxima del nombre, las grandes posibilidades de una colisión de hash cuando sólo hay un sufijo de hash de dos dígitos, y que cuando dos instancias de un contador tienen el mismo nombre, se borra la todo el contador que en realidad no es posible.

Que es más que un poco frustrante. Por lo tanto, a menos que Microsoft solucione este problema (ya sea un valor hash largo o un mejor manejo de colisiones por contadores de rendimiento) o proporciona una solución adecuada, estamos trabajando a ciegas.

+0

Me alegra encontrar este comentario. Esta es precisamente la razón por la que no estaba viendo ninguna operación en ServiceModelOperation 4.0.0.0 en PerfMon. Muchas gracias, Microsoft. Qué diseño increíblemente estúpido. – MiloDC

Cuestiones relacionadas