SocketException после publishCommand, ApplicationClient - PullRequest
1 голос
/ 31 марта 2019

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

Связь в порядке, но когда команда publish отправлена, через секунду или две я получил это в окне вывода 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", data, 0); где Raspberry - тип устройства; Pi2B идентификатор устройства, pi тема, txt формат, данные - строка, а 0 - QoS.

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

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

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

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

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

0 голосов
/ 01 апреля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...