0

amqp を使用して、IoT デバイスから Azure IoTHub にメッセージを送信しています。C# でプログラムを書いていますが、デバイスが iot ハブとの接続を確立できるかどうかを確認したいと考えています。これを達成する最良の方法は何ですか?コールバック関数を作成することは可能ですか?

私のデバイスの 1 つがクローズド ネットワーク上にあることに気付きました。つまり、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 に答える