Обратите внимание, что функция потоков устройств Центра Интернета вещей Azure все еще находится в общедоступной предварительной версии (более одного года). Вы используете SDK 1.29.0-preview-004 на стороне устройства и 1.27.0-preview-004 на стороне службы и образец DeviceStreamingSample em > из пакета azure-iot-samples-csharp-master.
Потоки устройства используют для процесса установления связи между службой и устройством ту же концепцию связи, что и для вызова метода устройства. Эту фазу установления связи можно легко протестировать с помощью запроса REST POST.
В демонстрационных целях я буду использовать свой IoT Hub Tester, где реализована функция Device Streams, подробнее см. в разделе Приложение A2.
Шаг 1. Запустите программу DeviceClientStreamingSample для вашего устройства. Вам следует использовать Transport.Amqp. Обратите внимание, что остальные не прошли мой тест.
Шаг 2. Используйте клиентский инструмент REST для создания запроса POST. Следующий URL предназначен для моего теста:
https://xxxxxxxxxxx.azure-devices.net/twins/device1/streams/teststream?api-version=2018-08-30-preview
заголовки:
accept: application/json
iothub-streaming-response-timeout-in-seconds: 15
iothub-streaming-connect-timeout-in-seconds: 5
Authorization: sas-token
полезная нагрузка: любая или пустая
Следующий фрагмент экрана демонстрируется, когда POST был отправлен на устройство1:
а в следующем фрагменте кода показана остановка программы в точке останова после метода WaitForDeviceStreamRequestAsync:
Полное рукопожатие и потоковая передача между устройством и службой (в данном случае моим тестером) показаны в следующем фрагменте экрана:
Как я уже упоминал, тестер Центра Интернета вещей Azure реализовал функцию потоков устройств, следующий фрагмент экрана показывает буфер потока:
Обратите внимание, что запуск смоделированного устройства для TransportType.Mqtt не работает, симптом такой же, как у вас, тайм-аут. Похоже (на основе ответа REST POST) есть ошибка при подписке устройства на тему, например $ iothub / streams / POST / #
Однако, когда ваше устройство использует прямой протокол MQTT для IoT Hub, все работает нормально, см. Фрагмент экрана моего тестера, где device1 подключено к IoT Hub:
Когда на экране появится тестер Центра Интернета вещей Azure, вы можете использовать его для тестирования пакета SDK службы для потоковой передачи, например следующей строки из образца SDK:
DeviceStreamResponse result = await _serviceClient.CreateStreamAsync(_deviceId, deviceStreamRequest).ConfigureAwait(false);
и тестер покажет потоковую передачу device1:
В заключение, на основании проведенного выше тестирования вы должны иметь успешную потоковую передачу с SDK, когда моделируемое устройство настроено для протокола TransportType.Amqp.
ОБНОВЛЕНИЕ:
В случае использования клиентского инструмента REST вы можете увидеть ответ от устройства в заголовках:
Этот ответ генерируется следующей строкой:
await _deviceClient.AcceptDeviceStreamRequestAsync(streamRequest, cancellationTokenSource.Token).ConfigureAwait(false);
На основе заголовков ответа, таких как
iothub-streaming-is-accepted
iothub-streaming-url
iothub-streaming-auth-token
можно установить потоковую связь WebSocket между устройством и службой через Центр Интернета вещей. Обратите внимание, что после этого смоделированное устройство выйдет из строя в случае использования клиентского инструмента REST.
person
Roman Kiss
schedule
29.05.2020