2012-06-29 9 views
8

Estoy tratando de diagnosticar un servicio WCF que se aloja automáticamente en un proceso de host de servicio relativamente simple (Service.exe).WCF: ¿Cómo puedo rastrear cuerpos de mensajes?

He Service.exe.config configurado así:

<?xml version="1.0" ?> 
<configuration> 
    <system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="All" 
       propagateActivity="true"> 
     <listeners> 
      <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData= "c:\temp\Service.svclog" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 
    <system.serviceModel> 
    <diagnostics> 
     <messageLogging maxMessagesToLog="1" 
         maxSizeOfMessageToLog="2147483647" 
         logEntireMessage="true" 
         logMessagesAtServiceLevel="true" 
         logMalformedMessages="true" 
         logMessagesAtTransportLevel="true"> 
     </messageLogging> 
    </diagnostics> 
    </system.serviceModel> 
    <startup> 
    <supportedRuntime version="v4.0" 
         sku=".NETFramework,Version=v4.0" /> 
    </startup> 
</configuration> 

Cuando miro el archivo resultante svclog, veo muchos eventos de seguimiento están registrando (que esperaba sólo el primer mensaje que se registra), y ninguno de los mensajes rastreados muestra un cuerpo de mensaje (solo encabezados).

Estoy seguro de que me falta algo simple aquí, pero no lo veo.

ACTUALIZACIÓN: Cuando miro el Editor de configuración WCF, hay dos secciones en "Diagnósticos": Registro de mensajes y Seguimiento. Cuando pulso en el enlace "EnableMessageLogging", mi fichero de configuración se actualiza:

<system.diagnostics> 
    <sources> 
     <source propagateActivity="true" name="System.ServiceModel" switchValue="All"> 
     <listeners> 
      <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
      <filter type="" /> 
      </add> 
      <add initializeData="c:\temp\MessageBodyTracing.svclog" type="System.Diagnostics.XmlWriterTraceListener" 
      name="traceListener"> 
      <filter type="" /> 
      </add> 
     </listeners> 
     </source> 
     <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing"> 
     <listeners> 
      <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
      <filter type="" /> 
      </add> 
      <add name="ServiceModelMessageLoggingListener"> 
      <filter type="" /> 
      </add> 
     </listeners> 
     </source> 
    </sources> 
    <sharedListeners> 
     <add initializeData="c:\users\me\documents\visual studio 2010\projects\messagebodytracing\messagebodytracing\app_messages.svclog" 
     type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp"> 
     <filter type="" /> 
     </add> 
    </sharedListeners> 
    </system.diagnostics> 

supongo que la fuente mencionada System.ServiceModel.MessageLogging es la clave - no había visto que en cualquier documentación de seguimiento de mensaje .. .

+0

Por qué es 'maxMessagesToLog = "1"'? ¿Es a propósito? –

+0

Sí, quería ver si CUALQUIER COSA en la sección estaba tomando efecto, y parece que no. – lesscode

Respuesta

6

tratar de añadir:

<endToEndTracing propagateActivity="true" activityTracing="true" messageFlowTracing="true" /> 

en su nodo diagnostics, bajo messageLogging.

+0

No ayudó. Incluso he intentado esto con el servicio "Hello World" que obtienes al crear un nuevo proyecto de biblioteca de servicios WCF, y tampoco consigo los cuerpos de mensajes allí registrados. Confuso. – lesscode

+0

¿Ha intentado utilizar el editor de configuración WCF de VS y ver qué se genera para su servicio .config? –

+0

Ah, sí. Consulte la pregunta actualizada – lesscode

3

Establecer LogEntireMessage a cierto bajo Diagnostics-> MessageLogging en la configuración de editor de servicios

+4

Esto lo hace para que se muestre "... transmisión ..." en el visor –

+1

@Joe Phillips TransferMode se establece en Transmisión. ¡El seguimiento solo funciona cuando se configura TransferMode en Buffered! Tendrás que cambiar tu configuración. –

Cuestiones relacionadas