Как перехватить исходящие и входящие сообщения мыла от клиентского веб-прокси C #

2

Я пишу пользовательский интерфейс для проверки веб-службы asmx. Сервер и клиент -.NET. Прокси-сервер клиента сгенерирован с использованием wsdl.exe.

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

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

Любые подсказки и помощь с благодарностью получили.

(Я частично реализовал SoapExtension. Я не понимаю, как работает метод ChainStream, и я не уверен, как уведомить слушателя о том, что мыло было захвачено (так как я не контролирую создание экземпляра мыла).

Теги:
web-services
soap-client
proxy-classes

4 ответа

1
Лучший ответ

Вы на правильном пути с SoapExtension. Вы видели документацию и пример здесь? http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension.aspx

Идея с ChainStream заключается в том, что вы передаете сетевой поток, на который будет отправлен запрос, и у вас есть возможность вернуть другой поток. Поэтому, если вы хотите сохранить копию запроса, верните MemoryStream, который клиент веб-служб запишет в запрос, а затем в вызове ProcessMessage вы можете скопировать данные и передать его в свой интерфейс.

  • 0
    Спасибо, я основал свое решение на примере MSDN. Я создал статический класс, инкапсулирующий словарь для хранения исходящих и входящих сообщений, которые впоследствии читает мой пользовательский интерфейс.
1

Другой способ захвата XML отправляется через приложение Wireshark. Он перехватывает сетевую карту связи.

В моем случае я позвонил службе, которая имела часть своего адреса для строки PIOSOS. Я использовал окно Find Packet и выполнил поиск.

Затем расположен XML.

Смотрите изображение.

(я знаю... это не программный способ, но он имеет свою ценность. Lol)

Изображение 174551

0

Вам действительно будет лучше использовать WCF в качестве вашей клиентской технологии. Затем вы можете просто использовать трассировку уровня сообщений WCF для регистрации входящих и исходящих сообщений. Это делается просто через конфигурацию.

Нет причин, по которым вы должны использовать ASMX-клиент только потому, что используете службу ASMX.

0

Я бы предложил два трюка:

  • подклассификация прокси и перегрузка ваших методов (немного скучная, но вы можете генерировать код, как в этом проекте: http://ftwsf.codeplex.com/)
  • используя подписи Async и подписывайтесь на "Завершенные" события для каждого метода (вы можете сделать это путем отражения, чтобы избежать написания кода)

Если вам нужна дополнительная информация об этих трюках, просто дайте мне знать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню