2011-03-13 84 views
0

我有一个需求,我需要从Web服务器读取大型流或数据。 这不是流式传输,而是从客户端读取大块数据。HttpWebRequest和响应读取大型流

为此,我创建一个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和响应流。创建一个StreamingObject实例,它是用于存储Http响应和响应流的包装类。

我已经部署了Http Web请求。客户端提供StreamingObject,流对象有一个方法GetStream,它返回底层的响应流。当StreamingObject被放置时,Http响应和流被处理。

引入StreamingObject的原因是Http Response必须保持打开才能访问基础流。

我想知道这是一种正确的方法,还是有更简单的方法。

+0

这是C#,对吗? – 2011-03-13 14:47:21

+2

你真的应该接受你的其他问题的答案。 – 2011-03-13 15:08:03

回答

0

我建议不要处置HttpWebRequest对象,因为您可能非常需要它。只需将其添加到StreamingObject并在您处置StreamingObject时予以处置。例如,我发现如果我想过早地关闭响应流,则响应将挂起,直到读取完所有数据。但在请求对象上调用Abort将立即关闭流。