2008-11-20 3 views
15

Ich habe eine C# -Anwendung, die ein Client für einen Webdienst ist. Eine meiner Anforderungen besteht darin, die SOAP, die ich sende, zu erfassen, so dass ich im Falle eines Problems entweder den Fehler beheben oder zeigen kann, dass das Problem in dem Service liegt, den ich anrufe.Wie würde ich in C# den SOAP erfassen, der in einem Web Service-Aufruf verwendet wird?

Meine WebReference-Proxydienstklasse wird wie üblich von System.Web.Services.Protocols.SoapHttpClientProtocol abgeleitet. Wenn ich einen Zauberstab hätte, würde ich diese Basisklasse veranlassen, ein Ereignis OnPost zu implementieren, das ich behandeln könnte, um das SOAP in meine Protokolle zu schreiben und fortzufahren.

Sie können einen Paket-Sniffer wie WireShark nicht ausführen, gibt es eine einfache Möglichkeit, dieses Protokollierungsniveau zu erreichen?

+0

Mögliche Duplikat [Erste RAW Soap Daten von einem Client Web-Referenz in ASP.net läuft] (http://stackoverflow.com/questions/300674/getting-raw-soap-data- from-a-web-referenz-client-running-in-asp-net) – gecco

Antwort

15

Ich denke, was Sie suchen in dieser Frage gerichtet: obwohl

Getting RAW Soap Data from a Web Reference Client running in ASP.net

Es ist wie ein viel Code aussieht.

+0

SoapExtension ist nicht die ideale Lösung (muss den Status verwalten, betrifft ALLE Soap-Aufrufe und nicht nur diejenigen, die Sie protokollieren wollen), aber es funktioniert. Vielen Dank! –

1

Werfen Sie einen Blick auf SoapExtensions.

Sie sind, was Sie brauchen.

+0

Danke, das habe ich gebraucht. –

4

Wenn die Anwendung auf Ihrer lokalen Box ausgeführt wird und der Webdienst nichts Ungewöhnliches tut, können Sie Fiddler verwenden. Starten Sie IE, führen Sie Fiddler aus und Sie werden sehen, dass Ihre Web-Service-Aufrufe auch über den Fiddler-Proxy laufen.

Ich habe das heute Morgen benutzt, um fast dasselbe zu machen. Ich musste beweisen, dass die Daten, die mein Web-Service schickte, nicht durcheinander waren.

0

Aus irgendeinem Grund zeigte Fiddler meine lokalen Serviceaufrufe nicht an, wenn der mit Visual Studio gelieferte ASP.NET-Entwicklungsserver verwendet wurde. Um dies zu umgehen, habe ich den Web-Service-Url zur Laufzeit zum Fiddler-Port geändert, nur um die SOAP-Nachricht zu erfassen.

Sie können dies tun, aus den Direkt-Fenstern, zum Beispiel:

myservice.Url = "localhost: 8888" (oder was auch immer Port Sie haben Fiddler on)

ich das SoapUI Client verwendet Antworten zu testen .

2

Um diesen Verkehr in Fiedler siehe den folgenden Code verwenden:

mySoapHttpClientProtocol.Url = mySoapHttpClientProtocol.Url.Replace("localhost", "localhost.fiddler"); 

Andernfalls Visual Studio integrierten Web-Server werden alle Proxies umgehen.

0

Nur "." Fügen Sie die Adresse in Ihrem Endpunkt nach "localhost" hinzu. wie folgt aus:

 <endpoint address="http://localhost.:8868/FEInvoice.asmx" binding="basicHttpBinding" 
    bindingConfiguration="FEInvoice_Test" contract="EInvoiceIntegration.FEInvoiceSoap" 
    name="FEInvoice_Test" /> 
Verwandte Themen