Если вы используете старую клиентскую инфраструктуру веб-службы ASMX, то вы застряли с ее ограничениями. Одним из ограничений является то, что нет простого способа получить ответ, кроме как десериализованных данных.
Если бы это было необходимо, то вы могли бы использовать частичный класс для переопределения метода GetWebResponse
, чтобы вернуть свой собственный WebResponse
. Последний, в свою очередь, переопределяет метод GetResponseStream
для вызова базовой версии, использования потока, а затем для возврата потока, содержащего «пустой» веб-запрос (в противном случае .NET захлебнется потоком без содержание).
Вы также можете попробовать нечто подобное, переопределив метод GetReaderForMessage
. Ему передается экземпляр SoapClientMessage
, который имеет свойство Stream
, которое вы можете использовать. Опять же, вам придется настроить поток на то, что может потреблять инфраструктура веб-службы.
Лучший способ сделать это с клиентом WCF. WCF имеет гораздо более мощные и простые в использовании механизмы расширяемости.
На самом деле вам даже не нужно расширять клиент WCF. Вы можете просто настроить его так, чтобы вообще не было этой проблемы с буферизацией.