我正在添加使用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.
,我相信我已经满意了。
答案 0 :(得分:1)
DownloadOperation
类有一个属性,告诉您操作是否可以恢复:DownloadOperation.GetResponseInformation().IsResumable
该文件不会从AC\BackgroundTransferApi
中删除,而是会移至AC\Temp
。
第一个HTTP响应必须包含ETag
和Accept-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