Share via


ASP.NET IIS 7과 통합

작성자: Mike Volodarsky

소개

릴리스 이후 ASP.NET Windows/IIS 플랫폼에서 웹 애플리케이션을 개발하기 위한 플랫폼이었습니다. ASP.NET 2.0은 웹 애플리케이션 개발을 새로운 수준으로 끌어올리고 개발자가 이전보다 더 강력한 애플리케이션을 더 빠르게 빌드할 수 있도록 했습니다.

IIS 7 이상에서는 ASP.NET 런타임 확장성 모델을 핵심 서버와 통합하여 ASP.NET 더 자세히 설명합니다. 이를 통해 개발자는 덜 지원되는 IIS C++ API를 사용하는 대신 ASP.NET 2.0 및 .NET Framework 풍부한 IIS 서버를 완전히 확장할 수 있습니다. 또한 기존 ASP.NET 애플리케이션은 모든 콘텐츠에 대해 Forms 인증, 역할 및 출력 캐싱과 같은 기존 ASP.NET 기능을 사용하여 보다 긴밀한 통합을 즉시 활용할 수 있습니다.

IIS는 기본적으로 향상된 ASP.NET 통합을 제공하지만 IIS는 동일한 서버에서 나란히 사용할 수 있는 새 ASP.NET 통합 모드와 이전 ASP.NET 통합 모드를 모두 지원합니다.

이 문서에서는 두 모드의 아키텍처인 ASP.NET 통합 모드에서 도입된 향상된 기능에 대해 설명하고 ASP.NET 애플리케이션에 대한 통합 모드를 선택하고 구성하는 방법을 설명합니다.

IIS 7 이상에서 향상된 기능 ASP.NET

IIS의 향상된 ASP.NET 통합은 기존 애플리케이션을 향상시키고 새 애플리케이션이 다음과 같은 방법으로 ASP.NET 기능을 활용할 수 있도록 합니다.

  • ASP.NET 서비스는 모든 콘텐츠 형식에 사용할 수 있습니다. 과거에는 Forms 인증, 역할, URL 권한 부여 및 출력 캐싱과 같은 ASP.NET 기능은 ASPX 페이지와 같은 콘텐츠 형식을 ASP.NET 경우에만 사용할 수 있었습니다. 정적 파일, ASP 페이지 및 기타 콘텐츠 형식은 이러한 서비스의 이점을 얻을 수 없습니다.

IIS에서는 모든 ASP.NET 서비스가 모든 콘텐츠에 균일하게 제공됩니다. 예를 들어 ASP.NET Forms 인증, 멤버 자격 및 로그인 컨트롤을 기반으로 하는 기존 ASP.NET 2.0 액세스 제어 솔루션으로 이미지 및 ASP 페이지를 포함한 모든 웹 콘텐츠를 보호할 수 있습니다.

  • ASP.NET 사용하여 IIS를 완전히 확장합니다. 이전 버전의 IIS는 ASP.NET 런타임 제한으로 인해 네이티브 ISAPI 필터 또는 확장 확장 모드를 사용하여 개발해야 하는 서버 확장성을 자주 요구했습니다.

IIS를 사용하면 ASP.NET 모듈이 네이티브(C++) 서버 API로 개발된 모듈과 동일한 런타임 충실도로 서버 파이프라인에 직접 연결할 수 있습니다. ASP.NET 모듈은 요청 처리 파이프라인의 모든 런타임 단계에서 실행할 수 있으며 네이티브 모듈과 관련하여 순서대로 실행할 수 있습니다. ASP.NET API도 확장되어 이전에 가능했던 것보다 더 많은 요청 처리를 제어할 수 있습니다.

  • 통합 서버 런타임. 더 긴밀한 ASP.NET 통합은 IIS와 ASP.NET 간의 많은 기능을 통합합니다.

IIS는 IIS 및 ASP.NET 모듈 및 처리기에 대한 통합 구성을 제공합니다. 사용자 지정 오류 및 추적을 포함한 다른 많은 기능은 더 나은 관리 및 응집력 있는 애플리케이션 디자인을 허용하도록 통합되었습니다.

