2017-06-15 57 views
0

我是Microsoft Azure IoT Hub的新成员。我想要获取IoT Hub中的设备列表,并检查列表中是否有设备。从Azure IoT Hub获取设备列表

它的工作很好,如果我使用控制台应用程序。

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的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; 
} 

我在做什么错?

回答

0

您可以使用此代码格式尝试:

... 

System.Threading.ThreadPool.QueueUserWorkItem(a => CheckIoTHubConnection(iotHubConnStr)); 

... 

这对我的作品。

欲了解更多信息,你可以参考第一篇文章“Send to IoT hub from MVC Web API?”。

由于这个问题,@Jason Malinowski's answer可能会在一定程度上解释。

+0

感谢丽塔。现在它的工作很好 –

相关问题