2008-09-29 5 views
6

Ich bin ein Fremdanbieter .NET WebService in meiner Clientanwendung verbrauchen. Zu Debug-Zwecken möchte ich die SOAP-Requests erfassen, die von meinem Server gesendet werden. Wie würde ich das machen? Dies geschieht in .NET 2.0 ohne die Verwendung von WCF oder WSE..NET-Protokoll Soap-Anforderung auf Client

Antwort

5

Wenn es für Debug-Zwecke ist würde ich konfigurieren Sie einfach die Web-Anfrage einen Proxy zu verwenden und die gesamte Anfrage senden obwohl Fiedler (http://www.fiddlertool.com), dann können Sie genau sehen, was über den Draht übertragen wird immer.

+0

Ich habe über 6 verschiedene Möglichkeiten, dies in Code zu tun, bevor aufgegeben und versuchen Geiger. Hätte ich darüber gelesen und gesehen, dass es verschlüsselten Verkehr unterstützt, hätte ich damit zuerst angefangen. – carson

1

Es gibt viele Optionen, die Sie verwenden können. Es gibt sicherlich einige kommerzielle Tools (wie SOAPScope), aber wenn Sie nur den rohen Inhalt der Anfragen/Antworten erfassen wollen, gibt es neben Fiddler noch einige andere Tools (die Walden bereits erwähnt hat).

Ich persönlich war lange Zeit Benutzer von Simon Fell TcpTrace und YATT.

Wenn Sie daran interessiert sind, den Code so zu instrumentieren, dass er es alleine macht (zB indem Sie alles auf eine Datei oder etwas protokollieren), dann sollten Sie in die Implementierung eines SoapExtension auf Ihrem Server schauen.

11

Ich schrieb einen Beitrag über das vor einer Weile dem Titel "Logging SOAP Messages in .NET".

Der einfachste Weg ist Verwenden Sie die Tools bereits mit .NET zur Verfügung gestellt.

1. erweitern die Klasse SoapExtension.

2. Überschreibung der Methode ProcessMessage eine vollständige Ausgabe Ihrer Soap Anfrage zu bekommen, dann Ausgabe dieser Informationen in einer Textdatei oder Ereignisprotokoll.

public class SoapMessageLogger : SoapExtension 
{ 
    //… 
    public override void ProcessMessage(SoapMessage message) 
    { 
    switch(message.Stage) 
    { 
     case SoapMessageStage.BeforeDeserialize: 
     LogResponse(message); break; 
     case SoapMessageStage.AfterSerialize: 
     LogResponse(message); break; 
     // Do nothing on other states 
     case SoapMessageStage.AfterDeserialize; 
     case SoapMessageStage.BeforeSerialize; 
     default: break; 
    } 
    } 
    //… 
} 
0

Vielleicht wireshark? Ich verwende es immer, um den Verkehr meiner Anwendungen zu erfassen.