2016-07-17 3 views
3

Я пытаюсь использовать библиотеку M2MQTT для отправки сообщений MQTT в концентратор Azure IoT. Я следил за рекомендациями здесь IoT Hub MQTT support, чтобы найти правильные параметры для подключения и т. Д. В разделе MQTT на основе этой статьи.M2MQTT Отключение от Azure IoT Hub on Publish

Я успешно подключение (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); 

, но как только я сделать Publish вызов (где DeviceID это мой идентификатор устройства):

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

M2MQTT отключает и вызывает событие OnConnectionClosed, и сообщение никогда не доставляется в концентратор Azo IoT.

Я попытался уйдя через код класса M2MQTT MqttClient и разъединение исходит из ReceiveThread с комментариями, что делает его звук, как это Azure IoT концентратор конец, который закрыл соединение:

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

Если у кого есть идеи о том, почему он закрывается или как устранять неполадки, я все уши/глаза.

+1

Я вижу ту же ошибку. – Jackie

+2

Попробовали ли вы использовать windows-iot-sdk для клиента mqtt? – 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, и работает на меня.

Смежные вопросы