从 Azure IoT 中心获取设备列表
Get a list of devices from Azure IoT Hub
我是 Microsoft Azure IoT 中心的新人。我想获取我的 IoT 中心中的设备列表,并检查列表中是否有任何设备。
如果我使用控制台应用程序,它工作正常。
static async void QueryDevices()
{
registryManager = RegistryManager.CreateFromConnectionString(DeviceConnectionString);
var devices = await registryManager.GetDevicesAsync(100); // Time 1 sek
foreach (var item in devices)
{
Console.WriteLine("Divice id: " + item.Id + ", Connection state: " + item.ConnectionState);
}
Console.WriteLine("\nNumber of devices: " + devices.Count());
}
但是如果我在 WebAPI 中使用 "same" 代码,GetDevicesAsync()
会保留 运行 和 运行 而没有任何结果。
public bool CheckIoTHubConnection(string iotHubConnectionString)
{
registryManager = RegistryManager.CreateFromConnectionString(iotHubConnectionString);
return CreateConnection().Result;
}
private async Task<bool> CreateConnection()
{
bool connectionOk = false;
try
{
// Gets all devices from IoT Hub
var result = await registryManager.GetDevicesAsync(10); // This never gets further
if (result.Any())
connectionOk = true;
}
catch (Exception ex)
{
connectionOk = false;
throw ex;
}
return connectionOk;
}
我做错了什么?
你可以试试这个代码格式:
...
System.Threading.ThreadPool.QueueUserWorkItem(a => CheckIoTHubConnection(iotHubConnStr));
...
对我有用。
更多信息可以参考首post“Send to IoT hub from MVC Web API?”.
而对于这个问题的原因,@Jason Malinowski's answer可以在一定程度上说明。
我是 Microsoft Azure IoT 中心的新人。我想获取我的 IoT 中心中的设备列表,并检查列表中是否有任何设备。
如果我使用控制台应用程序,它工作正常。
static async void QueryDevices()
{
registryManager = RegistryManager.CreateFromConnectionString(DeviceConnectionString);
var devices = await registryManager.GetDevicesAsync(100); // Time 1 sek
foreach (var item in devices)
{
Console.WriteLine("Divice id: " + item.Id + ", Connection state: " + item.ConnectionState);
}
Console.WriteLine("\nNumber of devices: " + devices.Count());
}
但是如果我在 WebAPI 中使用 "same" 代码,GetDevicesAsync()
会保留 运行 和 运行 而没有任何结果。
public bool CheckIoTHubConnection(string iotHubConnectionString)
{
registryManager = RegistryManager.CreateFromConnectionString(iotHubConnectionString);
return CreateConnection().Result;
}
private async Task<bool> CreateConnection()
{
bool connectionOk = false;
try
{
// Gets all devices from IoT Hub
var result = await registryManager.GetDevicesAsync(10); // This never gets further
if (result.Any())
connectionOk = true;
}
catch (Exception ex)
{
connectionOk = false;
throw ex;
}
return connectionOk;
}
我做错了什么?
你可以试试这个代码格式:
...
System.Threading.ThreadPool.QueueUserWorkItem(a => CheckIoTHubConnection(iotHubConnStr));
...
对我有用。
更多信息可以参考首post“Send to IoT hub from MVC Web API?”.
而对于这个问题的原因,@Jason Malinowski's answer可以在一定程度上说明。