quarta-feira, outubro 26, 2011

Problemas no deploy de uma aplicação .NET MVC

Este foi o meu primeiro deploy de uma aplicação MVC para um servidor de testes, e devo dizer que bati em mais paredes do que estava à espera. Primeiro passo foi instalar a .NET Framework 4.0, até aqui nada de especial. De seguida instalei o SQL Express 2008 R2, que seria o motor de base de dados que iria utilizar.

Vamos então ao deploy em si, crio um pacote de deploy com o Visual Studio, crio uma directoria virtual no servidor e copio para lá o conteúdo do pacote. Primeiro erro, levo logo com um erro 500.19, que significa que o ficheiro web.config está mal configurado e que não consegue ser interpretado.


Bem fui averiguar e lá descobri o problema, no meu web.config estava a utilizar a tag que me possibilita rescrever URLs, como o IIS não sabia interpretar essa tag estava a devolver o erro 500.19. Solução é instalar no IIS o módulo URL Rewrite.

Voltando a testar novo erro, agora o problema não estava no web.config mas sim nas referências para as assembly. Ao instalar a .NET Framework 4.0, julguei que todas as dlls necessárias estariam na GAC, aparentemente não o que provocou o erro: Could not load file or assembly 'System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified. 

 Uma solução possível passa por dizer ao Visual Studio que aquela referência é para criar uma cópia local, assim quando é feito o pacote a referência é copiada para dentro da pasta bin.

Além do System.Web.Mvc também devem ser incluídas as referências que se encontram na imagem, ou outras que sejam System.Web.*.

Agora é que é pensei eu, bem ainda não estava com sorte e toma lá mais um erro: Could not load file or assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. O quê mais assembly que não consegue ser referênciada! Na minha máquina de desenvolvimento esta dll tava na GAC mais uma vez ao contrário do servidor de produção. A solução passa por acrescentar a dll às referências do projecto no Visual Studio e mais uma vez dizer para criar uma cópia local. Alem desta dll ainda são precisas as dlls: System.Web.WebPages.Razor, System.Web.Razor e System.Web.WebPages.Deployment.

É pá o site já responde, vamos lá fazer login e começar a testar...pimba mais um erro, não é possível autenticar no SQL com o utilizador escolhido. No fundo este problema já não tem a ver com a aplicação ser MVC, poderia ser qualquer tipo de outra aplicação que utilizasse o SQL. Vou tentar autenticar-me directamente no SQL Management Studio e o mesmo erro acontece. Vou ver se estou a permitir ligações TCP/IP no SQL Configuration Management e sim estava! Depois de alguma pesquisa, de bater umas quantas vezes na mesa e chamar uns quantos nomes ao servidor lá descobri o problema, no próprio SQL Management Studio também é necessário configurar a autenticação como sendo mixed mode não bastando dizer que são permitidas ligações TCP/IP.


Ufffff, finalmente tudo a funcionar...

Sem comentários: