2016-07-17 71 views
3

我試圖使用M2MQTT庫將MQTT消息發送到Azure IoT Hub。我遵循IoT Hub MQTT support的指導,爲該文章的本機MQTT部分中的連接等提供了正確的參數。M2MQTT從發佈中斷開與Azure IoT Hub的連接

我用下面的代碼在成功連接(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); 

,但只要我打個電話發佈(其中設備ID是我的設備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類代碼和斷開從ReceiveThread來與意見使它聽起來像是它是Azure的物聯網中心端是封閉的連接:

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

如果任何人都有任何想法,爲什麼它關閉或如何排除故障,我都耳朵/眼睛。

+1

我看到相同的錯誤。 – Jackie

+2

你有沒有試過用mqtt客戶端的windows-iot-sdk? – Jackie

+0

您好,Azure IoT SDK團隊可以在這裏 - 請問您對m2mqtt有什麼要求,或者在我們的SDK中無法使您避免使用它? –

回答

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); 

這個建議在這個page,並適用於我。

相關問題