Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se describe el formato de los datos de seguimiento, cómo verlo y los enfoques que usan el Visor de seguimiento de servicio para solucionar problemas de la aplicación.
Uso de la herramienta Service Trace Viewer
La herramienta Visor de seguimiento de servicio de Windows Communication Foundation (WCF) le ayuda a correlacionar los seguimientos de diagnóstico generados por los agentes de escucha de WCF para localizar la causa principal de un error. La herramienta le ofrece una manera de ver, agrupar y filtrar fácilmente los seguimientos para poder diagnosticar, reparar y comprobar problemas con los servicios WCF. Para obtener más información sobre el uso de esta herramienta, consulte Service Trace Viewer Tool (SvcTraceViewer.exe).
Este tema contiene capturas de pantalla de trazas generadas mediante la ejecución del ejemplo Tracing and Message Logging, cuando se visualiza mediante la Herramienta Visor de Seguimiento de Servicio (SvcTraceViewer.exe). En este tema se muestra cómo comprender el contenido de seguimiento, las actividades y su correlación, y cómo analizar un gran número de seguimientos al solucionar problemas.
Visualización del contenido de seguimiento
Un evento de seguimiento contiene la siguiente información más importante:
Nombre de actividad cuando se establece.
Tiempo de emisión.
Nivel de seguimiento.
Nombre de origen de seguimiento.
Nombre del proceso.
Identificador de subproceso.
Identificador de seguimiento único, que es una dirección URL que apunta a una referencia técnica de Microsoft que proporciona más información relacionada con el seguimiento.
Todo esto se puede ver en el panel derecho superior del Visor de seguimiento de servicios o en la sección Información básica de la vista con formato del panel inferior derecho al seleccionar un seguimiento.
Nota:
Si el cliente y el servicio están en la misma máquina, los seguimientos de ambas aplicaciones estarán presentes. Se pueden filtrar mediante la columna Nombre del proceso .
Además, la vista con formato también proporciona una descripción del seguimiento e información detallada adicional cuando esté disponible. Este último puede incluir el tipo de excepción y el mensaje, las pilas de llamadas, la acción de mensaje, los campos de origen y destino y otra información de excepción.
En la vista XML, las etiquetas XML útiles incluyen lo siguiente:
<SubType>
(nivel de seguimiento).<TimeCreated>
.<Source>
(nombre del origen de seguimiento)<Correlation>
(identificador de actividad establecido al emitir el seguimiento)<Execution>
(identificador de proceso y subproceso)<Computer>
.<ExtendedData>
, incluidos los objetos<Action>
,<MessageID>
y<ActivityId>
establecidos en el encabezado del mensaje al enviar un mensaje.
Si examina la traza "Envió un mensaje por un canal", puede ver el siguiente contenido.
<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
<System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
<EventID>262163</EventID>
<Type>3</Type>
<SubType Name="Information">0</SubType>
<Level>8</Level>
<TimeCreated SystemTime="2006-08-04T18:45:30.8491051Z" />
<Source Name="System.ServiceModel" />
<Correlation ActivityID="{bbbb1111-cc22-3333-44dd-555555eeeeee}"/>
<Execution ProcessName="client" ProcessID="1808" ThreadID="1" />
<Channel />
<Computer>TEST1</Computer>
</System>
<ApplicationData>
<TraceData>
<DataItem>
<TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
<TraceIdentifier>http://msdn.microsoft.com/library/System.ServiceModel.Channels.MessageSent.aspx</TraceIdentifier>
<Description>Sent a message over a channel.</Description>
<AppDomain>client.exe</AppDomain>
<Source>System.ServiceModel.Channels.ClientFramingDuplexSessionChannel/35191196</Source>
<ExtendedData xmlns="http://schemas.microsoft.com/2006/08/ServiceModel/MessageTransmitTraceRecord">
<MessageProperties>
<AllowOutputBatching>False</AllowOutputBatching>
</MessageProperties>
<MessageHeaders>
<Action d4p1:mustUnderstand="1" xmlns:d4p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.w3.org/2005/08/addressing">http://Microsoft.ServiceModel.Samples/ICalculator/Multiply</Action>
<MessageID xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:7c6670d8-4c9c-496e-b6a0-2ceb6db35338</MessageID>
<ActivityId CorrelationId="aaaa0000-bb11-2222-33cc-444444dddddd" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">bbbb1111-cc22-3333-44dd-555555eeeeee</ActivityId>
<ReplyTo xmlns="http://www.w3.org/2005/08/addressing">
<Address>http://www.w3.org/2005/08/addressing/anonymous</Address>
</ReplyTo>
<To d4p1:mustUnderstand="1" xmlns:d4p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.w3.org/2005/08/addressing">net.tcp://localhost/servicemodelsamples/service</To>
</MessageHeaders>
<RemoteAddress>net.tcp://localhost/servicemodelsamples/service</RemoteAddress>
</ExtendedData>
</TraceRecord>
</DataItem>
</TraceData>
</ApplicationData>
</E2ETraceEvent>
Seguimiento ServiceModel E2E
Cuando la fuente de seguimiento System.ServiceModel
se configura con un valor switchValue
distinto de Desactivado y ActivityTracing
, WCF crea actividades y las transfiere para el procesamiento de WCF.
Una actividad es una unidad lógica de procesamiento que agrupa todos los seguimientos relacionados con esa unidad de procesamiento. Por ejemplo, puede definir una actividad para cada solicitud. Las transferencias crean una relación causal entre las actividades dentro de los puntos de conexión. La propagación del identificador de actividad permite relacionar las actividades entre puntos de conexión. Esto se puede hacer estableciendo propagateActivity
=true
en la configuración en cada punto de conexión. Las actividades, las transferencias y la propagación permiten realizar la correlación de errores. De este modo, puede encontrar la causa principal de un error más rápidamente.
En el cliente, se crea una actividad WCF para cada llamada de modelo de objetos (por ejemplo, Open ChannelFactory, Add, Divide, etc.). Cada una de las llamadas a la operación se procesa en una actividad de "Acción de proceso".
En la captura de pantalla siguiente, extraída del ejemplo Seguimiento y registro de mensajes, el panel izquierdo muestra la lista de actividades creadas en el proceso de cliente, ordenadas por hora de creación. A continuación se muestra una lista cronológica de actividades:
Construyó el generador de canales (ClientBase).
Abrió el generador de canales.
Procesó la acción Agregar.
Configure la sesión segura (esto SE PRODUJO en la primera solicitud) y procese tres mensajes de respuesta de infraestructura de seguridad: RST, RSTR, SCT (mensaje de proceso 1, 2, 3).
Procesó las solicitudes de restar, multiplicar y dividir.
Cerró el generador de canales y, de este modo, cerró la sesión segura y procesó la respuesta del mensaje de seguridad Cancel.
Vemos los mensajes de la infraestructura de seguridad debido al wsHttpBinding.
Nota:
En WCF, se muestran los mensajes de respuesta que se procesan inicialmente en una actividad independiente (mensaje de proceso) antes de correlacionarlos con la actividad acción de proceso correspondiente que incluye el mensaje de solicitud, a través de una transferencia. Esto sucede para los mensajes de infraestructura y las solicitudes asincrónicas y se debe al hecho de que debemos inspeccionar el mensaje, leer el encabezado activityId e identificar la actividad de acción de proceso existente con ese identificador para correlacionarla. En el caso de las solicitudes sincrónicas, estamos esperando la respuesta y, por lo tanto, sabemos a qué acción de Proceso está relacionada la respuesta.
En la siguiente imagen se muestra la lista de actividades del cliente WCF por hora de creación (panel izquierdo) y sus actividades y seguimientos anidados (panel superior derecho)
Cuando seleccionamos una actividad en el panel izquierdo, podemos ver actividades y seguimientos anidados en el panel derecho superior. Por lo tanto, se trata de una vista jerárquica reducida de la lista de actividades de la izquierda, en función de la actividad primaria seleccionada. Debido a que la actividad Procesar acción Agregar es la primera solicitud realizada, esta actividad contiene la actividad Configurar sesión segura (transferir a, transferir desde) y seguimientos para el procesamiento real de la acción Agregar.
Si hacemos doble clic en la acción de proceso de Agregar actividad en el panel izquierdo, podemos ver una representación gráfica de las actividades de cliente WCF relacionadas con Agregar. La primera actividad de la izquierda es la actividad raíz (0000), que es la actividad predeterminada. WFC transfiere la actividad ambiente. Si esto no se define, WCF realiza transferencias fuera del código 0000. Aquí, la segunda actividad, Procesar acción Agregar, transfiere fuera de 0. A continuación, vemos la configuración de la sesión segura.
En la imagen siguiente se muestra una vista gráfica de las actividades del cliente WCF, específicamente la actividad ambiente (aquí 0), la acción Procesar y Configurar sesión segura:
En el panel superior derecho, podemos ver todos los seguimientos relacionados con la actividad Procesar acción Agregar. En concreto, hemos enviado el mensaje de solicitud ("Enviado un mensaje a través de un canal") y hemos recibido la respuesta ("Recibido un mensaje a través de un canal") en la misma actividad. Esto se muestra en el gráfico siguiente. Para mayor claridad, la actividad Configurar sesión segura se ha simplificado en el diagrama.
En la siguiente imagen se muestra una lista de seguimientos de la actividad Procesar acción. Enviamos la solicitud y recibimos la respuesta en la misma actividad.
Aquí, cargamos las trazas de cliente solo para mayor claridad, pero las trazas de servicio (mensaje de solicitud recibido y mensaje de respuesta enviado) aparecen en la misma actividad si también se cargan en la herramienta y propagateActivity
se estableció como true.
. Esto se muestra en una ilustración posterior.
En el servicio, el modelo de actividades asigna de la siguiente manera a los conceptos de WFC:
Creamos y abremos un ServiceHost (esto puede crear varias actividades relacionadas con el host, por ejemplo, en el caso de seguridad).
Creamos una actividad Escuchar a para cada agente de escucha en el ServiceHost (con transferencias dentro y fuera de Abrir ServiceHost).
Cuando el escucha detecta una solicitud de comunicación iniciada por el cliente, el proceso se transfiere a una actividad de "Recepción de bytes", en la que se procesan todos los bytes enviados desde el cliente. En esta actividad, podemos ver los errores de conexión que se han producido durante la interacción del servicio cliente.
Para cada conjunto de bytes que se recibe que corresponde a un mensaje, procesamos estos bytes en una actividad "Mensaje de proceso", donde creamos el objeto Message de WCF. En esta actividad, vemos errores relacionados con un sobre incorrecto o un mensaje con formato incorrecto.
Una vez que se ha formado el mensaje, transferimos a una actividad Procesar acción. Si
propagateActivity
se establece entrue
tanto en el cliente como en el servicio, esta actividad tiene el mismo id que el definido en el cliente y descrita previamente. Desde esta fase, empezamos a beneficiarse de la correlación directa entre los puntos de conexión, ya que todos los seguimientos emitidos en WCF relacionados con la solicitud están en esa misma actividad, incluido el procesamiento de mensajes de respuesta.Respecto a las acciones fuera de proceso, creamos una actividad "Ejecutar código de usuario" para aislar los seguimientos emitidos en el código de usuario de los emitidos en WFC. En el ejemplo anterior, el seguimiento "Servicio envía respuesta Agregar" se emite en la actividad "Ejecutar código de usuario", y no en la actividad propagada por el cliente, si fuese aplicable.
En la ilustración siguiente, la primera actividad de la izquierda es la actividad raíz (0000), que es la actividad predeterminada. Las tres actividades siguientes tienen como objetivo abrir el ServiceHost. La actividad de la columna 5 es el agente de escucha y las actividades restantes (de 6 a 8) describen el procesamiento de WCF de un mensaje, desde el procesamiento de bytes hasta la activación del código de usuario.
En la imagen siguiente se muestra una vista gráfica de las actividades del servicio WCF:
En la captura de pantalla siguiente se muestran las actividades para el cliente y el servicio, y se resalta la actividad Agregar acción de proceso entre procesos (naranja). Las flechas relacionan los mensajes de solicitud y respuesta enviados y recibidos por el cliente y el servicio. Los seguimientos de la actividad Procesar acción se separan en los procesos del gráfico, pero se muestran como parte de la misma actividad en el panel superior derecho. En este panel, podemos ver los seguimientos de cliente de los mensajes enviados seguidos de seguimientos de servicio para los mensajes recibidos y procesados.
En las imágenes siguientes se muestra una vista gráfica de las actividades de servicio y cliente de WCF.
Gráfico de Trace Viewer que muestra tanto las actividades del cliente como del servicio de WCF.
En el siguiente escenario de error, los registros de errores y advertencias en el servicio y el cliente están relacionados entre sí. Primero se inicia una excepción mediante código de usuario en el servicio (actividad verde situada más a la derecha que incluye un seguimiento de advertencia para la excepción "El servicio no puede procesar esta solicitud mediante código de usuario"). Cuando se envía la respuesta al cliente, un seguimiento de advertencia se vuelve a emitir para denotar el mensaje de error (actividad fucsia a la izquierda). A continuación, el cliente cierra su cliente WCF (actividad amarilla en el lado inferior izquierdo), que anula la conexión al servicio. El servicio genera un error (la actividad fucsia más larga en el lado derecho).
Correlación de errores entre el servicio y el cliente
El ejemplo usado para generar estos seguimientos es una serie de solicitudes sincrónicas mediante wsHttpBinding. Hay desviaciones de este gráfico para escenarios sin seguridad o con solicitudes asincrónicas, donde la actividad Acción de proceso abarca las operaciones de inicio y finalización que constituyen la llamada asincrónica y muestra las transferencias a una actividad de devolución de llamada. Para obtener más información sobre más escenarios, vea Escenarios de seguimiento de un extremo a otro.
Solución de problemas mediante el Visor de seguimiento de servicio
Al cargar archivos de seguimiento en la herramienta Visor de seguimiento de servicio, puede seleccionar cualquier actividad roja o amarilla en el panel izquierdo para realizar un seguimiento de la causa de un problema en la aplicación. La actividad 000 suele tener excepciones no controladas que se propagan al usuario.
En la imagen siguiente se muestra cómo seleccionar una actividad roja o amarilla para localizar la raíz de un problema.
En el panel superior derecho puede examinar los seguimientos de la actividad que seleccionó en la izquierda. A continuación, puede examinar las huellas rojas o amarillas en ese panel y examinar su correlación. En el gráfico anterior, vemos trazas de advertencia tanto para el cliente como para el servicio en la misma actividad de Acción de Proceso.
Si estos seguimientos no proporcionan la causa principal del error, puede usar el gráfico haciendo doble clic en la actividad seleccionada en el panel izquierdo (aquí Acción de proceso). A continuación, se muestra el gráfico con actividades relacionadas. A continuación, puede expandir las actividades relacionadas (haciendo clic en los signos "+") para encontrar la primera traza emitida en rojo o amarillo. Siga expandiendo las actividades que se produjeron justo antes del rastro rojo o amarillo de interés, siguiendo las transferencias a actividades relacionadas o los flujos de mensajes entre los puntos de conexión, con el fin de identificar la causa raíz del problema.
Expandir actividades para realizar un seguimiento de la causa principal de un problema
Si ServiceModel ActivityTracing
está desactivado, pero el seguimiento de ServiceModel está activado, puede ver seguimientos de ServiceModel emitidos en la actividad 0000. Sin embargo, esto requiere más esfuerzo para comprender la correlación de estas trazas.
Si el registro de mensajes está habilitado, puede usar la pestaña Mensaje para ver qué mensaje se ve afectado por el error. Al hacer doble clic en un mensaje en rojo o amarillo, puede ver la vista gráfica de las actividades relacionadas. Estas actividades son las más estrechamente relacionadas con la solicitud en la que se produjo un error.
Para iniciar la solución de problemas, también puede escoger un seguimiento de mensaje rojo o amarillo y hacer doble clic en él para llegar hasta la causa raíz.