当我试图读取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根本无法读取。
响应流只能被读取一次。您需要使用MemoryStream
进行所有处理。