【问题标题】:What's the etag in IoT Hub device twins for?IoT 中心设备孪生中的 etag 有什么用?
【发布时间】:2020-06-16 13:25:02
【问题描述】:

我正在 .NET Core 3 中开发一个 Web 应用程序,并且我正在使用 Microsoft.Azure.Devices.RegistryManager 访问 Azure IoT 中心。

当我调用 registryManager.UpdateTwinAsync() 时,我必须发送“etag”。有时 etag 会发生变化,我会收到错误消息,指出 etag 不匹配。

我基本上不明白 etag 的目的是什么,以及如何以安全的方式更新设备孪生。有人吗?

我尝试捕获这些异常并从设备双胞胎中获取 etag 并连续重试多达 15 次,中间等待 2 秒,这很有帮助,但此错误时不时地弹出。我认为应用设备 ID 足以更新设备孪生,但显然不是

请帮忙!

【问题讨论】:

    标签: azure-iot-hub


    【解决方案1】:

    所以简单来说,我们可以说ETag - 实体标签 会在我们看到设备状态发生变化或任何其他更新时不断变化。

    表示设备标识的弱 ETag 的字符串,根据 RFC7232 Section 2.3 Etag

    entity-tag 是一个不透明的验证器 区分相同的多个表示 资源,无论这些多重表示是否 由于资源状态随时间变化

    例如:启用和禁用 IoT 设备并检查 Visual Studio Code (Azure IoT Hub Extension) 中的“获取设备信息”

    第 1 步)我有一个状态为已启用的初始 IoT 设备,我可以看到 Etag 值。

    第 2 步)当我在 IoT Hub 门户上禁用设备,然后进行第二次查询“获取设备信息”调用时,我在 ETag 上看到了不同的值。

    第 3 步) 现在,当我第二次查询时(例如 5 分钟间隔后),我看到 Etag 值保持不变对于相同的设备禁用状态.

    **欲了解更多信息,请访问Device identity propertiesModule identity properties

    **如果您需要更多帮助,请告诉我们!

    【讨论】:

      【解决方案2】:

      我的理解是,当您更新设备孪生时,ETag 用于确保设备孪生的一致性。它是只读的,因此您可以从您的设备孪生中获取它,并将其与您的更改一起传回UpdateTwinAsync()Link

      当您说 ETag 正在更改时,我不确定您的意思 - 您能否提供一些您正在做什么的代码(或澄清 ETag 何时更改)?

      我在 YouTube 上创建了一个视频,演示如何读/写 Azure 设备孪生,请随时查看,希望对您有所帮助! Link

      【讨论】:

      • 谢谢。我的意思是,我经历过特定设备的 etag 时不时地变化,我不确定是什么原因造成的。换句话说,对于单个设备的生命周期,etag 似乎并不总是具有相同的值。
      【解决方案3】:

      有关在可能有来自不同用户的多个更新时设备孪生如何使用乐观并发来确保一致性的更多信息,请参阅 Microsoft Docs 上的Understand and use device twins in IoT Hub > Optimistic concurrency

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多