404104 DeviceConnectionClosedRemotely

本文介绍了 404104 DeviceConnectionClosedRemotely 错误的原因和解决方案。

症状

症状 1

设备按固定间隔(例如每 65 分钟)断开连接,并且你会在 IoT 中心资源日志中看到 404104 DeviceConnectionClosedRemotely。 有时,你还会看到 401003 IoTHubUnauthorized 和不到一分钟后出现的成功设备连接事件。

症状 2

设备随机断开连接,并且你会在 IoT 中心资源日志中看到 404104 DeviceConnectionClosedRemotely。

症状 3

许多设备同时断开连接时,你会在“连接的设备 (connectedDeviceCount)”指标中看到一个 dip,在 Azure Monitor 日志中有比平常更多的 404104 DeviceConnectionClosedRemotely 和 500xxx 内部错误

原因

原因 1

用来连接到 IoT 中心的 SAS 令牌过期,这导致 IoT 中心将设备断开连接。 当设备刷新令牌时,将重新建立连接。 例如,对于 C SDK,SAS 令牌默认情况下每小时过期,这会导致定期断开连接。

若要了解详细信息,请参阅 401003 IoTHubUnauthorized 原因

原因 2

一些可能的原因包括:

  • 设备失去基础网络连接的时间超过了 MQTT keep alive 时长,导致远程空闲超时。 每个设备的 MQTT keep-alive 设置可能不同。

  • 设备发送了一个 TCP/IP 级重置,但是未发送应用程序级 MQTT DISCONNECT。 从根本上说,设备突然关闭了基础套接字连接。 有时候,此问题是由较旧版本的 Azure IoT SDK 中的 bug 导致的。

  • 设备端应用程序崩溃。

原因 3

IoT 中心可能遇到了暂时性问题。 请参阅 IoT 中心内部服务器错误原因

解决方案

解决方案 1

请参阅 401003 IoTHubUnauthorized 解决方案 1

解决方案 2

  • 通过测试连接,确保设备能够正常连接到 IoT 中心。 如果网络不可靠或时断时续,我们不建议增大 keep-alive 值,因为这可能会导致检测(例如通过 Azure Monitor 警报)花费更长时间。

  • 使用最新版本的 IoT SDK

解决方案 3

请参阅 IoT 中心内部服务器错误的解决方案

后续步骤

我们建议使用 Azure IoT 设备 SDK 来可靠地管理连接。 若要了解详细信息,请参阅使用 Azure IoT 中心设备 SDK 管理连接和可靠的消息传送