ASP.NET 통합 아키텍처

IIS 6.0 및 이전 릴리스에서 ASP.NET IIS ISAPI 확장으로 구현되었습니다.

이전 릴리스에서 IIS는 ASP.NET 콘텐츠 형식에 대한 요청을 처리한 다음 ASP.NET 요청 파이프라인 및 페이지 프레임워크를 호스팅하는 ASP.NET ISAPI DLL에 해당 요청을 전달했습니다. ASP 페이지 또는 정적 파일과 같은 non-ASP.NET 콘텐츠에 대한 요청은 IIS 또는 기타 ISAPI 확장에서 처리되었으며 ASP.NET 표시되지 않았습니다.

이 모델의 주요 제한 사항은 ASP.NET 모듈 및 사용자 지정 ASP.NET 애플리케이션 코드에서 제공하는 서비스를 non-ASP.NET 요청에 사용할 수 없다는 것이었습니다. 또한 ASP.NET 모듈은 ASP.NET 실행 경로 전후에 발생한 IIS 요청 처리의 특정 부분에 영향을 줄 수 없습니다.

I S6 및 SP 점 NET 파이프라인을 보여 주는 다이어그램

그림 1: IIS 6.0 & ASP.NET 파이프라인

IIS에서 ASP.NET 요청 처리 파이프라인은 IIS 파이프라인을 직접 오버레이하여 기본적으로 연결하지 않고 래퍼를 제공합니다.

IIS는 모든 단계에서 요청 처리를 제공하는 네이티브 IIS 모듈과 ASP.NET 모듈을 모두 사용하여 모든 콘텐츠 형식에 대해 도착하는 요청을 처리합니다. 이를 통해 Forms 인증 또는 출력 캐시와 같은 ASP.NET 모듈에서 제공하는 서비스를 ASP 페이지, PHP 페이지, 정적 파일 등에 대한 요청에 사용할 수 있습니다.

서버 파이프라인에 직접 연결하는 기능을 사용하면 ASP.NET 모듈을 IIS 기능 후에 교체, 실행 또는 실행할 수 있습니다. 예를 들어 멤버 자격 서비스 및 SQL Server 사용자 데이터베이스를 사용하여 Windows 계정에서만 작동하는 기본 제공 IIS 기본 인증 기능을 대체하기 위해 작성된 사용자 지정 ASP.NET 기본 인증 모듈을 사용할 수 있습니다.

또한 확장된 ASP.NET API는 직접 통합을 사용하여 더 많은 요청 처리 작업을 사용하도록 설정합니다. 예를 들어 ASP.NET 모듈은 ASP 애플리케이션이 실행되기 전에 Accept-Language 헤더를 삽입하여 다른 구성 요소가 요청을 처리하기 전에 요청 헤더를 수정할 수 있습니다. 그러면 지역화된 콘텐츠가 사용자 기본 설정에 따라 클라이언트로 다시 전송됩니다.

I S7 이상 통합 모드를 보여 주는 다이어그램

그림 2: IIS 7 이상 통합 모드

런타임 통합으로 인해 IIS 및 ASP.NET 동일한 구성을 사용하여 서버 모듈을 사용하도록 설정하고 정렬하고 처리기 매핑을 구성할 수 있습니다. 다른 통합 기능에는 추적, 사용자 지정 오류 및 출력 캐싱이 포함됩니다.

호환성

특히 아키텍처는 ASP.NET 런타임 아키텍처 및 API를 유지 관리하므로 기존 ASP.NET 애플리케이션 및 서비스가 설치 시 작동할 수 있습니다. 몇 가지 수정을 통해 기존 ASP.NET 애플리케이션 및 서비스가 새로운 ASP.NET 기능을 활용할 수 있습니다.

마찬가지로 개발자는 런타임 통합의 이점을 활용하는 동안 친숙한 ASP.NET API에 새 애플리케이션을 계속 작성할 수 있습니다.

