我有一个现有的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:
<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.1" />
添加启动类
公共类启动 {
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.Run(async r => await r.Response.Body.WriteAsync(Encoding.UTF8.GetBytes("seas")));
loggerFactory.AddConsole();
}
}
将此方法添加到Program.cs:
公共静态IWebHostBuilder CreateWebHostBuilder(string [] args)=> WebHost.CreateDefaultBuilder(args) .UseStartup();
用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开发容器进行测试: https://github.com/Azure/iotedgedev/wiki/quickstart-with-iot-edge-dev-container
答案 0 :(得分:2)
如果您的应用已被容器化,则不需要添加太多内容即可将其设置为Edge模块:
在代码中的某个位置(可能是在某些启动例程中)初始化ModuleClient:ModuleClient moduleClient = await ModuleClient.CreateFromEnvironmentAsync(transportType);
使用moduleClient与asp.net内容一起发送和接收消息
将此容器添加为Deployment.json中的模块(并使其在容器存储库中可用)
这应该很简单。您无需从模块模板或Dockerfiles开始。如果您看一看它们,真的没有魔力在发生。