31 de maio de 2010

Fazendo aplicações ASP tradicionais funcionarem em servidores 64 Bits

Já tem algum tempo que os sistemas operacionais de 64 bits da Microsoft estão no mercado - Windows Vista, Seven, Windows Server - mas parece que agora é que as empresas estão de fato atualizando seus servidores e adotando em massa essa tecnologia. Pelo menos entre os Clientes da ABC71 essa afirmação vem se mostrando verdadeira.

Embora aplicações 32 bits funcionem normalmente nos sistemas de 64 bits (usando automaticamente a emulação do ambiente 32 bits), sempre aparece alguma situação problemática. É o caso da biblioteca que a ABC71 desenvolveu para que seus Clientes possam construir sites de e-Vendas integrados com o ERP Omega, alimentando diretamente suas tabelas com pedidos de venda on-line de uma maneira que respeita as regras de negócio vigentes no ERP. Essa biblioteca disponibiliza suas funções através de COM mas foi construída para uso com o ASP tradicional (não com o ASP.NET), sendo portanto uma tecnologia 32 bits.

Quando um Cliente nosso trocou seu servidor por um com sistema de 64 bits, o site dele simplesmente parou de funcionar. A razão é que as hospedagem do site utiliza o IIS 7 (Internet Information Services), versão de 64 bits e não é possível fazer um software de 64 bits carregar e executar um de 32 bits diretamente. Para fazer isso, teríamos que construir alguma ponte que permitisse tal acesso.

Algumas soluções foram sugeridas. A de usar uma máquina virtual com algum Windows de 32 bits exclusivamente para hospedar o site foi descartada pois a intenção da troca de servidores era incrementar a performance do site, objetivo que ficaria restringido.

Compilamos, então, a biblioteca de modo que ela passasse a usar .NET 64 bits. Após registrá-la corretamente como um COM usando a ferramenta RegAsm 64 bits (no meu computador, essa versão está na pasta C:\Windows\Microsoft.NET\Framework64\v2.0.50727) passamos a receber nas páginas ASP uma mensagem indicando que o tipo 'InternalField' não pode ser convertido para o tipo 'Short' toda vez que tentávamos passar um valor como parâmetro em chamadas a funções da biblioteca COM. Parece que há alguma coisa no ASP normal executando em IIS7 que o impede de trabalhar com um COM gerado em .NET 64 bits.

Quando pesquisei a respeito na internet, me deparei com um tutorial passo a passo mostrando como configurar o IIS 7 para rodar aplicações ASP que utilizam banco de dados. O tutorial é mais completo do que eu precisava - muitas das configurações eu já havia feito - mas me apresentou um parâmetro que eu desconhecia e que resolveu o problema de incompatibilidade. O parâmetro é o Habilitar aplicativos de 32 Bits, como mostra a imagem abaixo:
Configuração do IIS 7
O valor desse parâmetro é FALSE por padrão, significando que o site só executará aplicações de 64 bits. Para mudar-lhe o valor, acesse o Gerenciador do IIS 7, clique em Pool de Aplicativos e selecione o site que deseja configurar. Depois, escolha a ação Configurações Avançadas e habilite aplicativos 32 bits no site selecionando TRUE como valor da propriedade. Apenas o site em questão será afetado.

Com essa configuração ativa, o IIS passou a entender todo o site como sendo uma aplicação 32 bits de forma que mesmo a biblioteca original pode ser carregada sem problemas. Assim, foi possível continuar usando todo o site feito em ASP normal e também a biblioteca COM sem modificações - apenas reconfigurando o servidor.

Nenhum comentário :

Postar um comentário

OBS: Os comentários enviados a este Blog são submetidos a moderação. Por isso, eles serão publicados somente após aprovação.

Observação: somente um membro deste blog pode postar um comentário.