关于“.Net Core以Windows服务方式部署”的完整攻略,下面是详细的步骤:
1. 创建.NET Core控制台应用程序
首先需要创建一个.NET Core控制台应用程序,这可以通过在终端中使用“dotnet new console”命令完成,这将创建一个最简单的.NET Core应用程序。
2. 添加Microsoft.Extensions.Hosting和Topshelf NuGet包
Windows服务需要一个宿主来运行,我们可以使用Microsoft.Extensions.Hosting包来创建宿主。Topshelf是一个用于.NET框架的服务托管器,通过使用这两个包可以实现将.NET Core应用程序托管为Windows服务的目的。
可以使用以下命令来添加这两个NuGet包:
dotnet add package Microsoft.Extensions.Hosting
dotnet add package Topshelf
3. 实现服务逻辑
在控制台应用程序中实现服务的逻辑。这个逻辑可以是一个无限循环,或者是一个特定条件下结束的操作。示例如下:
using System.Threading;
using Microsoft.Extensions.Hosting;
namespace TestWindowsService
{
internal class MyService : IHostedService
{
private readonly CancellationTokenSource _cts = new CancellationTokenSource();
public async Task StartAsync(CancellationToken cancellationToken)
{
Console.WriteLine("MyService is starting.");
while (!_cts.IsCancellationRequested)
{
Console.WriteLine("MyService is running...");
await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken);
}
}
public async Task StopAsync(CancellationToken cancellationToken)
{
Console.WriteLine("MyService is stopping.");
_cts.Cancel();
await Task.CompletedTask;
}
}
}
4. 创建服务实例
在Main函数中创建服务实例,这个实例将被Topshelf用于托管.NET Core应用程序。示例如下:
using System;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Topshelf;
namespace TestWindowsService
{
internal static class Program
{
internal static void Main()
{
var serviceProvider = new ServiceCollection()
.AddSingleton<MyService>()
.BuildServiceProvider();
HostFactory.Run(config =>
{
config.Service<MyService>(service =>
{
service.ConstructUsing(svc => serviceProvider.GetService<MyService>());
service.WhenStarted(svc => svc.StartAsync(default).Wait());
service.WhenStopped(svc => svc.StopAsync(default).Wait());
});
config.UseConsoleLogger();
config.RunAsLocalSystem();
config.StartAutomatically();
config.EnableServiceRecovery(conf =>
{
conf.RestartService(1);
});
config.SetServiceName("MyService");
config.SetDisplayName("MyService");
config.SetDescription("My Test Windows Service");
});
}
}
}
示例1:安装Windows服务
使用Visual Studio命令提示符或PowerShell,以管理员身份运行以下命令以安装窗口服务:
.\TestWindowsService.exe install
然后使用以下命令启动服务:
.\TestWindowsService.exe start
示例2:使用Topshelf的控制台可交互模式
使用Visual Studio命令提示符或PowerShell,以管理员身份运行以下命令将服务运行为控制台可交互模式:
.\TestWindowsService.exe console
可以使用“Ctrl + C”停止控制台应用程序和Windows服务。
至此,我们已经完成了.NET Core以Windows服务方式部署的完整攻略和示例,希望对你有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.Net Core以windows服务方式部署 - Python技术站