Исключение SocketException после publishCommand, ApplicationClient

#c# #ibm-cloud #watson-iot

#c# #ibm-cloud #watson-iot

Вопрос:

Я создал приложение на платформе IBM Watson IoT и использовал предоставленный пример кода для подключения объекта ApplicationClient.

Соединение в порядке, но когда отправляется команда публикации, через секунду или две я получаю это в окне вывода VS2017:

 Exception levée : 'System.Net.Sockets.SocketException' dans System.dll
Exception levée : 'System.IO.IOException' dans System.dll
Exception levée : 'System.IO.IOException' dans System.dll
Le thread 0x4a4 s'est arrêté avec le code 0 (0x0).
Exception levée : 'System.Security.Cryptography.CryptographicException' 
dans mscorlib.dll
  

дело в том, что я везде использовал блок try / catch, но они не перехватывают эти исключения.

Я могу предположить, что это связано с перенаправлением портов, но даже после открытия портов, требуемых watson iot, я, похоже, не могу заставить команду работать

Я могу успешно публиковать события с устройства и получать эти события в ApplicationClient, у меня проблемы только с командой.

РЕДАКТИРОВАТЬ: добавить уточнение

  • Я не знаю, какой именно порт используется, подключением управляет IBMWIoTP, но в документах сказано открыть 1883, 80, 8883 и 443. Что я и сделал, как в брандмауэре Windows, так и в моем маршрутизаторе.

  • Метод публикации выглядит следующим образом:

    AppClient.publishCommand(«Raspberry», «Pi2B», «pi», «txt», данные, 0); где Raspberry — тип устройства; Pi2B — идентификатор устройства, pi — тема, txt -формат, данные — строка, а 0 — QoS.

  • Я использую рекомендованную библиотеку Nuget от IBM: IBMWIoTP

  • Я попытался установить TLS необязательным в безопасности, но это не решает проблему

  • Я нашел точный момент, когда у меня есть неперехваченное исключение, в исходном коде библиотеки IBMWIoTP, в методе connect:

 connevtionState = mqttClient.Connect(clientId, clientUsername, clientPassword,cleanSession,keepAlivePeriod);
  

Комментарии:

1. через какой порт вы подключаетесь? Похоже, что через безопасное соединение, поэтому я предполагаю, что это через 8883. Какие библиотеки вы используете? Как выглядит метод публикации?

2. Я отредактировал свой первоначальный вопрос, чтобы ответить.

Ответ №1:

Прерванные соединения могут указывать на то, что вы пытаетесь сделать что-то незаконное, например, опубликовать в теме, доступ к которой вам запрещен.

Ответ №2:

Хорошо, я нашел причину…и мне стыдно. Я повлиял на неправильный профиль в приложении, я не смог отправить команду с этим профилем. Я установил стандартный профиль приложения, и теперь все работает нормально. Я потратил слишком много часов на это…