ASP Clássico em sistema 64bits com IIS7

Após ter de passar o produto da empresa para um novo servidor com Windows Server 2008r2 64bits, acabei experienciando alguns problemas meio aleatórios. Depois fui descobrir que o problema estaria relacionado à mistura de arquiteturas 32 e 64bits dentro das configurações que eu utilizava no IIS.

O conflito foi gerado quando, ao criar uma Pool de Aplicações para o meu software, tive de marcar a opção “Permitir Aplicações 32bits” por causa de um componente (DLL) externo que foi compilado em tal arquitetura, caso contrário o componente não funcionaria. Uma vez que por padrão o IIS utiliza a versão do ASP de acordo com o sistema (64bits), acabou acontecendo um tipo de mix de arquiteturas, além do IIS, por padrão, integrar o suporte à plataforma .Net.

Erro:

Uma das situações que encontrei, resultava na seguinte mensagem de erro:

HTTP Error 404.17 – Not Found
The requested content appears to be script and will not be served by the static file handler.

The request matched a wildcard mime map. The request is mapped to the static file handler. If there were different pre-conditions, the request will map to a different handler.

Error Code 0x80070032

Solução

A solução no meu caso foi gerar um pool de aplicações específico para minha aplicação em ASP Clássico, configurando a versão 32bits do ASP e desativando o suporte à plataforma .Net.

Em outra situação, onde você não precise utilizar componentes 32bits, talvez simplesmente manter desativado o suporte a aplicações 32bits seja suficiente para trazer estabilidade à aplicação.

Ativando/desativando o suporte a apps 32bits e à plataforma .Net:

Application Pool

Application Pool

Acesse as configurações avançadas do seu Pool de Aplicações (Application Pool) e verifique as seguintes opções:

  • .Net Framework Version: Mantenha “No Managed Code”, no caso de um Pool específico para aplicações em ASP Clássico.
  • Enable 32-Bit Applications: Caso ative (true) o suporte a 32bits, o melhor será alterar a versão do ASP, como citado a seguir. Caso utilize componentes externos compilados em 32bits, você é obrigado a ativar este suporte.
  • Managed Pipeline Mode: Mantenha “Classic” para um Pool específico de ASP Clássico.

Alterando a versão do ASP:

Handler Mapping

Handler Mapping

Acesse o seu site/applicação no IIS e então procure e abra a opção “Handler Mappings”. Em seguida abra a edição do mapeamento de scripts ASP (*.asp), normalmente titulado como “ASPClassic”. Agora basta configurar no campo “Executable”, o caminho da aplicação (DLL) de acordo com a arquitetura desejada:

  • ASP 32bits:
    %windir%\SysWOW64\inetsrv\asp.dll
  • ASP 64bits:
    %windir%\system32\inetsrv\asp.dll

Obs.:
* A variável %windir% corresponde ao diretório de instalação do Windows, normalmente a “C:\Windows”.
* Dentro da pasta “SysWOW64” você encontra outras implementações 32bits compatíveis com o sistema 64bits, o que pode ser de utilidade em outras ocasiões.

Referências

Esta página trata de outro assunto (Access no ambiente 64bits acessado por Classic ASP) mas foi de onde saiu a solução do meu problema:
http://digitallibraryworld.com/?p=6

Esta entrada foi publicada em Bugs, Servidores, Web e marcada com a tag , , , . Adicione o link permanente aos seus favoritos.