В C # как мне перехватить SOAP, используемый в вызове веб-службы? - PullRequest
15 голосов
/ 21 ноября 2008

У меня есть приложение на C #, которое является клиентом веб-службы. Одно из моих требований - разрешить захват SOAP, который я отправляю, чтобы в случае возникновения проблемы я мог либо исправить ошибку, либо продемонстрировать, что проблема в службе, которую я вызываю.

Мой класс прокси-службы WebReference наследуется от System.Web.Services.Protocols.SoapHttpClientProtocol как обычно. Если бы у меня была волшебная палочка, я бы заставил этот базовый класс реализовать событие OnPost, которое я мог бы обработать, чтобы записать SOAP в мои журналы и продолжить.

Если не использовать анализатор пакетов, например WireShark, есть ли простой способ получить этот уровень ведения журнала?

Ответы [ 6 ]

15 голосов
/ 21 ноября 2008

Я думаю, что вы ищете адресовано в этом вопросе:

Получение данных мыла RAW из Web-клиента, работающего в ASP.net

Хотя, похоже, много кода.

4 голосов
/ 21 ноября 2008

Если приложение работает на вашем локальном компьютере, а веб-служба не делает ничего интересного, вы можете использовать Fiddler. Запустите IE, запустите Fiddler, и вы увидите, что вызовы вашей веб-службы также проходят через прокси-сервер Fiddler.

Я просто использовал это сегодня утром, чтобы сделать почти то же самое. Я должен был доказать, что данные, которые отправлял мой веб-сервис, не были испорчены.

2 голосов
/ 06 февраля 2014

Чтобы увидеть этот трафик в фиддлере, используйте следующий код:

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

В противном случае встроенный веб-сервер Visual Studio будет обходить все прокси.

1 голос
/ 21 ноября 2008

Взгляните на SoapExtensions .

Это то, что вам нужно.

0 голосов
/ 03 апреля 2014

Просто "." добавьте адрес в вашей конечной точке после "localhost". как это:

      <endpoint address="http://localhost.:8868/FEInvoice.asmx" binding="basicHttpBinding"
    bindingConfiguration="FEInvoice_Test" contract="EInvoiceIntegration.FEInvoiceSoap"
    name="FEInvoice_Test" />
0 голосов
/ 25 ноября 2009

По какой-то причине Fiddler не показывал мои локальные сервисные вызовы при использовании сервера разработки ASP.NET, поставляемого с Visual Studio. Чтобы обойти это, я изменил URL-адрес веб-службы во время выполнения на порт Fiddler, просто чтобы захватить сообщение SOAP.

Вы можете сделать это из окна «Немедленно», например:

myservice.Url = "localhost: 8888" (или любой другой порт, на котором установлен Fiddler)

Я использовал клиент SoapUI для проверки ответов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...