将现有的ASP.NET Core Web App转换为在Azure IoT Edge上运行的Edge模块

时间:2019-06-04 14:48:43

标签: asp.net-core azure-iot-edge

我有一个现有的ASP.NET Core Web App作为docker容器运行,并希望将其作为运行在Azure IoT Edge上的Edge模块提供。 从我知道的文档中,我可以运行Azure Functions,流分析和自定义模块(据我了解,它们只是与Azure IoT Edge运行时集成的控制台应用程序。)

将ASP.NET Core Web App转换为Edge模块并与Edge Hub交互的最佳方法是什么?

最好的方法是使用自定义模块作为模板,将我的ASP.NET Core项目移到适合文件结构的位置,并编辑dockerfile以运行我的主要ASP.NET Core程序集吗?

谢谢您的任何建议!

更新: 我正在遵循上述方法。我创建了一个自定义边缘模块,并尝试使用以下步骤将其转换为最简单的ASP.NET Core Web App:

  1. 添加软件包引用<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.1" />
  2. 添加启动类

    公共类启动     {

        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(args) .UseStartup();

  4. CreateWebHostBuilder(args).Build().Run();

  5. 替换Main的内容

我可以将容器作为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开发容器进行测试: https://github.com/Azure/iotedgedev/wiki/quickstart-with-iot-edge-dev-container

1 个答案:

答案 0 :(得分:2)

如果您的应用已被容器化,则不需要添加太多内容即可将其设置为Edge模块:

  • 添加nuget包Microsoft.Azure.Devices.Client
  • 在代码中的某个位置(可能是在某些启动例程中)初始化ModuleClient:ModuleClient moduleClient = await ModuleClient.CreateFromEnvironmentAsync(transportType);

  • 使用moduleClient与asp.net内容一起发送和接收消息

  • 将此容器添加为Deployment.json中的模块(并使其在容器存储库中可用)

这应该很简单。您无需从模块模板或Dockerfiles开始。如果您看一看它们,真的没有魔力在发生。