Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

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




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]


donaricano-btn



[최초 등록일: ]
[최종 수정일: 1/16/2018 ]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 쓴 사람
 



2018-03-22 07시08분
정성태
2020-07-11 12시09분
정성태
2021-01-23 09시58분
YARP를 이용한 리버스 프록시 서버 구축 [.NET Conf 2021 x Seoul - 32분 동영상]
; https://www.youtube.com/watch?v=YrmE9aNGRaE
정성태

[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
12547정성태3/3/20216오류 유형: 699. 비주얼 스튜디오 - The 'CascadePackage' package did not load correctly.
12546정성태3/3/202134개발 환경 구성: 545. github workflow/actions에서 빌드시 snk 파일 다루는 방법 - Encrypted secrets
12545정성태3/2/202194.NET Framework: 1025. 닷넷 5에 추가된 POH (Pinned Object Heap) [3]
12544정성태2/27/2021138.NET Framework: 1024. C# - Control의 Invalidate, Update, Refresh 차이점 [2]
12543정성태2/26/2021112VS.NET IDE: 1577. C# - 디자인 타임(design-time)과 런타임(runtime)의 코드 실행 구분
12542정성태3/3/2021164개발 환경 구성: 544. github repo의 Release 활성화 및 Actions를 이용한 자동화 방법
12541정성태2/18/2021217개발 환경 구성: 543. 애저듣보잡 - Github Workflow/Actions 소개
12540정성태2/17/2021205.NET Framework: 1023. C# - Win32 API에 대한 P/Invoke를 대신하는 Microsoft.Windows.CsWin32 패키지
12539정성태2/16/2021268Windows: 188. WM_TIMER의 동작 방식 개요파일 다운로드1
12538정성태2/16/2021316.NET Framework: 1022. C# - GC 힙이 아닌 Native 힙에 인스턴스 생성 - 0SuperComicLib.LowLevel 라이브러리 소개 [2]
12537정성태2/11/2021385.NET Framework: 1021. UI 요소의 접근은 반드시 그 UI를 만든 스레드에서! - 두 번째 이야기
12536정성태2/9/2021214개발 환경 구성: 542. BDP(Bandwidth-delay product)와 TCP Receive Window
12535정성태2/10/2021173개발 환경 구성: 541. Wireshark로 확인하는 LSO(Large Send Offload), RSC(Receive Segment Coalescing) 옵션
12534정성태2/17/2021187개발 환경 구성: 540. Wireshark + C/C++로 확인하는 TCP 연결에서의 closesocket 동작파일 다운로드1
12533정성태2/8/2021212개발 환경 구성: 539. Wireshark + C/C++로 확인하는 TCP 연결에서의 shutdown 동작파일 다운로드1
12532정성태2/6/2021209개발 환경 구성: 538. Wireshark + C#으로 확인하는 ReceiveBufferSize(SO_RCVBUF), SendBufferSize(SO_SNDBUF)
12531정성태2/5/2021169개발 환경 구성: 537. Wireshark + C#으로 확인하는 PSH flag와 Nagle 알고리듬파일 다운로드1
12530정성태2/5/2021236개발 환경 구성: 536. Wireshark + C#으로 확인하는 TCP 통신의 Receive Window
12529정성태2/4/2021177개발 환경 구성: 535. Wireshark + C#으로 확인하는 TCP 통신의 MIN RTO
12528정성태2/9/2021205개발 환경 구성: 534. Wireshark + C#으로 확인하는 TCP 통신의 MSS(Maximum Segment Size) - 윈도우 환경
12527정성태2/1/2021285개발 환경 구성: 533. Wireshark + C#으로 확인하는 TCP 통신의 MSS(Maximum Segment Size) - 리눅스 환경파일 다운로드1
12526정성태2/1/2021158개발 환경 구성: 532. Azure Devops의 파이프라인 빌드 시 snk 파일 다루는 방법 - Secure file
12525정성태2/1/2021134개발 환경 구성: 531. Azure Devops - 파이프라인 실행 시 빌드 이벤트를 생략하는 방법
12524정성태2/18/2021197개발 환경 구성: 530. 기존 github 프로젝트를 Azure Devops의 빌드 Pipeline에 연결하는 방법 [1]
12523정성태1/31/2021172개발 환경 구성: 529. 기존 github 프로젝트를 Azure Devops의 Board에 연결하는 방법
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...