Модули Azure IoTEdge не могут подключиться к IoTHub при использовании контейнеров Windows на сервере Windows - PullRequest
0 голосов
/ 14 февраля 2019

Мы используем Azure IotEdge с контейнерами Linux, развернутыми на сервере Ubuntu .Мы успешно запустили несколько модулей, которые собирают, обрабатывают и отправляют данные в IoT Hub.

Теперь нам нужно развернуть еще одну среду выполнения IoTEdge с контейнерами Windows.на сервере Windows , потому что мы так вынуждены требованиями.В целях начальной загрузки новой среды мы просто решили получить один из наших существующих и рабочих модулей и развернуть его как контейнер Windows в новой среде выполнения.Кажется, что во время выполнения IoTEdge работает нормально, он сообщает о состоянии выполнения в IoTHub, реагирует на изменения развертывания.

  • Машина разработки, которая создает образы, находится на сборке Windows 10 180917763.194
  • серверный компьютер, на котором работает IoTEdge, находится на той же Windows 10 1809, сборка'nat' (по умолчанию)
  • Модуль IoTEdge с установленным пакетом NuGet Microsoft.Azure.Devices.Client 1.18.1
  • Окончательный образ модуля IoTEdge для контейнера Windows построен из microsoft/dotnet:2.1-runtime-nanoserver-1809

То, с чем мы столкнулись, довольно странно.Клиент модуля успешно инициализируется:

AmqpTransportSettings amqpSetting = new AmqpTransportSettings(TransportType.Amqp_Tcp_Only);
ITransportSettings[] settings = { amqpSetting };

IoTHubModuleClient = await ModuleClient.CreateFromEnvironmentAsync(settings).ConfigureAwait(false);
await IoTHubModuleClient.OpenAsync().ConfigureAwait(false);

Тем не менее, модуль не может получить свой Twin из IoTHub, что приводит к тайм-ауту после 4 минут (!?) :

await IoTHubModuleClient.GetTwinAsync().ConfigureAwait(false);

Вот соответствующие журналы:

2019-Feb-13T13:54:53.57620Z |       INFO | Initializing module twin
2019-Feb-13T13:58:53.61382Z |      ERROR | FetchModuleTwin failed for IoT Edge module: 
System.TimeoutException: Operation timeout expired.
   at Microsoft.Azure.Devices.Client.InternalClient.<>c.<ApplyTimeoutTwin>b__64_2(Task`1 t)
   at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)
--- End of stack trace from previous location where exception was thrown ---
   at IoTEdge.ModuleBase.FetchModuleTwin() in C:\src\IoTEdge-ModuleBase\modulebase.cs:line 30

Если мы изменим сеть moby_runtime на 'azure-iot-edge', то результат будет таким же, ноКроме того, модуль edgeHub не может подключиться, а также.

Если мы обновим модуль IoTEdge, установленный пакет NuGet Microsoft.Azure.Devices.Client с 1.18.1 до 1.19.0 (последний стабильный в настоящее время), результатыне лучше, но ошибка NullReferenceException вместо таймаута.

При отладке того же модуля все работает нормально.При развертывании в контейнере Linux на сервере Ubuntu снова все работает нормально.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 14 февраля 2019

Пожалуйста, откройте проблему на github.com/azure/iotedge/issues.В шаблоне выпуска есть инструкции по включению журналов, которые помогут при отладке.В этом выпуске также укажите, можно ли воспроизвести поведение с помощью простого модуля датчика температуры, упомянутого в документах QuickStart.

...