IIS는 통합 모드에서 충족되지 않는 특정 호환성 요구 사항이 있는 ASP.NET 애플리케이션에 클래식 ASP.NET 모드를 계속 제공합니다. 관리자는 애플리케이션 풀당 원하는 통합 모드를 선택할 수 있으므로 새 모드와 클래식 ASP.NET 모드를 모두 사용하는 애플리케이션이 동일한 서버에서 나란히 작동할 수 있습니다.

ASP.NET 애플리케이션을 IIS 7 이상 통합 모드로 마이그레이션

IIS에서 ASP.NET 기본적으로 새 통합 모드에서 작동하도록 구성됩니다. 이를 통해 애플리케이션은 최소한의 수정으로 통합 모드 개선 사항을 활용할 수 있습니다.

구성 통합으로 인해 일부 애플리케이션은 통합 모드에서 제대로 작동하도록 마이그레이션해야 할 수 있습니다. 기본적으로 서버는 마이그레이션에 대한 지원을 제공합니다. 마이그레이션이 필요한 애플리케이션을 검색하고 애플리케이션 마이그레이션을 요청하는 오류 메시지를 반환합니다.

다음 구성으로 인해 마이그레이션 오류가 발생합니다.

  1. 애플리케이션 Web.config 파일은 httpModules> 구성을 정의합니다<.
    애플리케이션은 새 ASP.NET 모듈을 로드하거나 기존 모듈을 제거합니다.
    통합 모드에서 ASP.NET 모듈은 통합 <system.webServer>/<modules 구성 섹션의 네이티브 모듈로 지정됩니다> .
    system.web>/<httpModules> 구성 섹션에 <지정된 ASP.NET 모듈을 새 구성 섹션으로 이동하여 적용해야 합니다. 그 후 새 ASP.NET 모듈을 통합 <modules> 섹션에 직접 추가해야 합니다.
  2. 애플리케이션 Web.config 파일은 구성을 정의합니다 <httpHandlers> .
    애플리케이션은 일부 콘텐츠 형식에 대해 사용자 지정 처리기 매핑을 사용합니다.
    통합 모드에서 적용하려면 통합 system.webServer/handlers> 구성 섹션에서 ASP.NET 처리기 매핑을 지정<해야< 합니다.> 그 후 새 ASP.NET 처리기 매핑을 통합 <handlers> 섹션에 직접 추가해야 합니다.
    이 섹션에서는 이전에 ASP.NET <httpHandlers> 처리기 매핑을 설정하도록 구성해야 했던 ASP.NET 구성과 IIS 스크립트맵 구성을 모두 대체합니다.
  3. 애플리케이션 Web.config 파일은 ID impersonate="true" /> 구성을 정의합니다<.
    애플리케이션은 인트라넷 애플리케이션에서 가장 일반적인 클라이언트 자격 증명을 가장합니다. 통합 모드에서는 일부 초기 요청 처리 단계에서 클라이언트 가장을 사용할 수 없습니다. 대부분의 경우 이는 문제가 되지 않으며 마이그레이션 오류를 끌 수 있습니다. 그렇지 않으면 클래식 ASP.NET 모드를 사용하여 실행되도록 이 애플리케이션을 구성해야 합니다.

마이그레이션 오류가 생성되면 일반적으로 애플리케이션 구성을 마이그레이션하거나(1과 2 이상의 경우 권장) 클래식 ASP.NET 모드를 사용하도록 애플리케이션을 이동할 수 있습니다(3인 경우).

애플리케이션 구성 마이그레이션

IIS는 AppCmd.exe 명령줄 도구를 사용하여 마이그레이션을 수행하여 애플리케이션을 마이그레이션합니다. 마이그레이션 오류 메시지에는 애플리케이션을 통합 모드로 즉시 마이그레이션하려면 관리자 사용자 권한으로 실행해야 하는 명령줄 창에서 실행되는 명령이 포함되어 있습니다.

마이그레이션 명령의 기본 형식은 다음과 같습니다.

%windir%\system32\inetsrv\APPCMD.EXE migrate config <Application Path>

