2012-05-22 4 views
7

Bitte antworten Sie nicht mit dem WCF-Trace-Tool, es sei denn, Sie geben explizite Anweisungen zur Erfassung der eigentlichen Nachricht einschließlich Kopfzeilen und Fehlern. Diese link funktioniert nicht.Wie kann ich die von einem WCF-Client gesendeten und empfangenen Nachrichten exakt protokollieren?

auch nicht beantworten IClientMessageInspector es sei denn, Sie wissen, wie es zu bekommen, um alle Header enthalten (, die es nicht) und Capture-Antworten, die Fehler Elemente aufweisen, die analysieren sind.

Mit pre-wcf Web-Services, könnten Sie eine SoapExtension schreiben, die einwandfrei funktionierte.

Antwort

3

schreiben Sie eine custom message encoder. Es hat Zugriff auf alle Header. Entscheiden Sie, wie generisch Sie Ihre Lösung sein wollen, müssen Sie es vielleicht so schreiben, dass es in den echten Encoder kommt.

vor ein paar Tagen habe ich einen "Wrapper Encoder" in this thread implementiert. Dieser Encoder hat die Nachricht geändert. Sie müssen das nicht tun, Sie können es einfach loggen und es an den Transport übergeben, wie ich es auch getan habe.

+0

Implementierung benötigen, Ich werde dies später einen Versuch geben müssen. Ich möchte gerne direkt in unser vorhandenes Protokoll in einem für Menschen lesbaren Format einloggen. – JohnOpincar

+0

brauchen Sie wcf Protokollierung, nicht die Verfolgung von wcf. Sehen Sie hier http://msdn.microsoft.com/en-us/library/ms730064.aspx, dann stellen Sie anstelle von System.Diagnostics.XmlWriterTraceListener Ihre eigene Klasse ein, die die Schnittstelle implementiert. Ich habe es selbst nicht getan, obwohl –

+0

Ich endete schließlich dabei - ein weiteres Beispiel dafür, wie unvollständig und schmerzhaft WCF ist. – JohnOpincar

1

fand ich this auch:

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

<system.serviceModel> 
    <diagnostics> 
     <messageLogging 
       logEntireMessage="true" 
       logMalformedMessages="true" 
       logMessagesAtServiceLevel="true" 
       logMessagesAtTransportLevel="true" 
       maxMessagesToLog="1000000" 
       maxSizeOfMessageToLog="10000000"/> 
    </diagnostics> 
</system.serviceModel> 

Es ist nicht ideal, da Sie ein Werkzeug verwenden, die Nachrichten zu sehen, aber es scheint die tatsächlichen Nachrichten mit allen Kopf- und Störungen zu erfassen, usw.

+0

Ich versuchte es Lösung, aber es enthält keine Header. – korvinko

Verwandte Themen