通过HTTPS增量处理大型XML文件?

时间:2012-04-17 17:02:28

标签: c# .net xml http azure

我必须从安全的Web服务器下载,处理和存储8GB的XML文件。我可以使用WebRequest类下载该文件,但这将花费很长时间。此外,我知道该文件的结构使其适合离散块中的处理。

我如何'流式传输'这个文件,这样我只能获得一些可以处理的小块,而不必一次获得整个流?

修改

我忘了提 - 我们托管在Azure上。想到的一个想法是提供一个工作者角色,它只下载大文件并且可以根据需要进行。这有多可行?

4 个答案:

答案 0 :(得分:3)

8 GB是一个很大的工作量。为了保护自己免于返工和有效扩展,我会将XML文件下载从它的处理中解耦。

在作为流下载时,我会将某种流标识符写入持久存储,并通过将包含其相关数据的消息放在队列中来安排完成每个原子工作单元。 这将允许从下载中恢复出于任何原因或单位工作不成功和/或干扰下载。

答案 1 :(得分:2)

我正在使用HttpWebRequest,BeginGetResponse然后使用GetResponseStream

然后,当它通过stream.BeginRead

向下滴时,可以读取块中的流。

这是一个非常复杂的例子: http://stuff.seans.com/2009/01/05/using-httpwebrequest-for-asynchronous-downloads/

答案 2 :(得分:1)

如果需要按顺序处理文件,只需在响应流上打开XMLReader并根据需要读取数据。

如果您需要随机访问该文件(即在中间阅读),您可能需要做更多工作来创建可搜索流(如果服务器在请求中支持RANGE选项)或者只是像现在一样下载整个文件。 / p>

请注意,8GB是大量数据,无论读取方法如何,下载都会花费大量时间。

答案 3 :(得分:1)

您可以将xml文件上传到块blob并从那里下载。这篇博客文章可能会有所帮助http://blogs.msdn.com/b/kwill/archive/2011/05/30/asynchronous-parallel-block-blob-transfers-with-progress-change-notification.aspx

希望这有帮助。