2011-11-08 10 views
16

enter image description hereCome registrare il contenuto del messaggio WCF?

Ho pensato che sarebbe stato semplice, ma non riesco a vedere come dire a WCF di registrare i corpi dei messaggi. Ho:

<system.diagnostics> 
    <sources> 
    <source name="System.ServiceModel" switchValue="Verbose"> 
     <listeners> 
     <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
      <filter type="" /> 
     </add> 
     <add type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.EntLibLoggingProxyTraceListener,Microsoft.Practices.EnterpriseLibrary.Logging" 
      name="traceListener"> 
      <filter type="" /> 
     </add> 
     </listeners> 
    </source> 
    </sources> 
</system.diagnostics> 
<system.serviceModel> 
    <diagnostics> 
    <messageLogging logEntireMessage="true" logMalformedMessages="true" 
     logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="false" /> 
    </diagnostics> 
    ...etc.., 
    ...etc... 
</system.Model> 
<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General"> 
    <listeners> 
    <add fileName="_trace-xml.log" 
       listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.XmlTraceListenerData,Microsoft.Practices.EnterpriseLibrary.Logging" 
       traceOutputOptions="None" 
       type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.XmlTraceListener,Microsoft.Practices.EnterpriseLibrary.Logging" 
     name="XML Trace Listener" />  
    ...etc... other listeners 
    </listeners> 
    ...etc... 
</loggingConfiguration> 

Ma tutto ciò che viene registrato è qualcosa sul messaggio, non sul corpo del messaggio. Cosa devo cambiare per registrare il contenuto del messaggio?

risposta

0

Se hai bisogno di corpi di messaggi, dovrai catturarli tu stesso, in modo programmatico. Utilizzare un comportamento del servizio per installare un'ispettore messaggi e acquisire i messaggi all'interno dell'implementazione di IDispatchMessageInspector o IClientMessageInspector.

+0

Ahimè. Così fa qualcosa come questo blog http://wcfpro.wordpress.com/2011/03/29/iclientmessageinspector/ dammi * tutto * ho bisogno o c'è altro che ho bisogno di sapere in termini di configurazione o codice per registrare i corpi dei messaggi ? –

+0

Questo link è praticamente tutto ciò di cui hai bisogno. L'unica cosa che non mostra è come installare il comportamento dell'endpoint, che è piuttosto semplice (endpoint.Behaviors.Add). – JohnC

+4

Questa risposta è sbagliata. La configurazione di un sorgente per 'System.ServiceModel.MessageLogging' e un listener per registrare i messaggi funziona correttamente per me. Non è richiesto alcun ispettore di messaggi. –

25

Proprio seguendo questa descrizione funziona perfettamente per me: http://msdn.microsoft.com/en-us/library/ms730064.aspx

<system.diagnostics> 
<sources> 
    <source name="System.ServiceModel.MessageLogging"> 
    <listeners> 
      <add name="messages" 
      type="System.Diagnostics.XmlWriterTraceListener" 
      initializeData="c:\logs\messages.svclog" /> 
     </listeners> 
    </source> 
</sources> 
</system.diagnostics> 

<system.serviceModel> 
<diagnostics> 
<messageLogging 
    logEntireMessage="true" 
    logMalformedMessages="false" 
    logMessagesAtServiceLevel="true" 
    logMessagesAtTransportLevel="false" 
    maxMessagesToLog="3000" 
    maxSizeOfMessageToLog="2000"/> 
</diagnostics> 
</system.serviceModel> 

Non c'è bisogno di scrivere codice per questo ...

+4

Se faccio questo, ricevo un'infinità di informazioni su cosa sta facendo WCF, ma nulla sul contenuto dei messaggi: –

+0

Questo è strano. Puoi pubblicare uno screenshot del tuo svcviewer.exe che ha caricato messages.svclog e mostra il contenuto della scheda dei messaggi? – kroonwijk

+0

... Un messaggio è stato letto ... sistema .ServiceModel.Channels.BufferedMessage/48266778 ...

3

ho trovato un problema delle versioni. Quando il progetto del servizio WCF è stato costruito contro .Net 3.5 ho visto il corpo del messaggio completo nello strumento di visualizzazione. Costruito contro .Net 4.0 Non ho visto il corpo del messaggio.

+1

Ahhh così irritante! Questo sembra essere quello! .. uno di quelli "ne hai solo bisogno quando qualcosa va storto". –

+1

Per le persone che hanno problemi con questo su .Net 4.0. Fate attenzione, Tracing è: '' I messaggi sono: '' http: // StackOverflow .com/domande/11264260/WCF-how-do-i-trace-message-corpi –

Problemi correlati