0

我正在尝试使用 cookie 身份验证进行一些下载:

var downloader = new BackgroundDownloader();
downloader.SetRequestHeader("Cookie", "JSESSIONID=" + App.LoginGateway.JSESSIONID);
downloader.SetRequestHeader("Cookie", "JSESSIONID=" + App.LoginGateway.JSESSIONID);

直到这里一切正常,当我尝试恢复下载并且我的 JSESSIONID 已过期时,问题就开始了

IReadOnlyList<DownloadOperation> downloads = null;
downloads = await BackgroundDownloader.GetCurrentDownloadsAsync();

我试图找到在哪里可以再次设置请求标头,但我没有能力。如果我创建一个新的 BackgroundDownloader 我可以在哪里为我的下载操作设置它?非常感谢一些帮助

4

1 回答 1

3

从 Windows 8.1 开始,BackgroundTransfer 不支持在创建操作后更新与 DownloadOperation/UploadOperation 关联的标头,即使该操作已暂停/恢复。您需要中止旧下载并使用更新的 JSESSIONID 标头创建新下载。

当您的应用程序启动时,它应该使用 BackgroundDownloader.GetCurrentDownloadsAsync() 来查询在您的应用程序暂停/终止时可能在后台发生的所有下载操作。然后,您的应用程序应在每个 DownloadOperation 上调用 AttachAsync 以附加进度和完成处理程序。在这种情况下,您应该在您的完成处理程序中实现可以识别此特定错误情况并为相同内容创建新下载(使用新 JSESSIONID)的逻辑。

顺便说一句,如果你去寻找其他需要像这样对失败的下载进行后处理的人,你可能会遇到一些在后台任务中执行这些检查的人,他们注册为在定期计时器上运行。虽然这听起来不错(因为这意味着您可以重试下载而无需等待用户下次将您的应用程序带到前台),但请记住,如果您尝试在后台任务中调用 AttachAsync , BackgroundTransfer 可能会挂起对于在前台应用程序代码中启动的操作

于 2013-10-29T05:39:23.340 回答