2011-06-02 21 views
35

tengo 2 soluciones: - Solución Servidor - Client SolutionWCF: ¿inspeccionar los mensajes enviados/recibidos?

El servidor registra a sí mismo a mi localhost IIS: http://localhost/MyApp/

El cliente agrega WCF Services (Servicio de Referencias) de la aplicación localhost: http://localhost/MyApp/MyService.svc

Cuando ejecuto el cliente, deseo poder ver los mensajes que se pasan de un lado a otro. Descargué Fiddler, pero parece que no quiere mostrarme ningún tráfico enviado a menos que realmente use un navegador web. ¿Estoy usando Fiddler incorrectamente o hay otra herramienta que debería usar para esto?


Para aclarar, lo que estoy tratando de hacer es ver los mensajes reales que se pasa. Yo no quiero hacer nada con ellos, excepto verlos visualmente con mis propios ojos.

Me gusta la utilidad de registro de servicio WCF, pero no creo que tenga la configuración correcta allí. No puedo ver el mensaje actual, solo que se recibió un mensaje.

Y también para aclarar más, no me importa qué herramienta utilizo siempre que pueda ver fácilmente los mensajes.

Respuesta

13

Tal vez me falta algo, pero ... ¿Por qué no utiliza las funciones de seguimiento WCF? Es una fantástica herramienta de solución de problemas. Lo he usado para servicios alojados en IIS/WAS también.

Enabling WCF Tracing

Por cierto, algunas personas no lo saben, pero se puede abrir rastros de lado del servidor y del cliente al mismo tiempo, y el visor le mostrará la correlación entre las acciones de servidor y cliente en un buen grafico

EDITAR: cada vez que tuve que capturar el tráfico TCP/IP, uso WireShark. Si necesita hacerlo de manera programática, puede usar SharpPCAP, de modo que pueda realizar acciones según lo que capture de la red. Pero para solucionar problemas, es mucho mejor confiar en WCF Tracing.

+1

+1 Este es un problema para resolver con el seguimiento, no el código. –

+1

@Drew Marsh: Eso es imposible de decir, IMO, ya que no sabemos exactamente para qué finalidad @michael desea ver los mensajes. Una cosa es verlos con fines de rastreo, otra porque posiblemente los modifiques o realices otro tipo de notificación. – casperOne

+0

@casperOne El OP intentaba usar Fiddler para verlas, así que creo que está bastante claro que lo están haciendo con fines de diagnóstico. –

0

mirada a este hilo StackOverflow: How to use Fiddler to monitor WCF service

Responde a algunas de sus preguntas. también puede usar algo como WireShark si desea examinar todo en el cable en lugar de configurar un Proxy, como lo hace Fiddler.

1

¿Su servicio es SOAP o RESTful? Puede usar el WCF Service Trace Viewer Tool para ver los encabezados y cuerpos del mensaje SOAP. Las instrucciones para configurar su servicio web para el rastreo son here.

+0

Estoy intentando ver los mensajes SOAP pasando a mi servidor. – michael

+0

@michael, sí, puedes usar el visor de trazas WCF para eso. Actualicé el enlace con mejores instrucciones. Necesita instrumentar su web.config para habilitar el rastreo en su servicio SOAP. Al usar la herramienta, verá todos los mensajes de solicitud que golpean ese servicio. – retrodrone

+2

@retrodone: las instrucciones aún apuntan a las mismas URL (de hecho, son el mismo enlace). Hice lo que decía en esos enlaces y obtuve el archivo Trace.svcLog, sin embargo, no veo el mensaje actual, incluso si configuro SwitchValue en All. Veo que apareció un mensaje pero no veo dónde puedo ver el mensaje de jabón * actual * en formato xml. – michael

5

Si desea inspeccionar mensajes programáticamente, puede implement un IClientMessageInspector interface y registrarlo con su cliente.

Esto le permite acceder a todos los mensajes, sin importar qué enlace esté utilizando, mientras que using tools like Fiddler solo le permitirá inspeccionar los mensajes utilizando el canal de transporte HTTP.

Tenga en cuenta que al usar esta técnica, puede hacer mucho para modificar los mensajes o hacer mucho más (notificaciones desactivadas, por ejemplo). Si todo lo que desea hacer es poner sus ojos en el mensaje, entonces using tracing podría ser un enfoque más fácil para usted.

+5

El IClientMessageInspector no captura el resultado final. Confiaba en este método para ver mis mensajes salientes y no estaba capturando un encabezado de seguridad. Perdí un par de días por esto. Supuse que el encabezado no estaba allí, pero finalmente apunté a mi cliente a un servidor de servicios web ASMX que tenía el buen registro de mensajes antiguo que realmente funcionaba antes de WCF y vi que mi encabezado estaba realmente allí. – JohnOpincar

36

Para ver el contenido del mensaje, debe agregar una fuente para System.ServiceModel.MessageLogging en su archivo de configuración. La pestaña de mensajes en Trace Viewer mostrará el mensaje completo para una llamada de servicio en particular.

Aquí es un archivo de configuración de ejemplo:

<configuration> 

... 

    <system.diagnostics> 
     <sources> 
     <source name="System.ServiceModel" 
         switchValue="All" 
         propagateActivity="true"> 
      <listeners> 
       <add name="traceListener" /> 
      </listeners> 
     </source> 
     <source name="System.ServiceModel.MessageLogging" 
         switchValue="All"> 
      <listeners> 
       <add name="traceListener" /> 
      </listeners> 
     </source> 
     </sources> 
     <sharedListeners> 
     <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData="c:\Traces.svclog" /> 
     </sharedListeners> 
    </system.diagnostics> 

    <system.serviceModel> 
    <diagnostics> 
     <messageLogging logEntireMessage="true" 
            logMalformedMessages="true" 
            logMessagesAtServiceLevel="true" 
            logMessagesAtTransportLevel="true" 
            maxMessagesToLog="500"/> 
    </diagnostics> 

... 

</system.serviceModel> 

... 

</configuration> 

vea el tema Configuración de rastreo en MSDN para obtener más información. http://msdn.microsoft.com/en-us/library/ms733025.aspx

+12

Tuve que eliminar 'propagateActivity =" true "' from 'System.ServiceModel.MessageLogging' y luego funcionó para mí – Zane

+0

Esta solución funcionó para mí (junto con la anotación de Zane), donde otras soluciones propuestas que encontré estaban incompletas. –

+0

Si confirmó que 'propagateActivity =" true "' debería eliminarse, ¿por qué no corregir la respuesta? Gracias. – Rbjz

Cuestiones relacionadas