3

M2MQTT ライブラリを使用して MQTT メッセージを Azure IoT Hub に送信しようとしています。ここのIoT Hub MQTT サポートのガイダンスに従って、その記事のネイティブ MQTT セクションにある接続などの適切なパラメーターを考え出しました。

次のコードで正常に接続しています (CONNACK 戻り値 0)。

_publishClient = new MqttClient(_hostName, 8883, true, null, null,MqttSslProtocols.TLSv1_2);
_publishClient.MqttMsgPublished += _client_MqttMsgPublished;
_publishClient.ConnectionClosed += _client_ConnectionClosed;
var connack = _publishClient.Connect(_publishDeviceId, string.Format("{0}/{1}", 
             _hostName, _publishDeviceId), _publishSas,true,3600);

しかし、発行呼び出しを行うとすぐに (deviceid は私のデバイス ID です):

var pubresult = _publishClient.Publish("/devices/{deviceid}/messages/events/", Encoding.UTF8.GetBytes("Hello"), MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE, false);

M2MQTT が切断されて OnConnectionClosed イベントが発生し、メッセージが Azure IoT Hub に配信されません。

M2MQTT MqttClient クラス コードをステップ ダウンしようとしましたが、接続を閉じたのは Azure IoT Hub エンドのように聞こえるコメントと共に ReceiveThread から切断されています。

// zero bytes read, peer gracefully closed socket
else
{
    // wake up thread that will notify connection is closing
    this.OnConnectionClosing();
}

閉じている理由やトラブルシューティング方法について誰かがアイデアを持っているなら、私はすべて耳/目です.

4

2 に答える 2

2

パブリッシュ トピック文字列の最初の「/」を削除したい場合があるため、代わりに

var pubresult = _publishClient.Publish("/devices/{deviceid}/messages/events/", Encoding.UTF8.GetBytes("Hello"), MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE, false);

使用する

var pubresult = _publishClient.Publish("devices/{deviceid}/messages/events/", Encoding.UTF8.GetBytes("Hello"), MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE, false);

これはこのページで提案されており、私にはうまくいきます。

于 2016-07-18T15:35:21.237 に答える