如何使用C#从Azure IoT Hub中删除所有设备?

时间:2017-01-07 23:06:52

标签: c# azure azure-iot-hub

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

以下是例外截图。 Here is the image of the exception

3 个答案:

答案 0 :(得分:0)

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

RemoveDevices2Async(IEnumerable,Boolean,CancellationToken);

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

尝试一下

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);