여기서 <애플리케이션 경로> 는 "기본 웹 사이트/app1"과 같은 사이트 이름을 포함하는 애플리케이션의 가상 경로입니다.

마이그레이션이 완료되면 애플리케이션은 문제 없이 통합 모드와 클래식 모드 모두에서 실행됩니다.

참고

마이그레이션 후 구성을 변경하면 서버에서 다시 마이그레이션하라는 메시지를 표시하지 않습니다. 초기 마이그레이션 후에는 구성이 두 모드 간에 동기화된 상태로 유지되는지 확인해야 합니다. AppCmd.exe 명령줄 도구를 사용하여 애플리케이션을 수동으로 다시 마이그레이션할 수 있습니다.

클래식 ASP.NET 통합 모드로 돌아가기

클래식 ASP.NET 모드로 돌아가려면 클래식 모드에서 실행되도록 구성된 애플리케이션 풀로 애플리케이션을 이동합니다. 다른 애플리케이션은 클래식 모드 애플리케이션과 함께 새로운 통합 모드에서 계속 실행됩니다.

애플리케이션을 클래식 ASP.NET 모드로 이동하는 방법에 대한 자세한 내용은 애플리케이션에 대한 ASP.NET 모드 변경을 참조하세요.

마이그레이션 오류 메시지 비활성화

구성을 수동으로 마이그레이션했거나 구성을 마이그레이션하지 않고 통합 모드로 유지하려는 경우(권장되지 않음) 애플리케이션의 Web.config 파일에 다음을 추가하여 마이그레이션 오류 메시지를 사용하지 않도록 설정할 수 있습니다.

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" />    
</system.webServer>

참고

서버는 AppCmd.exe 명령줄 도구를 사용하여 구성을 마이그레이션한 후 오류 메시지를 자동으로 사용하지 않도록 설정합니다.

마이그레이션 오류 메시지를 수동으로 사용하지 않도록 설정하는 경우 서버에서 지원되지 않는 구성에 대한 경고를 더 이상 제공하지 않으므로 애플리케이션이 통합 모드에서 제대로 작동하는지 확인해야 합니다.

애플리케이션에 대한 ASP.NET 모드 변경

통합 ASP.NET 모드에서 애플리케이션이 제대로 작동하지 않으면 다른 애플리케이션 풀로 이동하여 클래식 ASP.NET 모드로 이동할 수 있습니다. 각 애플리케이션 풀은 원하는 ASP.NET 통합 모드를 사용하도록 개별적으로 구성됩니다. 이렇게 하면 동일한 서버에서 서로 다른 ASP.NET 통합 모드를 함께 사용하는 애플리케이션 그룹을 실행할 수 있습니다.

애플리케이션의 ASP.NET 통합 모드를 변경하려면 다음을 수행합니다.

  1. 원하는 모드를 사용하도록 구성된 애플리케이션 풀을 찾거나 만듭니다.
    기본적으로 모든 새 애플리케이션 풀은 통합 모드에서 실행됩니다.
    ASP.NET 설정은 클래식 ASP.NET 통합 모드에서 실행되는 "클래식 .NET AppPool"이라는 애플리케이션 풀을 제공합니다. 통합 모드에서 실행해서는 안 되는 애플리케이션에 이 애플리케이션 풀을 사용할 수 있습니다.
    IIS 관리 도구 또는 AppCmd.exe 명령줄 도구를 사용하거나 애플리케이션 풀 구성을 수동으로 편집하여 기존 애플리케이션 풀의 ASP.NET 모드를 변경할 수도 있습니다.
  2. 해당 애플리케이션 풀을 사용하도록 애플리케이션을 설정합니다.
    각 애플리케이션은 특정 애플리케이션 풀을 사용하도록 구성됩니다. 기본적으로 모든 애플리케이션은 통합 모드에서 실행되는 "DefaultAppPool"이라는 기본 애플리케이션 풀을 사용합니다.
    IIS 관리 도구 또는 AppCmd.exe 명령줄 도구를 사용하거나 애플리케이션 구성을 수동으로 편집하여 애플리케이션의 애플리케이션 풀을 변경할 수 있습니다.

