0

我正在使用 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"); }

4

1 回答 1

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

于 2016-06-23T00:06:30.727 回答