背景:最近在做設備數據對接采集時,遇到一些設備不是標準的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>