如何使BackgroundDownloader中的DownloadOperation可以恢复

时间:2014-12-10 15:53:22

标签: windows-8 windows-runtime windows-8.1

我正在添加使用BackgroundDownloader / DownloadOperation功能将大文件下载到我的应用程序中的功能。我在Web Api控制器中使用PushStreamContent来提供使用GET操作请求的数据。

我已在Accept-Ranges标头中添加了从Web Api控制器收到的响应,但BackgroundDownloader似乎没有识别并尝试恢复下载。如果我拨打DownloadOperation.Pause()然后DownloadOperation.Resume(),则下载会从头开始,并且不会尝试恢复。

事实上,如果我查看AC\BackgroundTransferApi文件夹,我可以看到.down_data在执行暂停时被删除。查看down_meta文件,我可以看到Accept-Ranges: bytes标题存在,我可以在Fidder中查看请求时看到它。

在服务器端我需要做什么来向BackgroundDownloader表明它支持可恢复传输? MSDN文档只是说明Note Paused or incomplete download operations can only be resumed if the server accepts range-requests.,我相信我已经满意了。

1 个答案:

答案 0 :(得分:1)

DownloadOperation类有一个属性,告诉您操作是否可以恢复:DownloadOperation.GetResponseInformation().IsResumable

该文件不会从AC\BackgroundTransferApi中删除,而是会移至AC\Temp

第一个HTTP响应必须包含ETagAccept-Ranges标题:

ETag: "123ABC"
Accept-Ranges: bytes

当一个操作是resumen时,HTTP请求将包含:

Range: bytes=23000000-
If-Range: "123ABC"

下一个HTTP响应应包含以下内容:

ETag: "123ABC"
Accept-Ranges: bytes
Content-Range: bytes 23000000-499999999/500000000
Content-Length: 477000000