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 .. .
Por qué es 'maxMessagesToLog = "1"'? ¿Es a propósito? –
Sí, quería ver si CUALQUIER COSA en la sección estaba tomando efecto, y parece que no. –
lesscode