ASP.NET Core 웹 응용 프로그램을 호스팅 할때 보통 윈도우 서버의 IIS에서 호스팅 하거나
윈도우 또는 Linux나 도커 환경 등에서 Kestrel로 셀프 호스팅을 할 수 있습니다.
윈도우 대상으로 간혹 심플한 웹 API나 웹 사이트를 호스팅 하는데 있어 IIS 설정이 되어 있지 않거나
특별히 IIS의 기능을 사용하지 않아도 될때 굳이 IIS로 호스팅할 필요 없이 윈도우 서비스에 할 수 있습니다.
이 포스트는 Kestrel로 셀프 호스팅을 하고 윈도우 환경에서 윈도우 서비스로 실행 하는 방법을 설명 합니다.
ASP.NET Core 웹 응용 프로그램 윈도우 서비스로 호스팅
ASP.NET Core 웹 응용 프로그램 프로젝트를 생성합니다.
윈도우 서비스로 실행 환경을 만들기 위해서 NuGet에서 다음 패키지 설치가 필요 합니다.
Microsoft.Extensions.Hosting.WindowsServices
위 패키지를 설치 했다면
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접속으로 정상 호스팅 되는 것을 확인 할 수 있습니다.