2012-06-29 13 views
8

Sto provando a diagnosticare un servizio WCF che è auto-ospitato in un processo host di servizio relativamente semplice (Service.exe).WCF: come si rintracciano i corpi dei messaggi?

ho Service.exe.config configurato così:

<?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> 

Quando guardo il file risultante svclog, vedo molti eventi di traccia viene registrato (mi aspettavo solo il primo messaggio da registrare), e nessuno dei messaggi tracciati mostra un corpo del messaggio (solo intestazioni).

Sono sicuro che qui mi manca qualcosa di semplice, ma non lo vedo.

AGGIORNAMENTO: Quando guardo l'editor di configurazione WCF, ci sono due sezioni in "Diagnostica": MessageLogging e Traccia. Quando clicco il link "EnableMessageLogging", il mio file di configurazione viene aggiornato:

<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> 

Credo che la fonte di nome System.ServiceModel.MessageLogging è la chiave - non avevo visto che in ogni documentazione dei messaggi tracciamento .. .

+0

Perché 'maxMessagesToLog = "1"'? È di proposito? –

+0

Sì, volevo vedere se QUALUNQUE nella sezione stava avendo effetto e non sembra. – lesscode

risposta

6

tenta di aggiungere:

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

nel nodo diagnostics, sotto messageLogging.

+0

Non ha aiutato. L'ho provato anche con il servizio "Hello World" che si ottiene quando si crea un nuovo progetto di libreria di servizi WCF e non riesco nemmeno a ottenere i corpi dei messaggi registrati. Confuso. – lesscode

+0

Hai provato a usare l'editor di configurazione WCF di VS e vedi cosa viene generato per il tuo servizio .config? –

+0

Ah, si. Vedi la domanda aggiornata – lesscode

3

Impostare LogEntireMessage true sotto diagnostica degli> MessageLogging nel servizio di configurazione Editor

+4

Questo lo rende così mostra "... stream ..." nel visualizzatore –

+1

@Joe Phillips TransferMode è impostato su Streaming. La traccia funziona solo quando si imposta TransferMode su Buffered! Dovrai cambiare la configurazione. –

Problemi correlati