【问题标题】:Turn existing ASP.NET Core Web App to Edge module running on Azure IoT Edge将现有的 ASP.NET Core Web 应用程序转换为在 Azure IoT Edge 上运行的 Edge 模块
【发布时间】:2019-10-20 03:01:42
【问题描述】:

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

将我的 ASP.NET Core Web 应用程序转变为 Edge 模块并与 Edge Hub 交互的最佳方式是什么?

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

感谢您的建议!

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

  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. 将 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

【问题讨论】:

  • 您想要/需要您的 Web 应用程序与 Edge Hub 通信,还是只想在您的 Edge 设备上按原样运行该应用程序?
  • 我还需要接收消息并将消息推送到边缘集线器

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


【解决方案1】:

如果您的应用已经容器化,那么您不需要添加太多内容来使其成为 Edge 模块:

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

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

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

这应该很简单。您不需要从模块模板或 Dockerfile 开始。如果你看看它们,真的没有魔法发生。

【讨论】:

  • 感谢您的回答。我会尝试您的建议并回复您!
  • 您好,我需要将我的 webapi 服务(asp.net 核心)转换为物联网边缘模块。是否可以使用上述方法做到这一点。
  • 我无法将 webapi 项目添加为物联网边缘模块。具有 api 控制器和其他东西的 webapi 项目。自定义边缘模块可用作控制台应用程序。那么我们该如何添加。你能帮忙吗?
  • 我需要遵循一些步骤。如果您建议或分享我,这将对我有很大帮助。
  • 我看不出您不能添加 webapi 项目的任何原因。 IoT Edge 不关心应用程序是控制台应用程序还是其他什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多