Я создал приложение в платформе 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);