網站首頁 編程語言 正文
需求來源
在幾年前, 做的項目是依賴Windows服務來支撐一些業務, 目前已經把技術棧全部由.NET Framework 升級至 .NET Core x。
舊得需求大部分是,接入一些第三方得硬件設備, 例如PLC、串口讀卡器、TCP閱讀器、各種硬件模塊。
為了能夠讓任何開發語言接入無需重新實現, 所以使用Windows服務添加支持各類硬件API、對外使用MQTT.NET來進行協議開發。
版本更新
考慮到目前軟件的更新,其中包括安裝文件、SDK都是基于.NET Core, 所以使用Worker Service來創建服務, 該服務支持在Windows與Linux運行。
創建WorkerService
創建完成后, 整個默認項目包含Program以及一個Worker示例, 配置的模式與ASP.NET Core相同。
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }); }
可以看到在配置服務中,AddHostedService添加了一個Worker, 類型約束IHostedService
關于Worker類的實現
public class Worker : BackgroundService { private readonly ILogger<Worker> _logger; public Worker(ILogger<Worker> logger) { _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); await Task.Delay(1000, stoppingToken); } } }
- ExecuteAsync
在服務啟動時,會執行該方法,每秒鐘輸入當前時間
查看父類BackgroundService的實現,可以看到有支持重寫的方法。
public virtual void Dispose(); public virtual Task StartAsync(CancellationToken cancellationToken); public virtual Task StopAsync(CancellationToken cancellationToken);
意思就是,我們可以在啟動服務時候觸發的邏輯以及暫停服務觸發的邏輯都可以自行編寫。
安裝服務
發布之后,即可使用sc.exe 來安裝/啟動/暫停/卸載服務等。
- 安裝服務
sc.exe create MyService binPath=C:\User\WorkerService.exe - 查詢服務狀態
sc.exe query MyService - 啟動服務
sc.exe start MyService - 暫停服務
sc.exe stop MyService - 卸載服務
sc.exe delete MyService
原文鏈接:https://www.cnblogs.com/zh7791/p/15078534.html
相關推薦
- 2022-03-19 好用的C++?string?Format“函數”介紹_C 語言
- 2023-05-09 Python實現刪除重復文件的示例代碼_python
- 2022-10-01 React?Hook中useState更新延遲問題及解決_React
- 2022-03-16 C++?explicit關鍵字講解_C 語言
- 2022-07-07 C語言數組快速入門詳細講解_C 語言
- 2022-06-07 Python?urllib庫的使用指南詳解_python
- 2023-12-02 富文本組件中圖片間空白處理小技巧
- 2022-01-13 出現/usr/lib64/erlang/erts-10.3/bin/beam.smp: error
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支