Icono del sitio Programando a medianoche

Cómo realizar el seguimiento de llamadas a servicios utilizando WCF Tracing

Frecuentemente nos encontramos con la necesidad de poder analizar el intercambio de información cuando estamos desarrollando un proyecto que involucra la consumición de un servicio web, especialmente si este es de terceros.
Utilizando Windows Communication Foundation (WCF), tenemos la opción de habilitar el seguimiento de las llamadas, indicándolo mediante la configuración del archivo Web.config:

Dentro de <configuration>:

  <system.diagnostics>
    <sources>
      <source name="System.IdentityModel" switchValue="Verbose" logKnownPii="true">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
      <!-- Log all messages in the 'Messages' tab of SvcTraceViewer. -->
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
      <!-- ActivityTracing and propogateActivity are used to flesh out the 'Activities' tab in
           SvcTraceViewer to aid debugging. -->
      <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
      <!-- This records Microsoft.IdentityModel generated traces, including exceptions thrown
           from the framework. -->
      <source name="Microsoft.IdentityModel" switchValue="Warning">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="trace.e2e" />
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>

Dentro de <system.serviceModel>:

 <diagnostics>
      <messageLogging 
			  logMessagesAtTransportLevel="true" 
			  logMessagesAtServiceLevel="false"
			  logMalformedMessages="true" 
			  logEntireMessage="true"
			  maxSizeOfMessageToLog="65535000" 
			  maxMessagesToLog="500" />
 </diagnostics>

El sistema de diagnóstico se encargará de loguear el contenido de las llamadas al archivo trace.e2e en la carpeta raíz de nuestro proyecto.
La herramienta SvcTraceViewer nos permite revisar este archivo con facilidad.

Se muestra la interfaz de la herramienta SvcTraceViewer.exe

Podemos observar que en la sección «Message Log Trace» Se encuentra la información que necesitamos:

Se observa la sección «Message Log Trace»

Dentro del xml, nuestra información se encuentra en el cuerpo (s:Body):

Cuerpo del mensaje que contiene la información que estamos enviando

Salir de la versión móvil