2008-11-20 7 views
15

Mam aplikację C#, która jest klientem usługi WWW. Jednym z moich wymagań jest umożliwienie przechwytywania wysyłanego SOAP, więc jeśli wystąpi problem, mogę naprawić błąd lub zademonstrować, że problem dotyczy usługi, do której dzwonię.W języku C#, w jaki sposób przechwyciłabym SOAP używany w wywołaniu usługi WWW?

Moja klasa usługi proxy WebReference pochodzi z System.Web.Services.Protocols.SoapHttpClientProtocol, jak zwykle. Gdybym miał magiczną różdżkę, uczyniłbym tę klasę bazową implementującą zdarzenie OnPost, które mógłbym obsłużyć, aby zapisać SOAP w moich dziennikach i kontynuować.

Niedobór sniffera pakietów takiego jak WireShark, czy istnieje prosty sposób na uzyskanie tego poziomu logowania?

+0

Możliwy duplikat [Pierwsze RAW Soap danych z Klientem Web Reference działa w ASP.NET] (http://stackoverflow.com/questions/300674/getting-raw-soap-data- from-a-web-reference-client-running-in-asp-net) – gecco

Odpowiedz

4

Jeśli aplikacja działa na Twoim lokalnym komputerze, a usługa internetowa nie działa dobrze, możesz użyć Fiddlera. Fire Up IE, uruchom Fiddlera, a zobaczysz, że twoje połączenia z serwisem sieciowym również przechodzą przez proxy skrzypka.

Właśnie wykorzystałem to rano, aby zrobić prawie to samo. Musiałem udowodnić, że dane, które wysyłała moja usługa sieciowa, nie zostały pomieszane.

0

Z jakiegoś powodu Fiddler nie wyświetlał moich lokalnych wywołań serwisowych podczas korzystania z programu ASP.NET Development Server dostarczanego z Visual Studio. Aby obejść ten problem, zmieniłem adres URL usługi sieci Web w czasie wykonywania na port Skrzypek, aby uchwycić komunikat SOAP.

Można to zrobić od okienku bezpośrednim, na przykład:

myservice.Url = "localhost: 8888" (lub cokolwiek portu masz Fiddler on)

użyłem klienta SoapUI przetestować reakcje .

2

Aby zobaczyć ten ruch w Fiddler użyć następującego kodu:

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

W przeciwnym razie, Visual Studio wbudowany serwer WWW ominie wszystkie serwery proxy.

0

Po prostu "." dodaj adres w twoim punkcie końcowym po "localhost". tak:

 <endpoint address="http://localhost.:8868/FEInvoice.asmx" binding="basicHttpBinding" 
    bindingConfiguration="FEInvoice_Test" contract="EInvoiceIntegration.FEInvoiceSoap" 
    name="FEInvoice_Test" /> 
Powiązane problemy