如何在HttpWebReqest中读取ConnectStream

时间:2011-11-16 11:54:05

标签: c# .net stream httpwebrequest httpwebresponse

在尝试读取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 个答案:

答案 0 :(得分:1)

响应流只能读取一次。您需要使用MemoryStream进行所有处理。