애플리케이션에 대한 ASP.NET 버전 선택

지금까지 IIS는 여러 버전의 ASP.NET/CLR을 나란히 지원했습니다. 예를 들어 IIS를 사용하면 동일한 서버가 .NET Framework v1.1 및 v2.0을 사용하여 ASP.NET 애플리케이션을 실행할 수 있습니다. 이 지원은 IIS 스크립트맵 구성을 사용하여 ASP.NET 콘텐츠에 대한 요청을 제공하도록 해당 버전의 ASPNET_isapi.dll 매핑하여 제공되었습니다.

예를 들어 다음 스크립트맵 구성을 사용하여 병렬 지원을 사용하도록 설정할 수 있습니다.

  1. /app1에서 v1.1 애플리케이션을 ASP.NET.
    *.aspx -> d:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll
  2. /app2에서 v2.0 애플리케이션을 ASP.NET.
    *.aspx -> d:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll

애플리케이션이 *.aspx 요청을 받으면 IIS는 지정된 aspnet_isapi.dll 로드하여 올바른 CLR 버전을 작업자 프로세스에 로드하고 요청을 처리합니다.

또한 ASP.NET 병렬 스크립트맵을 구성하는 다음과 같은 방법을 제공합니다.

  1. MMC 확장을 ASP.NET. 사용할 ASP.NET 버전을 선택하면 확장은 애플리케이션이 올바른 버전의 aspnet_isapi.dll 가리키도록 스크립트맵을 자동으로 구성합니다.
  2. ASP.NET aspnet_regiis.exe. –i 및 –r 옵션을 사용하여 해당 ASP.NET 버전을 가리키는 스크립트맵을 설치합니다.

안타깝게도 단일 작업자 프로세스에 하나의 CLR 버전만 로드하는 기능의 제한으로 인해 서로 다른 버전의 ASP.NET 사용하는 두 애플리케이션이 동일한 애플리케이션 풀 내에 존재하도록 구성되지 않도록 해야 합니다. 이 일반적인 실수가 발생하면 첫 번째 요청은 해당 aspnet_isapi.dll CLR을 로드하고 동일한 애플리케이션 풀 내의 다른 버전에 대한 후속 요청이 실패합니다.

IIS는 애플리케이션 풀이 애플리케이션을 실행하기 위해 선택한 ASP.NET 버전임을 인식합니다. 따라서 애플리케이션 풀에 로드된 CLR/ASP.NET 버전은 애플리케이션 풀 구성에서 명시적으로 구성됩니다. 기본적으로 IIS는 작업자 프로세스를 로드할 때 이 설정에 지정된 CLR을 미리 로드합니다(버전이 비어 있도록 구성되지 않은 경우).

애플리케이션 풀은 .NET Framework 버전 관리 경계이므로 다음을 수행하여 ASP.NET 애플리케이션의 버전을 변경할 수 있습니다.

  1. 애플리케이션을 원하는 ASP.NET 버전을 사용하는 애플리케이션 풀로 이동합니다.
    기본적으로 애플리케이션은 통합 모드에서 ASP.NET v2.1을 실행하는 "DefaultAppPool"이라는 기본 애플리케이션 풀을 사용합니다. 애플리케이션을 "클래식 .NET AppPool"으로 이동하여 ASP.NET v2.1 클래식 모드 또는 선택한 다른 애플리케이션 풀에서 실행됩니다.
  2. 애플리케이션이 실행 중인 애플리케이션 풀에서 원하는 ASP.NET 버전을 사용하도록 구성합니다.
    기본적으로 모든 새 애플리케이션 풀은 통합 모드에서 ASP.NET v2.1을 실행하도록 구성됩니다.

참고

aspnet_regiis /i 또는 /r 옵션을 사용하여 특정 애플리케이션 또는 전역적으로 ASP.NET 버전을 구성하지 마세요.

