Я пишу пользовательский интерфейс для проверки веб-службы asmx. Сервер и клиент -.NET. Прокси-сервер клиента сгенерирован с использованием wsdl.exe.
Я хотел бы перехватить и сохранить строковое представление исходящих и входящих сообщений SOAP, сгенерированных в результате вызова методов в веб-прокси, поэтому я могу добавить функцию к пользовательскому интерфейсу, который покажет сообщение просто отправлено/получено.
Я смутно помню, что есть две пары точек расширения, где код может быть добавлен, чтобы intecept сообщение, но я не могу вспомнить, как это было сделано. Я думаю, что примеры, которые я имею в виду, включали сжатие некоторой части сообщения на клиенте и обратное на сервере, хотя в моем сценарии я хочу сохранить, а не изменять сообщение.
Любые подсказки и помощь с благодарностью получили.
(Я частично реализовал SoapExtension. Я не понимаю, как работает метод ChainStream, и я не уверен, как уведомить слушателя о том, что мыло было захвачено (так как я не контролирую создание экземпляра мыла).
Вы на правильном пути с SoapExtension. Вы видели документацию и пример здесь? http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension.aspx
Идея с ChainStream заключается в том, что вы передаете сетевой поток, на который будет отправлен запрос, и у вас есть возможность вернуть другой поток. Поэтому, если вы хотите сохранить копию запроса, верните MemoryStream, который клиент веб-служб запишет в запрос, а затем в вызове ProcessMessage вы можете скопировать данные и передать его в свой интерфейс.
Другой способ захвата XML отправляется через приложение Wireshark. Он перехватывает сетевую карту связи.
В моем случае я позвонил службе, которая имела часть своего адреса для строки PIOSOS. Я использовал окно Find Packet и выполнил поиск.
Затем расположен XML.
Смотрите изображение.
(я знаю... это не программный способ, но он имеет свою ценность. Lol)
Вам действительно будет лучше использовать WCF в качестве вашей клиентской технологии. Затем вы можете просто использовать трассировку уровня сообщений WCF для регистрации входящих и исходящих сообщений. Это делается просто через конфигурацию.
Нет причин, по которым вы должны использовать ASMX-клиент только потому, что используете службу ASMX.
Я бы предложил два трюка:
Если вам нужна дополнительная информация об этих трюках, просто дайте мне знать.