2017-12-18 22 views
0

Dockerで実行されるAzure IoTエッジゲートウェイを、パススルーだけのカスタムモジュールで作成しました(メッセージを受け取り、それを上流に送ります)。下流デバイスを備えたIoTエッジゲートウェイ

単純な.netコンソールアプリケーションを作成してゲートウェイにメッセージを送信し、評価できるようにしました。

これは私がコンソールアプリケーションに持っているコードです。

DeviceClient client = 
      DeviceClient.CreateFromConnectionString("HostName=<my iot hub in azure>.azure-devices.net;DeviceId=<the name of the device>;SharedAccessKey=<my access key>;GatewayHostName=<the name of the IoT Edge Device>"); 

     Message message = new Message(); 

     message.Properties.Add("testproperty", "test"); 

     client.SendEventAsync(message).Wait(); 

SendEventAsyncメソッドが呼び出されたときに、それが先にハングするように見えます。私は5分待って、アプリが待っていた。接続文字列からGatewayHostNameを削除するとすぐに実行され、メッセージはAzureのIoTハブに直接送信されます。

IoTエッジゲートウェイにメッセージを送信しないのはなぜですか?

+0

は、IoT Edgeデバイスで動作するedgeAgentとedgeHubですか? 'docker ps'で確認するだけです – silent

+0

https://docs.microsoft.com/en-us/azure/iot-edge/how-to-create-transparent-gatewayに記載されている手順を見て、それに従っていますか? –

+0

ダウンストリームデバイスがIoT Edgeゲートウェイへの接続用に正しく構成されていないように見えます。詳しくはhttps://docs.microsoft.com/en-us/azure/iot-edge/how-to-createを参照してください。 -transparent-gateway#configure-a-downstream-device –

答えて

1

client.SendEventAsync呼び出しは、サーバー(この場合はIoTエッジゲートウェイ)への接続を暗黙的に開こうとしますが、これは完了できないため、コールがハングするのが見えます。ここで

GatewayHostNameが名前ではありません ";デバイスID =;; SharedAccessKey = GatewayHostName =ホスト名= .azure-devices.net" -

そして、私はこの問題は、接続文字列であると感じただし、モジュールが稼働している物理デバイスのホスト名(利用可能であれば、fqdnホスト名)は、ホスト名です。 ので、接続文字列は次のようなものでなければなりません - "ホスト名= .azure-devices.net; DEVICEID =; SharedAccessKey =; =GatewayHostName"

あなたのコードは、カスタムモジュールで実行されている場合は、することができます環境変数$ EdgeHubConnectionStringを使用します。これには、使用できる接続文字列を含める必要があります。

ダウンストリームデバイスの場合は、正しい接続文字列を使用するとともに、デバイスがゲートウェイデバイスによる接続の受け入れに使用された証明書を信頼することも確認する必要があります。ここで詳細を見つけることができます - https://docs.microsoft.com/en-us/azure/iot-edge/how-to-create-transparent-gateway

+0

私はそれを試してみる前にトランスペアレントゲートウェイに関する指示に従い、証明書を追加しました。だからそれは問題ではなかった。この問題は、GatewatHostNameプロパティにEdgeが付いたドッカーコンテナを実行しているマシンのFQDNを追加する必要があるという問題でした。私がした後、メッセージが通過しました。今私はそれを私のカスタムモジュールのブレークポイントに当てる必要があります。 –

関連する問題