Мы используем 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 снова все работает нормально.
Любая помощь будет принята с благодарностью!