2017-06-15 122 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

感謝麗塔。現在它的工作很好 –

相關問題