我有一个要求,我需要从Web服务器读取大流或数据。 这不是流式传输,而是从客户端以块的形式读取大数据。
为此,我创建了一个Http Web请求。以下是示例代码..
StreamingObject streamObj = null;
using (HttpWebRequest httpReq = WebRequest.Create(uri))
{
HttpWebResponse response = httpReq.GetRespons();
Stream responseStream = response.GetStream();
streamObj = new StreamingObject(response, responseStream);
}
return streamObj;
在我的代码中,我发出一个Http Web请求给予Uri。然后我得到了HttpWebResponse和Response Stream。创建一个StreamingObject实例,它是一个包装类,用于存储Http响应和响应流。
我已经处理了Http Web请求。客户端提供StreamingObject,流对象有一个方法GetStream,它返回底层响应流。当StreamingObject被释放时,Http响应和流被丢弃。
引入StreamingObject的原因是Http Response必须保持打开才能访问底层流。
我想知道这是一种正确的方法,还是有更简单的方法。
答案 0 :(得分:0)
我建议不要处置HttpWebRequest
对象,因为你可能非常需要它。只需将其添加到StreamingObject
并在处置StreamingObject
时将其丢弃。例如,我发现如果我想提前关闭响应流,响应将会挂起,直到读取完所有数据。但是在请求对象上调用Abort
将立即关闭流。