你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Device Update for IoT Hub 错误代码

本文档提供各种设备更新组件的错误代码表。

有两个主要客户端组件可能会引发错误代码:设备更新代理和传递优化代理。 Device Update 内容服务也会引发错误代码。

设备更新代理

ResultCode 和 ExtendedResultCode

IoT 中心核心 PnP 接口的设备更新会报告 ResultCodeExtendedResultCode(可用于诊断故障)。 有关设备更新核心 PnP 接口的详细信息,请参阅设备更新和即插即用。 如需详细了解设备更新代理 ResultCode 和 ExtendedResultCode 的默认含义,请参阅设备更新 GitHub 存储库

ResultCode 是一般状态代码,ExtendedResultCode 是包含已编码错误信息的整数。

ExtendedResultCode 将在 PnP 接口中显示为带符号整数。 若要解码 ExtendedResultCode,请将带符号整数转换为无符号十六进制数。 只使用 ExtendedResultCode 的前 4 个字节,其格式为 F FFFFFFF,其中,第一个半字节是设施代码,其余的位是错误代码

设施代码

设施代码 说明
D DO SDK 引发的错误
E 错误代码是 errno

例如:

ExtendedResultCode-536870781

-536870781 的无符号十六进制表示形式为 FFFFFFFF E0000083

忽略 设施代码 错误代码
FFFFFFFF E 0000083

十六进制的 0x83 是十进制的 131,即 ENOLCK 的 errno 值。

传递优化代理

下表列出了与设备更新客户端的传递优化 (DO) 组件相关的错误代码。 DO 组件负责将更新内容下载到 IoT 设备。

可以通过检查对 API 调用做出的响应中引发的异常来获取 DO 错误代码。 可以根据 0x80D0 前缀识别所有 DO 错误代码。

错误代码 字符串错误 类型 说明
0x80D01001L DO_E_NO_SERVICE 不适用 传递优化无法提供服务
0x80D02002L DO_E_DOWNLOAD_NO_PROGRESS 下载作业 文件下载操作在定义的时段内没有进展
0x80D02011L DO_E_UNKNOWN_PROPERTY_ID 下载作业 使用未知属性 ID 调用了 SetProperty() 或 GetProperty()
0x80D02012L DO_E_READ_ONLY_PROPERTY 下载作业 无法对只读属性调用 SetProperty()
0x80D02013L DO_E_INVALID_STATE 下载作业 当前作业状态下不允许执行请求的操作。 作业可能已取消,或已完成传输。 它目前处于只读状态。
0x80D02018L DO_E_FILE_DOWNLOADSINK_UNSPECIFIED 下载作业 由于未指定下载接收器(本地文件或流接口),无法开始下载
0x80D02200L DO_E_DOWNLOAD_NO_URI IDODownload 接口 下载已开始,但未提供 URI
0x80D03805L DO_E_BLOCKED_BY_NO_NETWORK 暂时情况 下载由于网络连接中断而暂停
   0 00 00000     Total 4 bytes (32 bits)
   - -- -----
   | |  |
   | |  |
   | |  +---------  Error code (20 bits)
   | |
   | +------------- Component/Area code (8 bits)
   |
   +--------------- Facility code (4 bits) 

有关分析代码的详细信息,请参阅设备更新代理结果代码和扩展结果代码实现自定义内容处理程序

设备更新内容服务

下表列出了与设备更新服务的内容服务组件相关的错误代码。 内容服务组件负责导入更新内容。 其他故障排除信息也可用于导入代理更新内容

错误代码 字符串错误 后续步骤
UpdateAlreadyExists 已存在具有相同标识的更新。 请确保正在导入的更新尚未导入到 IoT 中心的此设备更新实例。
DuplicateContentImport 已多次同时导入相同的内容。 请确保正在导入的更新尚未导入到 IoT 中心的此设备更新实例。
CannotProcessImportManifest 处理导入清单时出错。 有关正确的导入清单格式设置,请参阅导入概念导入更新文档。
CannotDownload 无法下载导入清单。 检查并确保导入清单文件的 URL 仍然有效。
CannotParse 无法分析导入清单。 根据导入更新文档中定义的架构检查导入清单的准确性。
UnsupportedVersion 导入清单架构版本不受支持。 确保导入清单使用的是导入更新文档中定义的最新架构。
由于超出限制,导入更新时出错。 无法导入其他更新提供程序。 已达到 Device Update for IoT Hub 实例中允许的不同“提供程序”数限制。 从实例中删除一些更新,然后重试。
由于超出限制,导入更新时出错。 无法为指定的提供程序导入其他更新名称。 已达到 Device Update for IoT Hub 实例中一个提供程序下允许的不同“名称”数限制。 从实例中删除一些更新,然后重试。
由于超出限制,导入更新时出错。 无法为指定的提供程序和名称导入其他更新版本。 已达到 Device Update for IoT Hub 实例中一个提供程序和名称下允许的不同“版本”数限制。 从实例中删除具有该名称的一些更新,然后重试。
由于超出限制,导入更新时出错。 无法导入具有指定兼容性的其他更新提供程序。

or

无法导入具有指定兼容性的其他更新名称。

or

无法导入具有指定兼容性的其他更新版本。
在导入清单中定义兼容性属性时,请记住,Device Update for IoT Hub 支持对一组给定兼容性属性使用单个提供程序和名称组合。 如果尝试在多个提供程序/名称组合中使用相同的兼容性属性,则会看到这些错误。 要解决此问题,请确保给定设备的所有更新(由兼容性属性定义)使用相同的提供程序和名称。
CannotProcessUpdateFile 处理源文件时出错。
ContentFileCannotDownload 无法下载源文件。 检查并确保更新文件的 URL 仍然有效。
SourceFileMalwareDetected 在正在导入的文件中检测到已知的恶意软件签名。 Device Update for IoT Hub 会使用多种不同的机制来扫描导入的内容以查找恶意软件。 如果识别到已知的恶意软件签名,导入作业将会失败,且系统会返回唯一的错误消息。 此错误消息包含恶意软件签名的相关描述,以及在其中检测到签名的每个文件的哈希代码。 你可以使用文件哈希代码查找正被标记的确切文件,并使用恶意软件签名的相关描述来检查该文件是否包含恶意软件。

从正在导入的任何文件中删除恶意软件后,你便可再次启动导入流程。
SourceFilePendingMalwareAnalysis 在正在导入的文件中检测到可能表示存在恶意软件的签名。 Device Update for IoT Hub 会使用多种不同的机制来扫描导入的内容以查找恶意软件。 如果扫描签名具有恶意软件的特征,即使与已知恶意软件不完全匹配,导入也会失败。 发生这种情况时,将返回唯一的错误消息。 此错误消息包含疑似恶意软件签名的相关描述,以及在其中检测到签名的每个文件的哈希代码。 你可以使用文件哈希代码查找正被标记的确切文件,并使用恶意软件签名的相关描述来检查该文件是否包含恶意软件。

从正在导入的任何文件中删除恶意软件后,你便可再次启动导入流程。 如果你确定文件中不含恶意软件,但却依旧看到此错误,请使用联系 Microsoft 支持部门流程。

后续步骤

排查设备更新问题