(C#)如何检查iot设备是否能够发送到IoTHub

时间:2016-06-22 14:42:22

标签: c# azure iot azure-iot-hub

我使用amqp将消息从我的iot设备发送到Azure IoTHub。我在C#中编写程序,我想检查设备是否能够与iot hub建立连接。 实现这一目标的最佳方式是什么?是否可以创建回调函数?

我注意到我的某个设备位于封闭网络上,即amqp端口被阻止。但是设备会记录它向IoT Hub发送消息(没有抛出异常),当我检查Iot Hub时没有收到任何消息。这就是我想检查设备是否能够与IoT Hub建立连接

的原因

java sdk有一个eventcallback类但不是C#,或者我错过了什么?

protected static class EventCallback implements IotHubEventCallback { public void execute(IotHubStatusCode status, Object context) { System.out.println("IoT Hub responded to message with status " + status.name()); } }

编辑: 这会是一个很好的实施吗?

try { client = DeviceClient.CreateFromConnectionString("***", TransportType.Amqp); var task = client.OpenAsync(); task.Wait(30000); // wait for 30 sec if (task.IsCompleted) { Console.WriteLine("Connected"); await client.CloseAsync(); } else { throw new Exception("Time out"); } } catch (Exception e) { Console.WriteLine("Error"); }

1 个答案:

答案 0 :(得分:2)

假设您正在使用Azure IoT SDK,则在初始化DeviceClient时实际上并未打开连接。它在您调用SendEventAsync或ReceiveAsync方法时打开。您也可以调用OpenAsync()来尝试打开。如果无法建立通信或出现问题,将引发异常。

在GitHub上查看Azure IoT SDK示例。这是AmqpSample的链接:https://github.com/Azure/azure-iot-sdk-csharp/tree/master/device/samples/DeviceClientAmqpSample

由于SDK是开源的,您可以遍历Microsoft.Azure.Devices.Client代码,看看将针对不同的连接失败抛出什么特定的异常(IotHubCommunicationException,UnauthorizedException等)。

要进行测试,您可以使用设备资源管理器工具管理设备并监控/发送集线器的消息: https://github.com/Azure/azure-iot-sdk-csharp/tree/master/tools/DeviceExplorer