Para ser sincero, tentei desviar o truque do IIS e, quando pensei que iria me safar, percebi que minha solução alternativa não funciona. Aqui está o que eu tentei fazer:
1) Eu tenho o aplicativo ASP.NET que possui a classe Preloader que herda IProcessHostPreloadClient e faz toda a inicialização pesada no Preload implementação do método (o aplicativo é complexo e faz parte de um sistema enorme, portanto, são necessários aproximadamente 2 minutos para estabelecer conexões com todos os itens necessários. serviços e pré-instanciar alguns registros do Unity).
2) Tenho muito trabalho a ser feito no encerramento de aplicativos (cancelamento de inscrição, desconexão, descarte, ...) e acho que o melhor lugar para fazer isso é no método * Application_End * localizado no Global.asax .
3) Tudo funciona bem quando tenho atividade do usuário (a primeira solicitação depois que o Pool de Aplicativos que contém o aplicativo Web mencionado acima for iniciado fará com que * Application_Start * seja chamado e depois * Application_End * seja chamado na parada ou reciclagem do Application Pool), mas há problemas ocorre quando não há atividade do usuário e o aplicativo tenta reiniciar a si próprio após ficar ativo por 48 horas (requisito configurado). Como não houve solicitações, o aplicativo oficialmente não foi iniciado. Portanto, ele não pode ser interrompido normalmente, pois * Application_End * não será chamado.
4) Agora vem a parte bagunçada ... Tentei fazer uma solicitação GET a partir do código no final do método Preload , e funcionou. Mas essa solução me pareceu ruim, mesmo que funcionasse. Então, eu tentei muitas coisas, e a última coisa que tentei foi esta:
SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);
... e isso fez seu objetivo. * Application_Start * foi chamado (verifiquei a resposta, estava contendo a página de login que deveria ser exibida na solicitação inicial) e, no aplicativo Application Shutdown, o aplicativo encerrou normalmente executando o trabalho necessário em * Application_End *.
MAS
Depois que o aplicativo foi iniciado (pré-carregado e iniciado) dessa maneira, foi o que aconteceu quando eu queria acessar o aplicativo via navegador da Web:
Erro HTTP 500.21 - O manipulador de erros do servidor interno "ExtensionlessUrlHandler-Integrated-4.0" possui um módulo inválido "ManagedPipelineHandler" em sua lista de módulos
Eu sou incapaz de descobrir isso. Alguém pode me dizer por que isso acontece e como corrigi-lo?
Se eu não descobrir isso, voltarei à primeira solução (enviando solicitação GET a partir do código), mas esse problema irá me incomodar, pois nem tenho uma idéia do que está errado.
fonte
Respostas:
O problema
Você está usando SimpleWorkerRequest em um cenário para o qual não foi projetado. Você está usando-o dentro do IIS . Se você olhar o link anterior do MSDN (a ênfase é minha):
Além disso, se você olhar a documentação do MSDN para o espaço para nome System.Web.Hosting (
SimpleWorkerRequest
está neste espaço para nome), também verá algo semelhante ao acima (novamente, a ênfase é minha):A solução
Eu recomendaria remover a chamada para
SimpleWorkerRequest
. Em vez disso, você pode usar uma solução da Microsoft para garantir que seu site seja iniciado automaticamente após a reciclagem. O que você precisa é do Microsoft Application Initialization Module for IIS 7.5 . Não é complicado de configurar, mas você precisa entender as opções exatas. É por isso que eu também recomendaria a UI de inicialização do aplicativo para IIS 7.5 . A interface do usuário é escrita por um blogueiro do MSDN.Então, o que exatamente a solução Microsoft faz? Ele faz o que você está tentando fazer - o IIS envia uma solicitação "get" para o seu site após o início do pool de aplicativos.
fonte
Tente registrar novamente o ASP.NET
aspnet_regiis -i
. Funcionou para mim.Um caminho provável para o .NET 4 (no prompt de comando elevado):
http://forums.iis.net/p/1190643/2026401.aspx
fonte
Se você estiver enfrentando esse erro no Windows 8 / Windows Server 2012 e .Net 4.5, siga estas instruções aqui: http://www.britishdeveloper.co.uk/2013/01/handler-extensionlessurlhandler.html
Vá para "ativar ou desativar os recursos do Windows", Serviços de Informações da Internet, Serviços da World Wide Web, Recursos de Desenvolvimento de Aplicativos e, em seguida, habilite o ASP.NET 4.5
Isso funcionou para mim (embora o assistente e as palavras sejam um pouco diferentes no Windows Server 2012, mas você descobrirá). Com isso dito, por que isso é necessário depois de instalar tudo através do Web Platform Installer, incluindo todas as dependências, está completamente além de mim ...
fonte
Apesar de seguir a maioria dos conselhos desta página, eu ainda estava tendo problemas no Windows Server 2012. A instalação do .NET Extensibility 4.5 resolveu isso para mim:
Add Roles and Features > Server Roles > Web Server (IIS) > Web Server > Application Development > .NET Extensibility 4.5
fonte
Para Windows 10 / Windows Server 2016, use o seguinte comando:
dism /online /enable-feature /featurename:IIS-ASPNET45 /all
As respostas sugeridas com
aspnet_regiis
não funcionam no Windows 10 (atualização de criadores de conteúdo e versões posteriores) ou no Windows Server 2016:Curiosamente, a caixa de diálogo "Ativar / desativar os recursos do Windows" não me permitiu desmarcar o .NET nem o ASP.NET 4.6, e apenas o comando DISM acima funcionou. Não tenho certeza se o featurename é correto, mas ele trabalhou para mim.
fonte
Execute um destes comandos:
Para o sistema operacional Windows de 32 bits:
Para o sistema operacional Windows de 64 bits:
fonte
Este https://stackoverflow.com/a/13266763/1277458 funciona perfeitamente. Mas se você tiver um sistema operacional de 64 bits, use o Framework64 em vez do Framework no caminho:
fonte
No meu caso (Windows 10 + IIS 10), tive que abrir " Ativar ou desativar recursos do Windows " e, em seguida, acessar Serviços de informações da Internet> Serviços na World Wide Web> Recursos de desenvolvimento de aplicativos> e verificar o ASP.NET 4.6
fonte
Tornar este seu próprio post, porque isso me levou a trabalhar por horas.
Vi talvez uma dúzia de posts semelhantes aqui e em outros lugares sobre esse problema e a correção aspnet_regiis. Eles não estavam trabalhando para mim, e aspnet_regiis estava agindo de forma estranha, apenas listando opções etc.
Como o usuário ryan-anderson acima indicado, você não pode inserir .exe
Para os menos confortáveis com coisas fora do IIS no servidor, eis o que você faz em etapas simples.
Encontre aspnet_regiis em uma pasta semelhante a este caminho. c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \
Clique com o botão direito do mouse no prompt de comando no menu Iniciar ou em qualquer outro local e diga para executar como administrador. Usar o recurso "Executar" do Windows simplesmente não funcionará ou não funcionou para mim.
Volte para o executável aspnet_regiis. Clique e arraste-o diretamente para o prompt de comando ou copie e cole o endereço no prompt de comando.
Remova, se houver, o .exe no final. Isso é fundamental. Adicione -i (espaço menos olho) no final. Entrar.
Se você fez isso corretamente, verá que ele começa a instalar o asp.net e informa que foi bem-sucedido.
fonte
Verifique se você definiu sua
application-site
versão dev2.0
parav4.0
no Gerenciador do IIS :Depois disso, instale o seu
ASP.NET
.Para SO de 32 bits (Windows):
Para SO de 64 bits (Windows):
Reinicie o seu
application-site
no Gerenciador do IIS e aproveite.fonte
Eu sei que isso é antigo, mas achei que poderia acrescentar algum valor. Para aqueles que executam o Server Core fora de um domínio (os membros do domínio podem executar o Gerenciador do Servidor remotamente para adicionar / remover recursos / funções), é necessário recorrer às linhas de comando.
Os usuários do Powershell podem digitar "Install-WindowsFeature Web-Asp-Net45"
Isso deve ser equivalente ao uso do gerenciador de servidor.
fonte
Fui desafiado pela mesma mensagem de erro, com o .net 4.7 instalado.
A solução foi seguir uma postagem mencionada anteriormente para incluir o "Ativar ou desativar o recurso Windows", onde "Serviços avançados do .NET Framework 4.7" -> "ASP.NET 4.7" já estava marcado.
Mais abaixo na lista, há os "Serviços de Informações da Internet" e a sub-nota "Recursos de Desenvolvimento de Aplicativos" -> "ASP.NET 4.7", que também precisam ser verificados.
Ao ativar isso, vários outros recursos estão ativados ... Simplesmente pressionei o botão OK e o problema foi resolvido. Screendump da caixa de diálogo de recursos do Windows
fonte
Estou trabalhando no Windows Server 2012. O recurso .NET Extensibility 4.5 está ativado. WebDAVModule removido. Eu ainda estava recebendo o erro 500.21 na rota do ASP.NET '/ docs'.
Alterar 'skipManagedModules' para false corrigiu o problema.
Agradecemos a https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI
fonte
Resolvi esse problema, adicionando "Ativar ou desativar os recursos do Windows". A opção ASP.NET 4.7
fonte
Tive esse problema e descobri que a remoção da seguinte pasta ajudou, mesmo com a edição não Express.
C:\Users\<user>\Documents\IISExpress
fonte
Este erro começou a acontecer comigo do nada na semana passada, afetando os sites existentes na minha máquina. Não tive sorte com tentar alguma das sugestões aqui. Eventualmente, removi completamente o WebDAV do IIS (Recursos do Windows -> Serviços de Informações da Internet -> Serviços da World Wide Web -> Recursos HTTP comuns -> Publicação do WebDAV). Fiz uma redefinição do IIS após isso por uma boa medida e meu erro foi finalmente resolvido.
Só posso supor que uma atualização do Windows tenha iniciado o problema, mas não tenho certeza.
fonte
Você pode corrigi-lo alterando o tipo "ExtensionlessUrlHandler-Integrated-4.0" no iis para System.Web.DefaultHttpHandler
fonte
Para mim, a remoção do WebDAV do meu servidor fez com que o aplicativo retornasse uma
503 Service Unavailable
mensagem de erro ao usarPUT
ouDELETE
, então eu o reinstalei novamente. Eu também tentei remover completamente o .NET Framework 4.5 e reinstalá-lo e também tentei me registrar novamente, conforme sugerido, mas sem sucesso.Consegui consertar isso desabilitando o WebDAV para o pool de aplicativos individual ; isso interrompeu o erro do 'módulo ruim' ao usar
PUT
orDELETE
.Desative o WebDAV para pool de aplicativos individual:
WebDAV Authoring Tools
na listaDisable WebDAV
no canto superior direito.Ta daaaa!
Ainda deixei os itens de remoção no meu
web.config
arquivo.Foi neste link que encontrei as instruções, mas não está muito claro.
fonte
Talvez essa não seja uma solução útil para o OP, mas diz respeito à mesma mensagem de "erro".
Estamos hospedando páginas PHP no IIS8.5 com o .NET 4.5 instalado corretamente.
Utilizamos a funcionalidade de pré-carregamento para garantir que nosso aplicativo seja sempre responsivo em todos os aspectos.
Depois de um tempo, começamos a receber esse erro aleatoriamente.
No web.config: coloquei skipManagedModules como true, -> não faça isso!
Embora o site seja php, o roteamento para a paginação é gerenciado pelos módulos !!!
fonte
Eu também tive esse problema. Meu aplicativo MVC4 está sendo executado em um Windows Server 2012 R2 com IIS 8.5. Nenhuma dessas soluções postadas funcionou para mim ... a instalação das estruturas ausentes por meio dos Recursos do IIS poderia ter resolvido, mas a instalação sempre falhava.
Eu tive que usar
Web Platform Installer
e instalar os seguintes pacotes:fonte
Eu estava enfrentando esse problema em um aplicativo Web hospedado em um servidor de hospedagem compartilhado. Então, obviamente, não tinha acesso direto ao IIS; portanto, não foi possível aplicar muitas soluções propostas aqui.
No painel de controle do provedor de hospedagem, ativei o log de erros para IIS e ASP.Net. E então soube que o erro realmente estava em um cshtml ausente.
fonte
A instalação do .NET 4.7 funcionou para mim. Eu só tinha 3.5 instalado anteriormente.
fonte