2016-11-15 118 views
0

我有一个使用Microsoft.Azure.Devices.Client.DeviceClient侦听来自Azure IoT中心的消息的Xamarin应用程序。偶尔我会得到我无法捕捉并处理的错误。一个这样的例外是:Azure IoTHub抛出异常我无法捕捉

Microsoft.Azure.Devices.Client.Exceptions.UnauthorizedException

此异常只是一个例外,我正在和一个我可以可靠地通过更改系统时间重建的一个例子。其他IoTHubExceptions零星且很难重新创建,因此需要尝试捕获异常。

任何人都可以告诉我如何可以捕获这些基于物联网集线器的错误?代码是:

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

我只是在这里使用未经授权的异常作为示例,因为我可以轻松地重新创建此异常。我的问题是,我无法捕捉Xamarin Android应用程序中由IoT中心客户端抛出的任何异常。 – Slicc

+0

您是否遇到.net控制台应用程序或其他问题的相同问题? – Jackie