builder.Services.AddDbContext<appdbcontext>(options => options.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection")));API 启动时会自动执行 db.Database.Migrate(),数据库文件直接在运行目录下生成,不用操心建表的事 。
设备模拟器更简单,就是一个控制台程序,定时读取配置里指定的设备编码和发送间隔,模拟往采集服务发送数据。目前已经能读到配置并输出日志,后续扩展成 TCP、Modbus 或 MQTT 上报都很方便。
WPF 客户端这边用了 MVVM 模式,CommunityToolkit.Mvvm 提供了 ObservableObject 和 RelayCommand,ViewModel 写起来比较干净。HandyControl 负责界面控件,LiveCharts2 用来画实时曲线。
项目效果
启动流程:API、采集 Worker、设备模拟器、WPF 客户端四个服务可以分别启动,也可以把多个项目设置为同时启动,一次跑通全链路。
数据流验证:设备模拟器生成模拟数据 → 采集 Worker 接收 → 存入 SQLite → API 提供查询接口 → WPF 通过 Refit 调用 API 展示数据。这套流程的数据链路已经通了,后续只是把各个环节的业务逻辑补全。
Swagger 文档:API 启动后访问 /swagger,接口文档自动生成,调试和联调都很方便。
日志输出:Serilog 配置了滚动文件输出,开发阶段看控制台,生产环境看文件,排查问题有迹可循。
从实际搭建体验来看,从拉代码到全部跑起来,基本在十分钟以内。对于工业场景里的数据采集项目,这种"拿来就能跑"的体验还挺难得的。
项目源码
本地运行需要几步
# 还原依赖dotnet restore# 编译整个解决方案dotnet build# 启动 API(默认端口 5281)dotnet run --project src/IndustrialMonitor.Api/IndustrialMonitor.Api.csproj# 启动采集 Workerdotnet run --project src/IndustrialMonitor.Collector/IndustrialMonitor.Collector.csproj# 启动设备模拟器dotnet run --project src/IndustrialMonitor.DeviceSimulator/IndustrialMonitor.DeviceSimulator.csproj# 启动 WPF 客户端dotnet run --project src/IndustrialMonitor.Wpf/IndustrialMonitor.Wpf.csproj如果用 Visual Studio,直接打开 IndustrialMonitorPlatform.sln,把多个项目设置为同时启动就行。
如果后续实体模型发生变化,可以通过 EF Core 的迁移命令更新数据库:
dotnet ef migrations add MigrationName \ --project src/IndustrialMonitor.Infrastructure/IndustrialMonitor.Infrastructure.csproj \ --startup-project src/IndustrialMonitor.Api/IndustrialMonitor.Api.csproj \ --output-dir Database/MigrationsGitHub:https://github.com/Timi0v0/IndustrialMonitorPlatform
总结
项目没有一上来就追求大而全的功能覆盖,而是先把分层架构、数据访问、日志、实时推送这些基础能力搭扎实了。设备管理、采集、报警、监控这些核心业务模块都留好了接口和位置,后续只需要按顺序往里面填业务逻辑就行。
从技术选型来看,.NET 9 + EF Core + SignalR + SQLite 这套组合,在工业数据采集场景下是够用的。采集 Worker 和 API 分离的架构也为后续扩展留了余地——采集服务可以单独部署到靠近设备的边缘节点,API 服务集中部署在云端或中心机房。
大家做工业物联网相关的项目,或者想找一个 .NET 9 的全栈实战案例来练手,这套框架值得花点时间跑起来看看。光是研究它的分层设计和采集 Worker 的实现,就能学到不少东西。
关键词
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!
作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!
觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力
</appdbcontext></collectorworker>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!