ASP.NET Core (EXE) 프로세스가 IIS에서 호스팅되는 방법 - ASP.NET Core Module(AspNetCoreModule)
ASP.NET Core 웹 사이트가 IIS에서 호스팅될 때 AspNetCoreModule를 이용해 연결된다는 것을 전에도 언급한 적이 있습니다.
"ASP.NET Core Web Application (.NET Core)"와 "ASP.NET Core Web Application (.NET Framework)" 차이점
; https://www.sysnet.pe.kr/2/0/11121
그런데 사실 AspNetCoreModule은 새로운 모듈이 아닌, 기존 HttpPlatformHandler의 개량형에 불과합니다.
사용자 정의 웹 서버(EXE)를 IIS에서 호스팅하는 방법 - HttpPlatformHandler (Reverse Proxy)
; https://www.sysnet.pe.kr/2/0/11434
이에 대해서는 다음의 이슈에서 확인할 수 있습니다.
HttpPlatformHandler has been replaced by ASP.NET Core Module
; https://github.com/aspnet/IISIntegration/issues/105
즉, ASP.NET Core 초기에만 해도 AspNetCoreModule이 아닌 HttpPlatformHandler로 연동되었지만 ASP.NET만을 위한 몇 가지 기능 추가를 위해 AspNetCoreModule로 넘어온 것입니다.
실제로 HttpPlatformHandler의 경우 자식 프로세스로 "HTTP_PLATFORM_PORT" 환경 변수만을 이용해 동적 포트 번호를 넘겨주는 반면, AspNetCoreModule은 다음과 같이 5개의 환경 변수를 자식 프로세스에게 제공합니다.
- ASPNETCORE_APPL_PATH
- ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
- ASPNETCORE_IIS_HTTPAUTH
- ASPNETCORE_PORT
- ASPNETCORE_TOKEN
이 즈음에서 우리가 습관적으로 호출했던
UseIISIntegration의 역할을 짐작할 수 있습니다. 즉, 해당 확장 메서드는 부모 프로세스(w3wp.exe)로부터 전달받은 동적 포트 관련한 환경 구성을 맡고 있는 것입니다. 현재 UseIISIntegration은 Program.cs 파일의 WebHost.CreateDefaultBuilder 메서드 호출 내에서,
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
namespace core_webapi
{
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
}
불리고 있어 개발자가 별도로 호출할 일은 없게 되었습니다.
HttpPlatformHandler와 AspNetCoreModule이 사실 거의 다르지 않기 때문에 AspNetCoreModule을 이용해서도 지난번 소켓 서버 EXE를 연동하는 것이 가능합니다. 즉, 다음과 같이 web.config을 만들고,
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\ConsoleApp1.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
ConsoleApp1.exe를 지난 예제 소스 코드에서 구해,
사용자 정의 웹 서버(EXE)를 IIS에서 호스팅하는 방법 - HttpPlatformHandler (Reverse Proxy)
; https://www.sysnet.pe.kr/2/0/11434
다음의 환경 변숫값만 변경해서 빌드 후 배포하면 정상적으로 동작합니다.
string value = Environment.GetEnvironmentVariable("ASPNETCORE_PORT");
혹시나 관심 있으신 분들은 ^^ AspNetCoreModule의 소스 코드를 직접 살펴볼 수도 있습니다.
aspnet/AspNetCoreModule
; https://github.com/aspnet/AspNetCoreModule
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]