2016-11-15 2 views
0

У меня есть приложение Xamarin, использующее Microsoft.Azure.Devices.Client.DeviceClient для прослушивания сообщений из концентратора Azure IoT. Иногда я получаю ошибки, которые я не могу поймать, и иметь дело с ними. Одним из таких исключений является:Azure IoTHub исключая исключения Я не могу поймать

Microsoft.Azure.Devices.Client.Exceptions.UnauthorizedException

Это исключение является лишь примером исключения я получаю, и тот, который я могу достоверно воссоздают путем изменения системного времени. Другие IoTHubExceptions являются спорадическими и трудными для воссоздания, и, следовательно, необходимо попробовать исключение.

Может ли кто-нибудь сказать мне, как я могу поймать эти ошибки на основе IoT-хаба? Код:

try 
{ 
    await _deviceClientInbound.OpenAsync(); 

    // execution never gets passed this line and the exception is eventually thrown, having reached this point 
    Message receivedMessage = await _deviceClientInbound.ReceiveAsync(); 

    if (receivedMessage == null) continue; 

    await _deviceClientInbound.CompleteAsync(receivedMessage); 
} 
catch (Exception e) 
{ 
    // Exception is never caught in here ... 
    // How can I catch the IoTHubException based exceptions 
} 
+0

ли функция, где этот код объявлен как возвращающая 'Задачу 'или' Задача '? Вы также уверены, что его бросают из этих звонков? – juunas

+0

Да, сигнатура метода - это «приватная асинхронная задача StartReceiverAsync()», в то время как я не могу быть на 100% уверен, что именно этот вызов вызывает проблему. Это единственное место, где я делаю все, что связано с IoTHub, и проблема возникает только тогда, когда выполнение достигает этого кода. – Slicc

ответ

0

Если вы получаете несанкционированное исключение. Затем, пожалуйста, проверьте свою строку подключения хоста iot, используемую в клиенте устройства, чтобы подтвердить, что политика доступа общего доступа, используемая со строкой подключения, имеет все привилегии или нет, что необходимо в конце.

+0

Я использую исключение Unauthorized в качестве примера здесь, потому что я могу легко воссоздать это исключение. Моя проблема в том, что я не могу поймать никаких исключений, созданных клиентом IoT-хаба в приложении Xamarin для Android. – Slicc

+0

У вас такая же проблема с консольным приложением .net или другими? – Jackie

0

Я полагаю, что это связано с различными рефакторингами, выполненными для поддерживаемых платформ, и вам, вероятно, придется поймать все исключения, обработать те, которые вы хотите, и перебросить их, которых нет. В зависимости от платформы, которую вы могли бы включать в себя:

using Microsoft.Azure.Devices.Client.Exceptions; 

Источники здесь, если вы чувствуете, как спелеология:

https://github.com/Azure/azure-iot-sdk-csharp/search?utf8=%E2%9C%93&q=using+Microsoft.Azure.Devices.Client.Exceptions

Смежные вопросы