具有大量文件和 wsse HTTPS 标头的后台 NSURLSession 用于身份验证

Posted

技术标签:

【中文标题】具有大量文件和 wsse HTTPS 标头的后台 NSURLSession 用于身份验证【英文标题】:Background NSURLSession with lots of files and wsse HTTPS header for authentication 【发布时间】:2016-03-17 16:39:58 【问题描述】:

我对我在 ios 应用程序上实现的功能感到非常疯狂:/

我正在尝试为用户添加在应用程序上下载一些文档的可能性,以便他即使在离线时也可以访问它。

例如,在应用程序中,用户可以浏览一些类别,从而将他带到文档。在该功能中,他可以选择下载类别 A。该应用程序将从服务器下载该类别中的所有内容以及文档。

一个类别可以从几十个文件到几千个文件!这就是为什么我们选择即使应用在后台也下载内容的原因。

下面是它使用 NSURLSession 的幕后工作原理: 我有一个名为 DownloadManager 的 NSObject,它处理 NSURLSession 的委托和会话本身。当我实例化它时,我使用后台配置创建会话。 我处理我想要下载的类别以获得创建下载任务并启动它所需的任何内容。 当它完成一个类别时,我还必须下载子类别等(最大深度为 3 级)以获取它们的所有信息。

问题是我不能一有任务就将任务放在 NSURLSession 中,因为服务器使用 wsse 身份验证系统来允许 GET 路由。这个标头有 5 分钟的生命周期,所以我必须在它进入 NSURLSession 对象之前创建它,并且(几乎)确保它直接在之后发送它,我将 NSURLSession 中的任务数量限制为每个主机同时连接。

在 Debug 模式下(使用 XCode 编译和启动),应用程序运行良好,在后台运行下载任务似乎没有问题,但是当我在测试模式下(使用 Crashlytics)测试它时,后台处理确实慢得多,有时似乎 NSURLSession 似乎不再发送事件了......

使用 NSURLSession 有什么难以理解的地方吗?会话在后台运行良好然后突然似乎死机并且不会发送事件或多或少长时间(它可以从几秒到整分钟!)再次“工作”,这是否正常? :x

编辑:另一件事是,当应用程序处于前台时,下载工作没有任何问题

感谢您给我的任何帮助, 比利克斯

【问题讨论】:

【参考方案1】:

好的,感谢爱斯基摩人,我在 Apple 开发者论坛上得到了答案。 我在这里链接帖子,以便进一步的开发人员可以轻松地看到解释:)

https://forums.developer.apple.com/message/125217#125217

【讨论】:

以上是关于具有大量文件和 wsse HTTPS 标头的后台 NSURLSession 用于身份验证的主要内容,如果未能解决你的问题,请参考以下文章

WSSE - XML SOAP 安全和密钥加密和存储 (EncryptedData/EncryptedKey)

标头实现和优化的内联关键字

在序列化期间将名称空间和前缀添加到soap消息头

缺少相互证书的 Wcf 请求 wsse:Security

C#调用JAVA接口WSSE方式用WebClient方式

编译具有相同标头的 C 和 C++ 文件时未定义的引用