IIS 5와 6은 다르게 작동합니다.
요청이 오면 IIS는 스크립트 맵(확장 맵)을 확인하고 요청을 aspnet_isapi.dll로 라우팅합니다. 이 DLL의 작업과 요청이 ASP.NET 런타임에 입력되는 방식은 IIS5와 6에서 다릅니다. 그림 2는 이 프로세스의 대략적인 개요를 보여줍니다.
IIS5에서 aspnet_isapi.dll은 inetinfo.exe 프로세스에서 직접 호스팅됩니다. 웹 사이트나 가상 디렉터리의 격리 수준을 중간 또는 높음으로 설정하면 IIS의 별도(격리된) 작업자 프로세스에서 호스팅됩니다. 첫 번째 ASP.NET 요청이 오면 DLL(aspnet_isapi.dll)은 또 다른 새 프로세스 aspnet_wp.exe를 시작하고 처리를 위해 요청을 이 프로세스로 라우팅합니다. 그러면 이 프로세스는 .NET 런타임을 로드하고 호스팅합니다. ISAPI DLL로 전달된 모든 요청은 명명된 파이프 호출을 통해 이 프로세스로 라우팅됩니다.
그림 2 - IIS에서 ASP.NET 런타임으로 그리고 요청 처리 파이프라인을 통해 요청 흐름을 개략적으로 보여줍니다. IIS5와 IIS6은 서로 다른 방식으로 ASP.NET과 상호 작용하지만 일단 요청이 ASP.NET 파이프라인으로 들어오면 전체 처리 흐름은 동일합니다.
이전 버전의 서버와 달리 IIS6은 ASP.NET에 완전히 최적화되었습니다.
IIS6 - 장기 라이브 응용 프로그램 풀
IIS6은 처리 모델을 크게 변경했습니다. IIS는 더 이상 ISAPI 확장과 같은 외부 실행 코드를 직접 호스팅하지 않습니다. IIS는 항상 별도의 작업자 스레드(응용 프로그램 풀)를 생성하며 ISAPI dll 실행을 포함한 모든 처리가 이 프로세스에서 발생합니다. 응용 프로그램 풀링은 특정 스레드에서 실행될 코드를 매우 세밀하게 제어할 수 있으므로 IIS6에서 크게 개선되었습니다. 응용 프로그램 풀은 각 가상 경로 또는 전체 웹 사이트에서 구성할 수 있으므로 각 웹 응용 프로그램을 자체 프로세스로 격리하여 각 응용 프로그램이 동일한 컴퓨터에서 실행되는 다른 웹 응용 프로그램에 연결되도록 할 수 있습니다. 하나의 프로세스가 충돌하더라도 다른 프로세스에는 영향을 미치지 않습니다(적어도 웹 처리 관점에서는).
뿐만 아니라 응용 프로그램 풀은 고도로 구성 가능합니다. 실행 가장 수준을 설정하여 풀이 실행되는 보안 환경을 구성할 수 있습니다. 이를 통해 웹 응용 프로그램에 부여된 권한을 매우 세밀하게 사용자 지정할 수 있습니다. ASP.NET의 큰 개선 사항은 응용 프로그램 풀이 machine.config 파일의 ProcessModel 섹션에 있는 대부분의 설정을 재정의한다는 것입니다. 이 섹션의 설정은 전역 설정이고 응용 프로그램의 web.config 파일에서 재정의될 수 없기 때문에 IIS5에서 관리하기가 매우 어렵습니다. IIS6을 실행할 때 ProcessModel 관련 설정은 대부분 무시되고 대신 응용 프로그램 풀에서 읽혀집니다. 대부분의 설정이 여기에 언급되어 있습니다. 스레드 풀 크기 및 IO 스레드 설정과 같은 일부 설정은 스레드 풀 설정에 해당 항목이 없기 때문에 여전히 machine.config에서 읽혀집니다.
응용 프로그램 풀은 외부 실행 파일이므로 이러한 실행 파일을 쉽게 모니터링하고 관리할 수 있습니다. IIS6은 일련의 시스템 상태 확인, 다시 시작 및 시간 초과 옵션을 제공하며, 이는 많은 경우에 프로그램 문제를 확인하고 수정하는 데 쉽게 사용할 수 있습니다. 마지막으로, IIS6의 응용 프로그램 풀은 IIS5의 격리 모드처럼 COM+에 의존하지 않습니다. 이는 성능과 안정성을 향상시킬 수 있습니다(특히 COM 구성 요소를 호출해야 하는 일부 내부 응용 프로그램의 경우)
. HTTP 작업에 고도로 최적화되어 있으며 커널 모드 HTTP.SYS 드라이버와 직접 통신합니다. 수신된 요청은 해당 응용 프로그램 풀로 직접 라우팅됩니다. InetInfo는 기본적으로 하이퍼바이저이자 구성 서버입니다. 대부분의 상호 작용은 실제로 HTTP.SYS와 응용 프로그램 풀 사이에서 직접 발생하며, 이 모든 것이 IIS6을 IIS5보다 더 안정적이고 효율적인 환경으로 만듭니다. 이는 정적 콘텐츠와 ASP.NET 응용 프로그램의 경우 특히 그렇습니다.
IIS6 응용 프로그램 풀은 기본적으로 ASP.NET을 이해하고 있으며 ASP.NET은 기본 API에서 상호 작용할 수 있습니다. 이를 통해 ASP.NET 수준 캐싱을 웹 서버에 직접 전달할 수 있습니다.
IIS6에서 ISAPI 확장은 응용 프로그램 풀의 작업자 프로세스에서 실행됩니다. .NET 런타임도 동일한 프로세스에서 실행되므로 ISAPI 확장과 .NET 런타임 간의 통신은 프로세스 내에서 발생합니다. 이는 IIS5에서 사용하는 명명된 파이프에 비해 자연스러운 성능 이점을 제공합니다. IIS의 호스팅 모델은 매우 다르지만 관리 코드에 대한 인터페이스는 놀라울 정도로 유사합니다. 메시지 라우팅 프로세스만 약간 다릅니다.