IIS는 사전 조건 처리기 매핑을 사용하여 애플리케이션 풀의 구성된 CLR 버전 및 관리되는 통합 모드에 따라 올바른 처리기 매핑 집합(클래식 모드에서 ASPNET_isapi.dll 또는 통합 모드의 관리되는 처리기 유형에 직접)을 자동으로 선택합니다. ASP.NET 2.0 설정은 서버 수준에서 이러한 처리기 매핑을 설치합니다.

통합 ASP.NET 모드 활용

IIS에서 ASP.NET 애플리케이션은 기본적으로 통합 모드로 실행됩니다. 그러나 보다 긴밀한 통합을 통해 제공되는 이점을 활용하려면 애플리케이션 구성을 일부 수정해야 합니다. 통합 모드를 활용하여 애플리케이션에 강력한 기능을 제공하는 새로운 ASP.NET 구성 요소를 개발할 수도 있습니다.

모든 유형의 콘텐츠에 ASP.NET 서비스 사용

통합 모드에서는 ASP.NET 모듈에서 제공하는 서비스를 모든 콘텐츠 형식에 대한 요청에 사용할 수 있습니다. 그러나 기본적으로 ASP.NET 모듈은 이전 버전과의 호환성을 위해 콘텐츠를 ASP.NET 요청에 대해서만 실행되도록 구성됩니다.

이렇게 하려면 서버 수준의 구성 섹션에 있는 각 ASP.NET 모듈에 managedHandler 사전 조건을 연결합니다.

<modules> 
     <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" 
             preCondition="managedHandler" />
     <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" 
             preCondition="managedHandler" />
    ...
</modules>

사전 조건은 서버가 모든 요청에 대해 평가하여 모듈이 실행될지 여부를 결정하는 규칙입니다. managedHandler 사전 조건은 ASP.NET 처리기에 매핑된 콘텐츠 형식에 대한 요청에 대해서만 적용됩니다.

ASP.NET 모듈에서 제공하는 기능을 모든 요청에 적용하려면 모듈 항목을 제거한 다음 애플리케이션의 루트 Web.config 파일의 전제 조건 없이 다시 추가합니다.

전체 애플리케이션에 ASP.NET Forms 인증을 사용하도록 설정하려면 다음과 같이 Web.config 파일을 수정합니다.

<modules> 
    <remove name="FormsAuthentication" /> 
    <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" /> 
    …
</modules>

이 변경으로 FormsAuthentication 모듈은 애플리케이션의 모든 요청에 대해 실행됩니다. 이를 통해 Forms 인증을 사용하여 모든 애플리케이션 콘텐츠를 보호할 수 있습니다. 통합 모드를 활용하여 모든 애플리케이션 콘텐츠에 대해 Forms 인증을 제공하는 방법에 대한 자세한 내용은 통합 파이프라인 모드 활용 연습을 참조하세요.

바로 가기를 사용하여 "managedHandler" 사전 조건에 관계없이 모든 관리형(ASP.NET) 모듈이 애플리케이션의 모든 요청에 대해 실행되도록 설정할 수도 있습니다. "managedHandler" 사전 조건을 제거하도록 각 모듈 항목을 구성하지 않고 모든 요청에 대해 모든 관리되는 모듈을 실행할 수 있도록 하려면 섹션에서 runAllManagedModulesForAllRequests 속성을 <modules> 사용합니다.

<modules runAllManagedModulesForAllRequests="true" />

이를 사용하면 "managedHandler" 사전 조건이 적용되지 않으며 모든 요청에 대해 관리되는 모든 모듈이 실행됩니다.

다른 ASP.NET 모듈을 전체 애플리케이션에 적용할 수 있도록 실험합니다. 예를 들어 ASP.NET 출력 캐시 모듈을 사용하여 캐시 ASP 페이지를 출력하거나 URL 권한 부여 및 역할 관리자를 사용하여 사진에 대한 액세스 제어 규칙을 구성합니다. 또는 사용자 고유의 모듈을 개발하여 전체 웹 사이트에 ASP.NET 강력한 성능을 발휘합니다.

더 강력한 ASP.NET 서비스 구축

