在尝试读取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根本无法读取。
答案 0 :(得分:1)
响应流只能读取一次。您需要使用MemoryStream
进行所有处理。