wake-up-neo.com

WCF - Die gesendeten/empfangenen Nachrichten prüfen?

Ich habe 2 Lösungen: - Serverlösung - Client-Lösung

Der Server registriert sich bei meinem localhost IIS: http: // localhost/MyApp/

Der Client fügt WCF-Dienste (Dienstverweise) aus der localhost-Anwendung hinzu: http: //localhost/MyApp/MyService.svc

Wenn ich den Client betreibe, möchte ich in der Lage sein, die Nachrichten vor und zurück zu sehen. Ich habe Fiddler heruntergeladen, scheint aber nicht, dass gesendeter Datenverkehr angezeigt wird, es sei denn, ich verwende einen Webbrowser. Benutze ich Fiddler falsch oder gibt es ein anderes Werkzeug, das ich dafür verwenden sollte?


Um zu klären, was ich sehen möchte, ist zu sehen, dass die eigentlichen Nachrichten weitergeleitet werden. Ich möchte nichts mit ihnen anfangen, außer sie visuell mit meinen eigenen Augen zu sehen.

Ich mag das WCF Service Log Utility, aber ich glaube nicht, dass ich dort die richtige Einstellung habe. Ich kann die eigentliche Seifenmitteilung nicht sehen, nur dass eine Nachricht empfangen wurde.

Und um es noch weiter zu verdeutlichen, ist mir egal, welches Werkzeug ich verwende, solange ich die Meldungen selbst sehen kann.

37
michael

Um den Nachrichteninhalt anzuzeigen, müssen Sie eine Quelle für System.ServiceModel.MessageLogging in Ihrer Konfigurationsdatei hinzufügen. Auf der Nachrichtenregisterkarte im Trace-Viewer wird die vollständige Nachricht für einen bestimmten Serviceabruf angezeigt.

Hier ist eine Beispiel-Konfigurationsdatei:

<configuration>

...

   <system.diagnostics>
      <sources>
         <source name="System.ServiceModel"
                      switchValue="All"
                      propagateActivity="true">
            <listeners>
               <add name="traceListener" />
            </listeners>
         </source>
         <source name="System.ServiceModel.MessageLogging"
                      switchValue="All">
            <listeners>
               <add name="traceListener" />
            </listeners>
         </source>
      </sources>
      <sharedListeners>
         <add name="traceListener"
                 type="System.Diagnostics.XmlWriterTraceListener"
                 initializeData="c:\Traces.svclog" />
      </sharedListeners>
   </system.diagnostics>

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

...

</system.serviceModel>

...

</configuration>

Weitere Informationen finden Sie im Thema Konfigurieren der Ablaufverfolgung in MSDN. http://msdn.Microsoft.com/de-de/library/ms733025.aspx

39
Trevor

Vielleicht fehlt mir etwas, aber ... Warum verwenden Sie nicht die WCF-Ablaufverfolgungsfunktionen? Es ist ein fantastisches Werkzeug zur Fehlerbehebung. Ich habe es auch für Dienste verwendet, die in IIS/WAS gehostet werden.

WCF-Ablaufverfolgung aktivieren

Übrigens, einige Leute wissen es nicht, aber Sie können gleichzeitig Spuren von Server- und Clientseite öffnen, und der Viewer zeigt Ihnen die Korrelation zwischen den Server- und Clientaktionen in einem Nice-Diagramm an.

BEARBEITEN: Wann immer ich TCP/IP-Verkehr erfassen musste, verwende ich WireShark . Wenn Sie es programmgesteuert machen müssen, können Sie SharpPCAP verwenden, damit ich Maßnahmen ergreifen kann, die ich aus dem Netzwerk einnehme. Für die Fehlerbehebung ist es jedoch viel besser, sich auf WCF-Tracing zu verlassen.

14
Haplo

Wenn Sie Nachrichten programmgesteuert untersuchen möchten, können Sie implementieren eine IClientMessageInspector interface und Ihren Client registrieren.

Auf diese Weise können Sie auf alle Nachrichten zugreifen, unabhängig von der verwendeten Bindung. Mit mit Tools wie Fiddler können Sie Nachrichten nur über den HTTP-Transportkanal prüfen.

Beachten Sie, dass Sie mit dieser Technik die Nachrichten viel ändern oder mehr tun können (z. B. Benachrichtigungen auslösen). Wenn Sie nur die Nachricht im Auge behalten möchten, ist mit Ablaufverfolgung möglicherweise eine einfachere Vorgehensweise für Sie.

5
casperOne

Ist Ihr Service SOAP oder RESTful? Mit dem WCF Service Trace Viewer Tool können Sie die SOAP - Nachrichtenkopfzeilen und -körper anzeigen. Anweisungen zum Konfigurieren Ihres Web-Service für die Ablaufverfolgung finden Sie unter hier .

1
retrodrone

Sehen Sie sich diesen StackOverflow-Thread an: Verwendung von Fiddler zur Überwachung des WCF-Dienstes

Es beantwortet einige Ihrer Fragen. Sie können auch etwas wie WireShark verwenden, wenn Sie alles auf dem Draht untersuchen möchten, anstatt einen Proxy einzurichten, wie es Fiddler tut. 

0

In WCF können wir eine andere Methode verwenden, um aktuelle SOAP -Nachrichten zu sehen - custom MessageEncoder - einen Low-Level-Erweiterungspunkt der Pipeline. Im Gegensatz zu Nachrichteninspektoren (IDispatchMessageInspector/IClientMessageInspector) werden der ursprüngliche Byteinhalt einschließlich aller fehlerhaften XML-Daten angezeigt. Sie müssen eine standardmäßige textMessageEncoding als benutzerdefiniertes binding-Element einbetten und config anpassen, um diese benutzerdefinierte Bindung zu verwenden.

Sie können auch als Beispiel sehen, wie ich es in meinem Projekt getan habe - wrapping textMessageEncoding, logging encoder , benutzerdefinierte Bindung element und config .

0
baur