통합 모드에서 ASP.NET 모듈은 모든 콘텐츠에 해당 서비스를 적용합니다. 또한 ASP.NET 모듈은 통합 모드의 통합 요청 처리 파이프라인에서 실행되므로 동일한 요청 처리 단계를 구독하고 네이티브 서버 모듈과 동일한 작업을 수행합니다. 동시에 ASP.NET API는 거의 동일하게 유지되며 이전에 사용할 수 없었던 기능의 잠금을 해제하는 몇 가지 주요 기능이 추가되었습니다.

런타임 충실도

통합 모드에서 모듈에 노출되는 ASP.NET 요청 처리 단계는 IIS 파이프라인의 해당 단계에 직접 연결됩니다. 전체 파이프라인에는 ASP.NET HttpApplication 이벤트로 노출되는 다음 단계가 포함되어 있습니다.

  1. BeginRequest. 요청 처리가 시작됩니다.
  2. AuthenticateRequest. 요청이 인증됩니다. IIS 및 ASP.NET 인증 모듈은 이 단계를 구독하여 인증을 수행합니다.
  3. PostAuthenticateRequest.
  4. AuthorizeRequest. 요청 권한이 부여됩니다. IIS 및 ASP.NET 권한 부여 모듈은 인증된 사용자가 요청된 리소스에 액세스할 수 있는지 여부를 검사.
  5. PostAuthorizeRequest.
  6. ResolveRequestCache. 캐시 모듈은 이 요청에 대한 응답이 캐시에 있는지 여부를 검사 나머지 실행 경로를 진행하는 대신 반환합니다. ASP.NET 출력 캐시 및 IIS 출력 캐시 기능이 모두 실행됩니다.
  7. PostResolveRequestCache.
  8. MapRequestHandler. 이 단계는 ASP.NET 내부이며 요청 처리기를 확인하는 데 사용됩니다.
  9. PostMapRequestHandler.
  10. AcquireRequestState. 요청 실행에 필요한 상태가 검색됩니다. ASP.NET 세션 상태 및 프로필 모듈은 해당 데이터를 가져옵니다.
  11. PostAcquireRequestState.
  12. PreExecuteRequestHandler. 처리기를 실행하기 전의 모든 작업이 수행됩니다.
  13. ExecuteRequestHandler. 요청 처리기가 실행됩니다. ASPX 페이지, ASP 페이지, CGI 프로그램 및 정적 파일이 제공됩니다.
  14. PostExecuteRequestHandler
  15. ReleaseRequestState. 요청 상태 변경 내용이 저장되고 상태가 여기에서 정리됩니다. ASP.NET 세션 상태 및 프로필 모듈은 이 단계를 정리에 사용합니다.
  16. PostReleaseRequestState.
  17. UpdateRequestCache. 응답은 나중에 사용하기 위해 캐시에 저장됩니다. ASP.NET 출력 캐시 및 IIS 출력 캐시 모듈이 실행되어 응답을 캐시에 저장합니다.
  18. PostUpdateRequestCache.
  19. LogRequest. 이 단계에서는 요청 결과를 기록하며 오류가 발생하더라도 실행되도록 보장됩니다.
  20. PostLogRequest.
  21. EndRequest. 이 단계에서는 최종 요청 정리를 수행하며 오류가 발생하더라도 실행되도록 보장됩니다.

익숙한 ASP.NET API를 사용하면 IIS 모듈과 동일한 단계에서 실행할 수 있으므로 이전에 네이티브 ISAPI 필터 및 확장에서만 액세스할 수 있었던 작업이 이제 관리 코드에서 가능합니다.

예를 들어 이제 다음을 수행하는 모듈을 작성할 수 있습니다.

  1. URL을 다시 쓰거나 보안 필터링을 수행하는 등의 처리를 수행하기 전에 요청을 가로채세요.
  2. 기본 제공 인증 모드를 대체합니다.
  3. 들어오는 요청 내용(예: 요청 헤더)을 수정합니다.
  4. 모든 콘텐츠 형식에 대해 나가는 응답을 필터링합니다.

