众所周知,ASP.NET Core采用了和传统ASP.NET不同的托管和HTTP处理方式,即把服务器和托管环境完全解耦。
ASP.NET Core内置了两个HTTP服务器实现,一个是基于libuv实现的Kestrel(支持跨平台),一个是基于Windows HTTP Server API实现的WebListener(仅支持Windows)。
而托管环境可以和服务器不相关,一般情况是自托管,或者托管到IIS/IISExpress中(此处的IIS仅作为反向代理把请求转发给所使用的服务器实现)。
因此,打算以Windows Service这种比较传统的方式来部署ASP.NET Core的Web应用也是可行的(本质还是自托管,只是启动进程并非控制台程序,而是一个Windows Service)。这不,微软就很贴心的提供了一个Nuget来支持:Microsoft.AspNetCore.Hosting.WindowsServices,

不使用 IIS 时,可以在 Windows 上将 ASP.NET Core 应用作为 Windows 服务进行托管。 作为 Windows 服务进行托管时,应用将在服务器重新启动后自动启动。

系统必备

  • ASP.NET .NET Core SDK 2.1 或更高版本

  • PowerShell 6.2 或更高版本

步骤

1、新建 ASP.NET Core 项目

2、引入Nuget包 Microsoft.AspNetCore.Hosting.WindowsServices

<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="3.0.0" />

3、Program修改为如下:

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<ServiceA>(); services.AddHostedService<ServiceB>(); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }

4、发布项目

5、管理员身份进入cmd  切换到项目目录下

执行

sc create MyService binPath="D:\svc\MvcService.exe"然后手动到服务里面启动服务或者 sc start MyService

https://github.com/conanl5566/dotnet-core-Example/

tree/master/WebApplication24

12-26 03:53