Microsoft MVP성태의 닷넷 이야기
글쓴 사람
홈페이지
첨부 파일
 

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




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

[연관 글]





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

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

비밀번호

댓글 쓴 사람
 



2018-03-22 07시08분
정성태

... 16  17  18  19  20  21  22  23  24  25  [26]  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
11518정성태5/11/20182248.NET Framework: 747. C# 7.0에서도 부분적으로 가능해진 "타입 추론을 통한 튜플의 변수명 자동 지정"
11517정성태5/10/20182488.NET Framework: 746. Azure runbook 예제 - 6시간 동안 수행 중인 VM을 중지 [1]파일 다운로드1
11516정성태5/9/20181932.NET Framework: 745. Azure runbook을 PowerShell 또는 C# 코드로 실행하는 방법파일 다운로드1
11515정성태6/8/20182247.NET Framework: 744. C# 6 - Expression bodied function
11514정성태5/3/20183706오류 유형: 466. Bitvise - Error in component session/transport/kexHandler [2]
11513정성태5/10/20184369.NET Framework: 743. C# 언어의 공변성과 반공변성 [5]파일 다운로드1
11512정성태5/3/20182049개발 환경 구성: 375. Azure runbook 실행 시 "Errors", "All Logs"에 오류 메시지가 출력되는 경우
11511정성태5/2/20182232개발 환경 구성: 374. Azure - Runbook 기능 소개
11510정성태4/30/20183867.NET Framework: 742. windbg로 확인하는 Finalizer를 가진 객체의 GC 과정파일 다운로드1
11509정성태4/28/20183403.NET Framework: 741. windbg로 확인하는 객체의 GC 여부
11508정성태4/23/20182608개발 환경 구성: 373. MSBuild를 이용해 프로젝트 배포 후 결과물을 zip 파일로 압축하는 방법파일 다운로드1
11507정성태9/29/20182744개발 환경 구성: 372. MSBuild - 빌드 전/후, 배포 전/후 실행하고 싶은 Task 정의
11506정성태6/27/20185267.NET Framework: 740. C#에서 enum을 boxing 없이 int로 변환하기 - 두 번째 이야기 [6]파일 다운로드1
11505정성태4/19/20182292개발 환경 구성: 371. Azure Web App 확장 예제 - Simple WebSite Extension
11504정성태4/19/20182436오류 유형: 465. Azure Web App 확장 - Extplorer File manager 적용 시 오류
11503정성태4/19/20182397오류 유형: 464. PowerShell - Start-Service 명령 오류 (Service 'xxx' cannot be started)
11502정성태5/12/20183279개발 환경 구성: 370. Azure VM/App Services(Web Apps)에 Let's Encrypt 무료 인증서 적용 방법 [2]
11501정성태4/17/20182244개발 환경 구성: 369. New-AzureRmADServicePrincipal로 생성한 계정의 clientSecret, key 값을 구하는 방법파일 다운로드1
11500정성태4/17/20182519개발 환경 구성: 368. PowerShell로 접근하는 Azure의 Access control 보안과 Azure Active Directory의 계정 관리 서비스
11499정성태4/17/20182089개발 환경 구성: 367. Azure - New-AzureRmADServicePrincipal / New-AzureRmRoleAssignment 명령어
11498정성태4/17/20182123개발 환경 구성: 366. Actvie Azure Directory의 사용자 유형 구분 - Guest/Member
11497정성태4/17/20182315개발 환경 구성: 365. Azure 리소스의 액세스 제어(Access control) 별로 사용자에게 권한을 할당하는 방법 [2]
11496정성태4/17/20181849개발 환경 구성: 364. Azure Portal에서 구독(Subscriptions) 메뉴가 보이지 않는 경우
11495정성태4/18/20182440개발 환경 구성: 363. Azure의 Access control 보안과 Azure Active Directory의 계정 관리 서비스
11494정성태4/16/20182245개발 환경 구성: 362. Azure Web Apps(App Services)에 사용자 DNS를 지정하는 방법
11493정성태4/16/20182232개발 환경 구성: 361. Azure Web App(App Service)의 HTTP/2 프로토콜 지원
... 16  17  18  19  20  21  22  23  24  25  [26]  27  28  29  30  ...