사용자 지정 ASP.NET 인증 모듈을 사용하여 IIS 를 확장하는 방법에 대한 좋은 예제는 .NET을 사용하여 IIS 7 이상 모듈 개발을 참조하세요.

확장된 ASP.NET API

ASP.NET API는 이전 릴리스와 호환되며, 이를 통해 기존 모듈은 수정 없이 IIS 7 이상에서 작동하고 코드 변경 없이 모든 애플리케이션 콘텐츠에 적용할 수 있습니다.

그러나 IIS 통합 모드용으로 작성된 모듈은 몇 가지 추가 API를 활용하여 이전에 사용할 수 없었던 주요 요청 처리 시나리오를 사용하도록 설정할 수 있습니다.

HttpResponse.Headers 컬렉션을 사용하면 모듈이 다른 애플리케이션 구성 요소에서 생성하는 응답 헤더를 검사하고 조작할 수 있습니다. 예를 들어 ASP 페이지에서 생성된 Content-Type 헤더를 변경하여 브라우저에서 다운로드 대화 상자를 표시할 수 있습니다. HttpResponse 클래스의 Cookies 컬렉션도 ASP.NET 외부에서 생성된 경우에도 요청 처리의 일부로 생성된 쿠키를 수정할 수 있도록 향상되었습니다.

HttpRequest.Headers 컬렉션은 모듈이 들어오는 요청 헤더를 조작할 수 있도록 쓰기가 가능합니다. 이를 사용하여 다른 서버 구성 요소의 동작을 변경할 수 있습니다. 예를 들어 지역화된 애플리케이션이 Accept-Language 헤더의 값을 동적으로 변경하여 다른 언어로 클라이언트에 응답하도록 강제할 수 있습니다.

마지막으로, 이제 IIS 서버 변수를 설정할 수 있는 HttpRequest.ServerVariables 컬렉션을 쓸 수 있습니다. ASP.NET 모듈은 이 기능을 사용하여 IIS에서 제공하는 값을 변경하고 PHP와 같은 다른 애플리케이션 프레임워크에 표시되는 새 서버 변수를 만듭니다.

런타임 통합

새 API 외에도 통합 모드를 사용하면 기존 ASP.NET 기능이 애플리케이션에 더 많은 가치를 제공할 수 있습니다.

System.Diagnostics.Trace 클래스 및 ASP.NET 페이지 추적 기능을 포함하여 ASP.NET 제공하는 추적 기능은 이제 추적 정보를 IIS 추적 시스템으로 내보낸다. 이렇게 하면 IIS 및 ASP.NET 구성 요소의 요청 처리 중에 생성된 추적 정보를 단일 로그 파일에 배치하여 서버 문제의 진단 향상할 수 있습니다.

클라이언트로 이동하기 전에 Stream 인터페이스를 사용하여 응답을 변경할 수 있는 ASP.NET 응답 필터링 기능이 향상되어 non-ASP.NET 콘텐츠를 필터링할 수 있습니다. 따라서 모든 서버 콘텐츠에서 ASP.NET 필터링을 사용하거나 처리하려는 콘텐츠에 대한 요청에 대해서만 필터를 선택적으로 설치할 수 있습니다. 이 기능을 사용하면 이 콘텐츠가 ASPX 페이지 또는 정적 파일에서 제공되는지 여부에 관계없이 사이트의 응답에 특정 콘텐츠를 삽입하거나 검열하는 필터링 기능을 작성할 수 있습니다.

요약

IIS 7 이상의 ASP.NET 통합은 ASP.NET 잠재력을 최대한 발휘하여 개발자가 ASP.NET 및 .NET Framework 쉽고 풍부하게 강력한 서버 구성 요소를 만들 수 있도록 합니다. 기존 애플리케이션에 ASP.NET 통합 모드를 활용하는 방법에 대한 자세한 내용은 통합 파이프라인 모드 활용을 참조하세요. 서버를 확장하기 위해 새 ASP.NET 구성 요소를 빌드하는 방법에 대한 자세한 내용은 .NET을 사용하여 IIS 7 이상 모듈 개발을 참조하세요.