O IIS 5 e 6 funcionam de maneira diferente.
Quando chega uma solicitação, o IIS verifica o mapa de script (mapa de extensão) e encaminha a solicitação para aspnet_isapi.dll. A operação desta DLL e como as solicitações entram no tempo de execução do ASP.NET são diferentes no IIS5 e 6. A Figura 2 mostra uma visão geral aproximada desse processo.
No IIS5, o aspnet_isapi.dll é hospedado diretamente no processo inetinfo.exe. Se você definir o nível de isolamento do site ou diretório virtual como médio ou alto, ele será hospedado em um processo de trabalho separado (isolado) do IIS. Quando a primeira solicitação ASP.NET chegar, a DLL (aspnet_isapi.dll) iniciará outro novo processo aspnet_wp.exe e encaminhará a solicitação para este processo para processamento. Esse processo, por sua vez, carrega e hospeda o tempo de execução do .NET. Cada solicitação encaminhada para a DLL ISAPI é roteada para esse processo por meio de uma chamada de pipe nomeada.
Figura 2 – Uma visão de alto nível do fluxo de solicitações do IIS para o tempo de execução do ASP.NET e através do pipeline de processamento de solicitações. O IIS5 e o IIS6 interagem com o ASP.NET de maneiras diferentes, mas quando a solicitação chega ao pipeline do ASP.NET, todo o fluxo de processamento é o mesmo.
Ao contrário das versões anteriores do servidor, o IIS6 foi totalmente otimizado para ASP.NET.
IIS6 - Long Live Application Pool
O IIS6 faz alterações significativas no modelo de processamento. O IIS não hospeda mais diretamente código executável externo, como extensões ISAPI. O IIS sempre cria um thread de trabalho separado - um pool de aplicativos - e todo o processamento acontece nesse processo, incluindo a execução de dlls ISAPI. O pool de aplicativos é uma grande melhoria no IIS6 porque permite um controle muito refinado sobre qual código será executado em um determinado thread. Os pools de aplicativos podem ser configurados em cada caminho virtual ou em todo o site, permitindo isolar cada aplicativo da Web em seu próprio processo para que cada aplicativo seja conectado a outros aplicativos da Web em execução na mesma máquina. Se um processo travar, isso não afetará outros processos (pelo menos do ponto de vista do processamento da web).
Além disso, os pools de aplicativos são altamente configuráveis. Você pode configurar o ambiente de segurança no qual os pools são executados definindo seu nível de representação de execução, o que permite personalizar as permissões concedidas a um aplicativo Web (novamente, com uma granularidade muito fina). Uma grande melhoria para o ASP.NET é que o pool de aplicativos substitui a maioria das configurações na seção ProcessModel no arquivo machine.config. As configurações nesta seção são muito difíceis de gerenciar no IIS5 porque são globais e não podem ser substituídas no arquivo web.config do aplicativo. Ao executar o IIS6, as configurações relacionadas ao ProcessModel são geralmente ignoradas e, em vez disso, lidas no pool de aplicativos. Observe que a maioria deles é mencionada aqui - algumas configurações, como o tamanho do conjunto de encadeamentos e as configurações do encadeamento IO, ainda são lidas em machine.config, porque não possuem itens correspondentes nas configurações do conjunto de encadeamentos.
Como os pools de aplicativos são executáveis externos, esses executáveis podem ser facilmente monitorados e gerenciados. O IIS6 fornece uma série de verificações de status do sistema, reinicializações e opções de tempo limite, que podem ser facilmente usadas para verificar e até mesmo corrigir problemas de programa em muitos casos. Finalmente, o pool de aplicativos do IIS6 não depende do COM+ como o modo de isolamento do IIS5. Isso pode melhorar o desempenho e melhorar a estabilidade (especialmente para alguns aplicativos internos que precisam chamar componentes COM,
embora os pools de aplicativos do IIS6 sejam EXEs separados
).são altamente otimizados para operações HTTP. Eles se comunicam diretamente com o driver HTTP.SYS do modo kernel. As solicitações recebidas são roteadas diretamente para o pool de aplicativos apropriado. O InetInfo é basicamente apenas um hipervisor e um servidor de configuração - a maior parte da interação acontece diretamente entre o HTTP.SYS e o pool de aplicativos, o que torna o IIS6 um ambiente mais estável e eficiente que o IIS5. Isto é especialmente verdadeiro para conteúdo estático e aplicativos ASP.NET.
Um pool de aplicativos IIS6 tem uma compreensão inata do ASP.NET e pode interagir com ele na API subjacente. Isso permite acesso direto à API de cache HTTP. Isso permite que o cache no nível do ASP.NET seja entregue diretamente ao servidor Web.
No IIS6, as extensões ISAPI são executadas no processo de trabalho do pool de aplicativos. O tempo de execução do .NET também é executado no mesmo processo, portanto, a comunicação entre a extensão ISAPI e o tempo de execução do .NET ocorre dentro do processo. Isso tem uma vantagem natural de desempenho em comparação com o canal nomeado usado pelo IIS5. Embora o modelo de hospedagem do IIS seja muito diferente, a interface no código gerenciado é surpreendentemente semelhante - apenas o processo de roteamento de mensagens é um pouco diferente.