HTTP 500 Erro interno do servidor no IIS 7.5 com MVC3

2

Estou tentando instalar um aplicativo MVC3 em nosso servidor de produção sem sorte. O aplicativo é de um terceiro (compilado) e, portanto, a depuração não está disponível para mim. Além disso, suspeito strongmente que o erro ocorra antes que qualquer código no site tenha a chance de ser executado.

O nosso servidor de teste é - tanto quanto eu posso determinar - configurado exatamente como o servidor de produção. Ambos executam o Windows Server 2008 Standard R2, ambos também executam um site do Sharepoint 2010 (embora essa instalação não toque nisso de forma alguma). O IIS é a versão 7.5 e o .NET Framework 4.0 (exigido pelo aplicativo MVC) é (recentemente) instalado (por mim, com uma reinicialização após). O aplicativo é muito pequeno e simples e, até onde eu sei, ele pode ser aplicado à funcionalidade padrão - incluindo a autenticação de formulários (ou seja, ele não usa nenhum truque sujo).

A mensagem de erro mostrada no navegador é muito geral:

HTTP Error 500.0 - Internal Server Error
An error message detailing the cause of this specific request failure
can be found in the application event log of the web server. Please review
this log entry to discover what caused this error to occur. 

O bit sobre 'Uma mensagem de erro detalhando a causa' estar no log de eventos do aplicativo parece ser apenas especulação - uma esperança piedosa de que qualquer código que realmente tenha causado o erro irá registrá-lo. Nada de útil é encontrado no log de eventos (apenas a mesma mensagem registrada pelo IIS).

Module: AspNetInitClrHostFailureModule 
Notification: BeginRequest 
Handler: StaticFile 
Error Code: 0x80070002 
Requested URL: http://xxxxxx.xxxxxx.xx:80/ 
Physical Path: C:\Xxxxxxx\Prod\WebClient 
Logon Method: Not yet determined 
Logon User: Not yet determined 

Usando o Rastreamento de solicitação com falha, consegui rastrear o erro (como também indicado acima) no AspNetInitClrHostFailureModule:

103. -NOTIFY_MODULE_START 
ModuleName AspNetInitClrHostFailureModule 
Notification 1 
fIsPostNotification false 
Notification BEGIN_REQUEST 

104. -SET_RESPONSE_ERROR_DESCRIPTION 
ErrorDescription An error message detailing the cause of this specific
request failure can be found in the application event log of the web server.
Please review this log entry to discover what caused this error to occur. 

105. -MODULE_SET_RESPONSE_ERROR_STATUS 
ModuleName AspNetInitClrHostFailureModule 
Notification 1 
HttpStatus 500 
HttpReason Internal Server Error 
HttpSubStatus 0 
ErrorCode 2147942402 
ConfigExceptionInfo  
Notification BEGIN_REQUEST 
ErrorCode The system cannot find the file specified. (0x80070002) 

Então você tem isso. Aparentemente, o AspNetInitClrHostFailureModule não consegue encontrar algum arquivo. Então algumas perguntas são:

  1. O que é o AspNetInitClrHostFailureModule ? Ele não está listado na lista bastante exaustiva de módulos configuráveis no gerenciador do IIS para o site. Eu não tive sucesso no google também. Talvez seja secreto ..

  2. Eu acesso a URL raiz do site. Isso deve ser redirecionado para / Account / LogOn pelo FormsAuthenticationModule. Por que então o manipulador StaticFile ? Isso é uma pista?

  3. Eu tentei remover o atributo infame system.webserver / modules / runAllManagedModulesForAllRequests , e isso faz com que o erro desapareça (mas o MVC não está funcionando, é claro). Estou preparado para especificar manualmente todos os módulos necessários, se for necessário, mas se o AspNetInitClrHostFailureModule for realmente necessário, ficarei assim tão preso. Alguém sabe, ou alguém pode me direcionar para alguém que saiba exatamente quais módulos um aplicativo MVC3 típico realmente precisa?

Esta questão pode muito bem ser uma cópia de este , mas ele não obteve nenhuma resposta útil, e também fez perguntas menos específicas. Então eu vou ter o meu próprio caminho.

Esperando por alguma ajuda aqui:)

Edit: Agora tentei configurar um projeto MVC 3 trivial no servidor. Eu criei um novo projeto usando o modelo MVC Application, o compilei e implantei no servidor. Ele se comporta exatamente da mesma maneira. O servidor simplesmente não pode executar projetos do MVC 3.

    
por Tor Haugen 14.09.2012 / 15:51

2 respostas

1

Eu iria desinstalar e reinstalar o ASP.NET. Eu tive problemas ocorrem depois de instalar o .NET Framework que eu faço isso quase rotineiramente agora.

Para desinstalar:

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -ua

Para reinstalar:

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -i

Se você precisar executar aplicativos de 32 bits, também será necessário executar o aspnet_regiis na pasta C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319. Observe que executar a reinstalação afetaria outros aplicativos da Web do ASP.NET se houvesse alguma execução.

Como o problema ocorre tão cedo, pode ser útil habilitar o log do .NET Framework Fusion. Isso é projetado para fornecer informações detalhadas sobre o que está ocorrendo durante o carregamento de assemblies.

Se todos os assemblies estiverem carregando ok, eu usaria o Process Monitor para obter um rastreamento. Isso pode apontar você na direção certa para o que estava fazendo no momento do fracasso.

link

Se for um problema de um assembly ausente, você pode determinar quais assemblies seu aplicativo precisa, inspecionando o manifesto. Isso pode ser feito com ildasm.exe (IL Disassembler) ou ILSpy.

Eu vi muitos aplicativos MVC travarem na inicialização com uma mensagem de erro insignificante quando introduzidos em um novo servidor porque um assembly (dll) existia em desenvolvimento ou teste, mas não no novo servidor. Se for esse o caso, pode ser um dos seguintes assemblies que precisam ser copiados para a pasta bin do site:

Microsoft.Web.Infrastructure.dll
System.Net.Http.dll
System.Net.Http.Formatting.dll
System.Net.Http.WebRequest.dll
System.Web.Extensions.dll
System.Web.Helpers.dll
System.Web.Http.dll
System.Web.Http.SelfHost.dll
System.Web.Http.WebHost.dll
System.Web.Mvc.dll
System.Web.Optimization.dll
System.Web.Providers.dll
System.Web.Razor.dll
System.Web.WebPages.Deployment.dll
System.Web.WebPages.dll
System.Web.WebPages.Razor.dll

Quando você instala o msi da ASP.NET MVC, normalmente ele copia muitos desses arquivos para uma pasta em C: \ Arquivos de Programas x86 ou em C: \ Windows \ winsxs em algum lugar (cache global de assemblies).

Observe que esse problema também pode ocorrer se o fornecedor estiver assinando seus assemblies, mas eles estão assinados com atraso. Isso também seria revelado no log do Fusion. Uma descrição desse sintoma está aqui:

link

Atrasar a assinatura de uma assembléia pelo link

    
por 23.09.2012 / 21:48
1

palpite:

já que parece um carregamento de módulo com falha, você verificou se os parâmetros do pool de aplicativos vinculados ao seu site estão definidos para a versão correta do .Net? O DefaultAppPool é .net v2.0. O MVC provavelmente deve estar no App Pool "Integrado" "v4.0" (nome padrão ASP.NET v4.0).

    
por 21.09.2012 / 14:11