轉換 Worker Service 為 Windows Service
為工作紀錄。.NET6。
關鍵知識
本以為 .NET6 的 Worker Service 本身就是 Windows Service,實際上並不是。仍有轉換步驟,原因應該是其可以部署的標的除了 Windows 外 Linux 等其他平台也可以的樣子。
Worker Service 轉換成 Window Service
只要二步驟:
一、安裝:Microsoft.Extensions.Hosting.WindowsServices 套件。
二、在 Program 類別 CreateHostBuilder 處加上 UseWindowsService(),完工。
部署步驟:
三、以 Release 模式發行到目的地。
四、用 sc.exe
指令註冊到系統。
三、用 services.msc
工具管理服務。
源碼紀錄
using Serilog;
using Serilog.Sinks.MSSqlServer;
using System.Collections.ObjectModel;
using System.Data;
///// 設定工作目錄,若取不到 Configuration 的話。
//Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureLogging((ctx, logging) =>
{
//## 懶人版 資料庫連線初始化
DBHelper.CONNDB = new ConnProxy(ctx.Configuration["ConnectionStrings:CONNDB"]);
var columnOptions = new ColumnOptions();
columnOptions.Store.Remove(StandardColumn.Properties);
columnOptions.Store.Remove(StandardColumn.MessageTemplate);
columnOptions.Store.Add(StandardColumn.LogEvent);
columnOptions.AdditionalColumns = new Collection<SqlColumn>
{
new SqlColumn{ColumnName = "JobId", DataType = SqlDbType.VarChar, DataLength = 50},
};
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(ctx.Configuration)
.Enrich.FromLogContext()
.AuditTo.MSSqlServer(
connectionString: DBHelper.CONNSLP.ConnStr,
sinkOptions: new MSSqlServerSinkOptions() { TableName = "JobSerilog", AutoCreateSqlTable = false },
columnOptions: columnOptions)
.CreateLogger();
logging.AddSerilog();
})
.ConfigureServices((ctx, services) =>
{
//# 註冊相依 Services
//# 加掛排程執行緒
services.AddHostedService<YourJob10Worker>();
services.AddHostedService<YourJob20Worker>();
services.AddHostedService<YourJob30Worker>();
})
.UseWindowsService()
.Build();
await host.RunAsync();
Worker Service 轉換成 Linux Deamon Service
只要二步驟:
一、安裝:Microsoft.Extensions.Hosting.Systemd 套件。
二、在 Program 類別 CreateHostBuilder 處加上 UseSystemd(),完工。
參考文件
Last updated