工厂环境监测系统实战(七):Windows 服务与定时任务
前言除了 Web 端的实时展示系统还需要后台定时处理数据——比如环境数据的统计汇总、历史数据归档、报警推送等。本章介绍 Windows 服务的实现。项目结构解决方案中有独立的 Windows 服务项目windowsService/ ├── windowsService/ # 服务主程序 ├── windowsService.Domain/ # 服务专属实体 └── windowsService.Infrastrue/ # 服务数据访问此外还有两个工具项目项目功能DataOperation数据操作工具批量导入、清理SyncEnvData环境数据同步多库同步Windows 服务实现使用 .NET Framework 的ServiceBase基类public partial class MainService : ServiceBase { private System.Timers.Timer _timer; public MainService() { InitializeComponent(); } protected override void OnStart(string[] args) { // 启动时执行 _timer new System.Timers.Timer(); _timer.Interval 60000; // 每分钟执行一次 _timer.Elapsed OnTimerElapsed; _timer.Start(); } private void OnTimerElapsed(object sender, ElapsedEventArgs e) { // 定时任务逻辑 // 1. 统计小时/日平均温湿度 // 2. 归档过期数据 // 3. 检查报警阈值 } protected override void OnStop() { _timer?.Stop(); } }服务安装编译后用installutil注册为 Windows 服务installutil.exe windowsService.exe.NET Core 中的 BackgroundServiceWebApi项目使用 .NET Core 的BackgroundService来实现 TCP 监听它本质上也是一种常驻后台服务// Startup.cs services.AddHostedServiceTcpSensorService();相比传统的 Windows ServiceBackgroundService开发更简洁而且跨平台。数据同步策略SyncEnvData项目负责多数据库之间的环境数据同步从主库拉取最新数据同步到备份库或分析库处理同步冲突和失败重试public class DataSyncService { public async Task SyncFacilityData() { // 1. 从源库读取增量数据 var sourceData await _sourceRepo.GetNewData(lastSyncTime); // 2. 批量写入目标库 await _targetRepo.BulkInsert(sourceData); // 3. 更新同步时间戳 lastSyncTime DateTime.Now; } }小结Windows Service 处理定时汇总、归档、报警等后台任务.NET Core 的BackgroundService更轻量适合跨平台定时任务与 Web 应用解耦互不影响下一章也是一章介绍系统的部署与运维。上一篇第6章 — 系统Logo与品牌定制下一篇第8章 — 部署与运维

相关新闻

2026年常见AI会议助手使用观察:飞书、腾讯会议、讯飞、通义、钉钉与熙瑾会悟有哪些差异?

2026年常见AI会议助手使用观察:飞书、腾讯会议、讯飞、通义、钉钉与熙瑾会悟有哪些差异?

AI会议助手正在成为办公软件中的常见功能。 从线上会议实时字幕,到录音文件转写,再到会后自动生成摘要、结论和待办事项,不少产品已经覆盖了相似的功能。只看产品页面,很容易产生一种感觉:不同工具之间的区别似乎已经不…

2026/9/4 18:06:51 阅读更多 →
从零到一:Kustomize 生产级配置管理规范与团队实践

从零到一:Kustomize 生产级配置管理规范与团队实践

系列导读 你现在看到的是《Kustomize 从入门到生产:配置管理与环境隔离实战指南》的第 10/10 篇,当前这篇会重点解决:给出一套完整的生产级实践指南,帮助团队落地 Kustomize 并持续演进。 上一篇回顾:第 9 篇《Kustomize 排错指南:常见错误、最佳实践与性能优化》主要聚…

2026/9/29 2:17:30 阅读更多 →
落实科学教育 “做中学” 提升义务教育学生科学素养

落实科学教育 “做中学” 提升义务教育学生科学素养

为扎实做好 “双减” 科学教育加法,教育部印发《义务教育阶段科学教育 “做中学” 领航行动指南》,部署领航行动,以实践探究培育学生科学素养,支撑教育、科技、人才强国建设。行动坚持以学生为主体、兴趣为导向、实践为路径&#…

2026/9/28 0:59:06 阅读更多 →

最新新闻

隔离内网AI Agent落地方案:从模型选型到并发压测全指南

隔离内网AI Agent落地方案:从模型选型到并发压测全指南

把 AI Agent 推进隔离内网的时候,我最直观的感受是:网上那些 Agent 演示项目,到了内网几乎没有一个能直接跑起来。这不是代码写得不行,而是它们默认的世界里什么都有——模型权重从 HuggingFace 拉、Python 依赖从 PyPI 装、搜索工…

2026/10/5 14:40:16 阅读更多 →
本地部署大模型:Token自由与数据主权的成本交叉点

本地部署大模型:Token自由与数据主权的成本交叉点

1. 从一张显卡账单说起:为什么企业开始重新算这笔账去年底帮一家做工业质检的客户做技术选型,他们的场景很典型:每天要处理大约两万张缺陷样本图,每张图都要过一遍多模态模型做描述生成和分类打标。一开始走的是公有云API&#xf…

2026/10/5 14:40:16 阅读更多 →
Windows下TensorFlow GPU版安装指南:CUDA与cuDNN版本匹配全解析

Windows下TensorFlow GPU版安装指南:CUDA与cuDNN版本匹配全解析

1. 写在动手之前:TensorFlow GPU版本没那么玄,坑全在版本匹配TensorFlow装GPU版本,十个新手九个在环境上翻车。这活儿本身不复杂,但坑全藏在版本匹配里:显卡驱动、CUDA、cuDNN、Python、TensorFlow本体,五个…

2026/10/5 14:40:16 阅读更多 →
Windows安装TensorFlow GPU版全攻略:CUDA/cuDNN版本匹配与报错排查

Windows安装TensorFlow GPU版全攻略:CUDA/cuDNN版本匹配与报错排查

Windows上装TensorFlow GPU版,说实话不算难,但坑是真的多。很多朋友卡在最后一步,pip install成功,import的时候直接报错,日志里全是什么cudart64_110.dll、cublas64_11.dll找不到,一看就是CUDA和cuDNN版本…

2026/10/5 14:40:15 阅读更多 →
Python登录接口实战:从密码加密到Session/Token登录态保持

Python登录接口实战:从密码加密到Session/Token登录态保持

做登录接口,算是Python后端入门里最典型、也最容易被低估的一个练习。项目名里带着“携程登陆”,说明不少人是想拿真实网站当靶子练手,这个思路没错,但我的建议是:先别急着去模拟别人家的登录,先自己用Pyth…

2026/10/5 14:40:15 阅读更多 →
零售数仓实战:促销敏感度与评论敏感度建模全解析

零售数仓实战:促销敏感度与评论敏感度建模全解析

做了不少零售行业的数仓项目,说实话,像“促销敏感度”和“评论敏感度”这类需求,几乎每个做电商或品牌方数据团队都会接到。老板们通常不会直接说“我要建个模型”,而是扔过来几个很现实的问题:为什么这波满减发出去&a…

2026/10/5 14:39:14 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →