【问题标题】:How to delete all devices from Azure IoT Hub using C#?如何使用 C# 从 Azure IoT 中心删除所有设备?
【发布时间】:2017-01-07 23:06:51
【问题描述】:

在使用 GetDevicesAsync 方法检索所有设备后,我尝试通过循环使用 RemoveDeciceAsync 方法删除设备。但是对于某些设备,此删除过程有时会引发异常。请注意,并不总是抛出异常。如何使用 .Net SDK 从 IoT 中心清除所有设备? 这是删除设备的源代码:

这是异常截图。

【问题讨论】:

  • 如果您编辑您的问题以显示您的代码和错误消息,我会提供帮助
  • 更新了问题。你现在可以检查一下吗?
  • @user1814131,我无法重现此错误。当您尝试将其全部删除时,是否有一些设备仍连接到 Azure IoT Hub?
  • 我认为答案是否定的,我对此非常有信心。 (只有我一个人在做,其他人无法使用)
  • 可以删除Device Explorer中的设备吗?

标签: c# azure azure-iot-hub


【解决方案1】:

很难在没有错误的情况下为您提供帮助,但 SDK 没有使用带有 RemoveDeviceAsync 的循环,而是提供了带有强制删除选项的批量删除。

RemoveDevices2Async(IEnumerable, Boolean, CancellationToken);

https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.devices.registrymanager

【讨论】:

  • 我已经用错误更新了问题。我会试试你的方法。谢谢
【解决方案2】:

正如@Shachar 所述,您需要使用 RemoveDevices2Async API。 为了保证服务的可用性,IoT Hub 会限制每个计算单元的操作数量。您可以看到 here CRUD 操作被限制在 100/min 以上。 RemoveDevices2Async API 可批量删除设备,一次调用仅计算一次操作。

【讨论】:

    【解决方案3】:

    试试这个

    var registryManager = RegistryManager.CreateFromConnectionString(iot_hub_connectionString);
    
    var deviceTwins = new List<Twin>();
    var query = registryManager.CreateQuery("SELECT * FROM devices", int.MaxValue);
    while (query.HasMoreResults)
    {
        var page = await query.GetNextAsTwinAsync();
        deviceTwins.AddRange(page);
    }
    
    var devicesToDelete = deviceTwins.Select(t => { return new Device(t.DeviceId); });
    var opResult = await registryManager.RemoveDevices2Async(devicesToDelete);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多