Как читать ConnectStream в HttpWebReqest - PullRequest
0 голосов
/ 16 ноября 2011

Я врезаюсь в стену при попытке прочитать базовые потоки классов HttpWebRequest и HttpWebResponse. Оказывается, это не потоки памяти; они имеют тип ConnectStream. Проблема с этим типом потока в том, что он не поддерживает чтение, запись, поиск, ничего. Каждый раз, когда я пытаюсь что-то сделать с этим типом потока, я получаю неподдерживаемые исключения.

Есть ли способ использовать какой-то другой тип потока вместо ConnectStream, который на самом деле был бы читабельным?

Код:

public class BaseAsmxProxy : SoapHttpClientProtocol
{
    protected override System.Xml.XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize)
    {
        string responseXml = GetResponseDataFromStream(message.Stream);

        return base.GetReaderForMessage(message, bufferSize);
    }

    private string GetResponseDataFromStream(System.IO.Stream stream)
    {
        string returnValue = null;

        long initialPosition = stream.Position;
        stream.Seek(0, SeekOrigin.Begin);

        StreamReader reader = new StreamReader(stream);
        returnValue = reader.ReadToEnd();

        stream.Seek(initialPosition, SeekOrigin.Begin);

        return returnValue;
    }
}

Обратите внимание, что когда я использую SoapExtension (для некоторых других функций), он переключает типы потоков, и я случайно получаю здесь MemoryStream, который на самом деле читаем - что именно то, что мне нужно. Однако в какой-то момент мне придется отключить SoapExtentensions, и вот тут начинаются проблемы: ConnectStream просто не читается.

1 Ответ

1 голос
/ 16 ноября 2011

Поток ответа может быть прочитан только один раз. Вам нужно использовать MemoryStream для всей обработки.

...