我正在尝试使用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,我可以将其设置为我的下载操作?非常感谢一些帮助
答案 0 :(得分:3)
从Windows 8.1起,BackgroundTransfer不支持在创建操作后更新与DownloadOperation / UploadOperation关联的标头,即使操作已暂停/已恢复。您需要中止旧的下载并使用更新的JSESSIONID标头创建新的下载。
当您的应用程序启动时,它应该使用BackgroundDownloader.GetCurrentDownloadsAsync()来查询您的应用程序暂停/终止时可能在后台发生的所有DownloadOperations。然后,您的应用程序应在每个DownloadOperation上调用AttachAsync,以便附加进度和完成处理程序。在这种情况下,您应该在完成处理程序中实现逻辑,该逻辑可以识别此特定错误情况,并为相同内容创建新的下载(使用新的JSESSIONID)。
顺便说一句,如果你去寻找其他需要对此类失败的下载进行后期处理的人,你可能会遇到一些在后台任务中执行这些检查的人,他们注册这些检查是在定期计时器上运行的。虽然这听起来像个好主意(因为这意味着您可以重试下载而无需等待用户下次将应用程序带到前台),请记住 BackgroundTransfer可能会挂起如果您尝试到call AttachAsync in a Background Task for an operation which was started in your foreground application code。