背景:最近在做设备数据对接采集时,遇到一些设备不是标准的Service-Client接口,导致采集的数据不够准确;比如设备如果中途开关机后,加工的数量就会从0开始重新计数,因此需要实时监控设备的数据,进行叠加处理;考略到工厂设备比较多,实时监听接口的数据为每秒3次,因此将设备的数据先存到数据库,在进行结算显示;因此windows服务作为首选,有两方面的优点,独立的windows服务不会占据应用线程,减少应用间的等待延时;windows服务独立于应用,只需将结算的数据放到指定位置(数据表中),前台在指定位置获取数据,不会影响用户在应用上的操作。
一、Windows服务概述
1.1、Windows服务是什么?
Windows服务是在Windows操作系统上,以后台形式运行的应用程序。它们可以在系统启动时自动启动,并且独立于用户登录。Windows服务通常用于执行那些长时间运行、无需用户交互或需要在后台持续执行的任务。
1.2、Windows能用来做什么?
后台任务和自动化:可以使用Windows服务来执行重复性的计划任务、数据同步、定期备份、报告生成等。
网络服务:Windows服务可以作为网络服务器提供网络服务,如Web服务器、FTP服务器、邮件服务器等。
定时任务:Windows服务可以创建定时任务并在指定时间间隔或特定事件发生时触发执行操作。
数据处理:可以使用Windows服务进行数据处理、数据转换、数据清洗等批量处理任务。
消息队列:可以用于消息队列的消费者,后台任务一直和消息队列保持长连接,需要消费时会自动接收到进行业务处理。
1.3、Windows服务有什么优势?
后台执行:Windows服务在后台运行,不会干扰用户的工作,也无需用户登录即可持续执行任务。
系统级别权限:Windows服务可以在系统级别运行,具有更高的权限,可以访问系统资源和执行敏感操作。
自动启动:Windows服务可以在系统启动时自动启动,确保任务始终处于运行状态。
可靠性和稳定性:Windows服务被设计为长时间运行的应用程序,具有较高的可靠性和稳定性。
二、创建Windows服务
2.1、创建Windows服务项目
打开【Visual Studio】开发工具,然后选择【 Windows 服务(.NET Framework) 】,点击下一步。
注意:Windows服务只有在.NET Framework版本中才有了,在跨平台中使用Worker Service
修改项目名称和项目存储目录,项目名称我写的是【MyDemoService】,然后框架我选择的是【.NET Farmework 4.8】,这个可以根据自己的需要填写和选择,然后点击【创建】。
创建好的目录如下:【Program.cs】是主程序的入口,【Service1.cs】是服务的入口,可以创建多个,然后在Prodrams.cs中配置就好了。
【Service1】服务名称可以重命名修改,此处我重命名为【MyDemoService】, Program.cs文件中也相对应的也要进行修改。
然后我们就可以在【MyDemoService】中写业务逻辑代码了,有很多种方式可以定位到要写的具体文件,先列举两种常用的。
方法一:在【program.cs】文件中,找到这个类,按键盘上的F12可以直接进入查看文件
方法二:直接右击,然后点击【查看代码】。
业务代码写到这里面:
到这一步服务就创建好了,然后就写具体的业务代码就行了。注意:服务必须至少重写 OnStart 和 OnStop 才有用。
此外服务中还又OnPause和OnContinue方法,是在服务启动后暂停和恢复时使用的。
2.2、服务可以重写的方法
2.3、配置日志(log4net)
为了方便测试,先介绍一下如何使用log4net做日志记录,当日志启动时和停止时我们记录一下。
我们在项目目录下新建一个文件夹【LogConfig】,然后再创建一个文件为【log4net.config】。
【log4net.config】内容如下。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<system.web>