Превратите существующее базовое веб-приложение ASP.NET в модуль Edge, работающий в Azure IoT Edge - PullRequest
0 голосов
/ 04 июня 2019

У меня есть существующее базовое веб-приложение ASP.NET, работающее как докер-контейнер, и я хотел бы предоставить его в качестве пограничного модуля, работающего в Azure IoT Edge. Из документов, которые я знаю, я могу запускать функции Azure, Stream Analytics и пользовательские модули (которые, насколько я понимаю, являются просто консольными приложениями, интегрированными с Azure IoT Edge Runtime).

Как лучше всего превратить мое ASP.NET Core Web App в пограничный модуль и взаимодействовать с Edge Hub?

Будет ли наилучшим подходом использовать пользовательский модуль в качестве шаблона, переместить мой проект ASP.NET Core в соответствии с файловой структурой и отредактировать файлы docker для запуска моей основной сборки ASP.NET Core?

Спасибо за любые советы!

Обновление: Я следовал подходу, изложенному выше. Я создал пользовательский пограничный модуль и попытался преобразовать его в самое простое из возможных ASP.NET Core Web App, выполнив следующие действия:

  1. Добавить ссылку на пакет <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.1" />
  2. Добавить класс запуска

    публичный класс Startup {

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            app.Run(async r => await r.Response.Body.WriteAsync(Encoding.UTF8.GetBytes("seas")));
    
            loggerFactory.AddConsole();
        }
    }
    
  3. Добавить этот метод в Program.cs:

    публичная статическая IWebHostBuilder CreateWebHostBuilder (string [] args) => WebHost.CreateDefaultBuilder (арг) .UseStartup ();

  4. Заменить содержимое Main на CreateWebHostBuilder(args).Build().Run();

Я могу запустить контейнер как часть Azure IoT Edge, но контейнер постоянно перезапускается, поэтому я предполагаю, что мой подход был не совсем правильным. К сожалению, я также не могу получить доступ к консоли контейнера, потому что он перезапускается каждые несколько секунд ...

вывод команды sudo docker ps ...

4b23cdad5bc5        localhost:5000/simpleweb:0.0.1-amd64                              
"dotnet SimpleWeb.dll"    5 minutes ago       Restarting (150) 58 seconds ago

...

PS: я использую контейнер iot edge dev для тестирования после этого быстрого запуска: https://github.com/Azure/iotedgedev/wiki/quickstart-with-iot-edge-dev-container

1 Ответ

2 голосов
/ 04 июня 2019

Если ваше приложение уже упаковано в контейнер, вам не нужно добавлять слишком много, чтобы сделать этот модуль Edge:

  • Добавить пакет nuget Microsoft.Azure.Devices.Client
  • Init ModuleClient где-то в вашем коде, возможно, в какой-то процедуре запуска: ModuleClient moduleClient = await ModuleClient.CreateFromEnvironmentAsync(transportType);

  • Используйте модульКлиент для отправки и получения сообщений вместе с вашими материалами asp.net

  • Добавить этот контейнер как модуль в ваш файл deploy.json (и сделать его доступным в репозитории контейнеров)

Это должно быть довольно просто. Вам не нужно начинать с шаблонов модулей или Dockerfiles. Если вы посмотрите на них, волшебства на самом деле не происходит.

...