我使用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");
}
答案 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