(ASP.NET Core) 웹 응용 프로그램 윈도우 서비스로 호스팅 하는 방법(Kestrel사용)

 

ASP.NET Core 웹 응용 프로그램을 호스팅 할때 보통 윈도우 서버의 IIS에서 호스팅 하거나
윈도우 또는 Linux나 도커 환경 등에서 Kestrel로 셀프 호스팅을 할 수 있습니다.

윈도우 대상으로 간혹 심플한 웹 API나 웹 사이트를 호스팅 하는데 있어 IIS 설정이 되어 있지 않거나
특별히 IIS의 기능을 사용하지 않아도 될때 굳이 IIS로 호스팅할 필요 없이 윈도우 서비스에 할 수 있습니다.

이 포스트는 Kestrel로 셀프 호스팅을 하고 윈도우 환경에서 윈도우 서비스로 실행 하는 방법을 설명 합니다.

ASP.NET Core 웹 응용 프로그램 윈도우 서비스로 호스팅

ASP.NET Core 웹 응용 프로그램 프로젝트를 생성합니다.

윈도우 서비스로 실행 환경을 만들기 위해서 NuGet에서 다음 패키지 설치가 필요 합니다.


Microsoft.Extensions.Hosting.WindowsServices image


위 패키지를 설치 했다면
CreateHostBuilder(string[] args) 메서드에서 윈도우 서비스에서 실행 되도록
구성 옵션을 설정 할 수 있습니다.

[Program.cs]

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    // Kestrel 호스팅
                    webBuilder.UseKestrel(options =>
                    {
                        //options.Limits.MaxConcurrentConnections = 100;
                        //options.Limits.MaxConcurrentUpgradedConnections = 100;
                        options.Limits.MinRequestBodyDataRate = new Microsoft.AspNetCore.Server.Kestrel.Core.MinDataRate(bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(15));
                        options.ListenAnyIP(28000);
                    });
                }).UseWindowsService();  // WindowsService 등록해서 실행 하도록 설정 추가

배포 및 서비스 생성

프로젝트의 컨텍스트 메뉴에서 [게시] 설정에 Tatget Runtime(대상 런타임)을 win-x64로 설정 합니다.
추가로 Deployment Mode(배포 모드) 설정은 호스팅 되는 OS환경에 따라 [프로엠워크 종속] 또는 [자체 포함]으로 설정 하면 됩니다.

게시로 빌드가 완료 되면 윈도우 서비스를 만들 수 있습니다.

관리자 모드 명령 프롬프트에서 다음 명령줄을 실행 합니다.

> sc create <서비스이름> binPath= <빌드 결과.exe>

예]

> sc create <WebAPI_Service> binPath= "C:\WebAPI\API.exe"

윈도우 서비스가 생성되고 서비스가 정상 실행 되면 Url접속으로 정상 호스팅 되는 것을 확인 할 수 있습니다.