การทำให้โปรแกรมที่พัฒนาด้วย .NET ทำงานเป็น Server Service ช่วยให้ระบบสามารถเริ่มต้นทำงานได้เองโดยอัตโนมัติเมื่อเปิดเครื่อง ทำงานอยู่เบื้องหลังโดยไม่ต้องมีผู้ใช้ Login ค้างไว้ และมีความอึด ถึก ทน หากแอปพลิเคชันพังก็สามารถตั้งค่าให้มัน Restart ตัวเองได้ บทความนี้จะพาคุณไปดูวิธีเปลี่ยนแอปพลิเคชัน .NET ให้เป็น Service ทั้งบน Windows และ Linux ด้วยโค้ดชุดเดียวกันครับ
การเตรียม Code ใน .NET
หัวใจสำคัญของการทำ Background Service ใน .NET ยุคใหม่คือการใช้ Worker Service Template หรือการเพิ่มชุดคำสั่งในโปรแกรมคอนโซลธรรมดาให้รองรับ Lifecycle ของระบบปฏิบัติการ
ขั้นตอนการเขียนโค้ด
หากเริ่มสร้างโปรเจกต์ใหม่ สามารถใช้คำสั่งdotnet new worker -n MyDotNetService
โครงสร้างหลักจะอยู่ที่ไฟล์ Program.cs และ Worker.cs ให้ทำการติดตั้ง NuGet Package ตาม OS ที่ต้องการใช้งาน
- สำหรับ Windows
Microsoft.Extensions.Hosting.WindowsServices - สำหรับ Linux
Microsoft.Extensions.Hosting.Systemd
ปรับแต่ง Program.cs
แก้ไขไฟล์ Program.cs เพื่อบอกให้ .NET รู้ว่าต้องเปิดรับคำสั่งควบคุมการ Start/Stop จาก OS ด้วย
BASH / Shell
using MyDotNetService;
var builder = Host.CreateApplicationBuilder (args) ;
// รองรับการทำงานเป็น Windows Service
builder.Services.UseWindowsService (options =>
{
options.ServiceName = "MyDotNetService";
}) ;
// รองรับการทำงานเป็น Linux systemd Service
builder.Services.UseSystemd () ;
builder.Services.AddHostedService<Worker> () ;
var host = builder.Build () ;
host.Run () ;