如何在httpwebrequest中读取ConnectStream

本文关键字:读取 ConnectStream httpwebrequest | 更新日期: 2023-09-27 18:14:42

当我试图读取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—这正是我所需要的。但是,我必须在某些时候关闭soapextensions,这就是问题开始出现的地方:ConnectStream根本无法读取。

如何在httpwebrequest中读取ConnectStream

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