C#实现服务级程序流程
服务级程序指在后台持续运行的应用程序(如Windows服务或Linux守护进程)。以下是C#实现的核心流程及代码示例:
1. 创建服务框架
使用.NET Worker Service模板:
dotnet new worker -n MyService
项目结构:
Program.cs:主程序入口Worker.cs:服务逻辑核心
2. 服务逻辑实现
修改Worker.cs:
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System.Threading;
using System.Threading.Tasks;
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("Service running at: {time}", DateTimeOffset.Now);
// 核心业务逻辑(如数据处理、API调用等)
await Task.Delay(5000, stoppingToken); // 每5秒执行一次
}
}
}
3. 配置服务主机
在Program.cs中配置:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddHostedService<Worker>();
// 添加其他依赖注入(如数据库连接、HTTP客户端等)
})
.UseWindowsService() // 启用Windows服务支持
.UseSystemd() // Linux系统支持(需安装Microsoft.Extensions.Hosting.Systemd包)
.Build();
await host.RunAsync();
4. 关键功能扩展
- 配置文件读取:
builder.ConfigureAppConfiguration((context, config) => { config.AddJsonFile("appsettings.json", optional: true); }); - 依赖注入示例:
services.AddHttpClient(); // 注入HTTP客户端 services.AddDbContext<AppDbContext>(); // 数据库上下文
5. 部署与安装
Windows服务安装:
sc create MyService binPath="C:\path\to\MyService.exe"
sc start MyService
Linux系统服务(需创建.service文件):
[Unit]
Description=My .NET Service
[Service]
ExecStart=/usr/bin/dotnet /var/app/MyService.dll
Restart=always
[Install]
WantedBy=multi-user.target
6. 服务生命周期管理
public override Task StartAsync(CancellationToken token)
{
_logger.LogInformation("Service starting");
return base.StartAsync(token);
}
public override Task StopAsync(CancellationToken token)
{
_logger.LogInformation("Service stopping");
// 清理资源(如关闭数据库连接)
return base.StopAsync(token);
}
7. 注意事项
- 权限控制:服务账户需具有操作文件/网络等权限
- 异常处理:在
ExecuteAsync中使用try-catch块捕获异常 - 日志记录:通过ILogger记录运行状态,建议集成Serilog等库
- 健康检查:添加
services.AddHealthChecks()实现健康监测
完整示例需安装NuGet包:
Microsoft.Extensions.HostingMicrosoft.Extensions.Hosting.WindowsServices(Windows)Microsoft.Extensions.Hosting.Systemd(Linux)
此流程适用于.NET 5+,支持跨平台部署。实际开发中需根据业务需求添加定时任务处理(如Quartz.NET)、消息队列消费等功能模块。
C#服务级程序开发流程详解

2486

被折叠的 条评论
为什么被折叠?



