O manipulador "ExtensionlessUrlHandler-Integrated-4.0" possui um módulo inválido "ManagedPipelineHandler" em sua lista de módulos

252

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.

Ivan Peric
fonte
qual versão do IIS você está usando?
chue x
IIS 7.5 (7.5.7600.16385)
Ivan Peric
Não é uma resposta direta à sua pergunta, mas para outros usuários com problemas semelhantes e suposições, você tem um aplicativo voltado para a Internet: basta usar um serviço externo, como uptimerobot.com, para tocar seu aplicativo a cada X vezes. Você mantém seu aplicativo em estado de execução + você tem os benefícios adicionais do serviço (tempo de atividade, alertas etc.).
qbantek
@qbantek Mesmo que o aplicativo em que estou trabalhando não seja voltado para a Internet, você me deu uma boa ideia. Eu poderia usar o balanceador de carga para fazer toque periódico, definindo o tipo de verificação de status de integridade como Simple HTTP GET. Obrigado
Ivan Peric

Respostas:

24

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):

Fornece uma implementação simples da classe abstrata HttpWorkerRequest que pode ser usada para hospedar aplicativos ASP.NET fora de um aplicativo IIS (Serviços de Informações da Internet) . Você pode empregar SimpleWorkerRequest diretamente ou estendê-lo.

Além disso, se você olhar a documentação do MSDN para o espaço para nome System.Web.Hosting ( SimpleWorkerRequestestá neste espaço para nome), também verá algo semelhante ao acima (novamente, a ênfase é minha):

O espaço para nome System.Web.Hosting fornece a funcionalidade para hospedar aplicativos ASP.NET de aplicativos gerenciados fora do Microsoft Internet Information Services (IIS) .

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.

sugestão x
fonte
2
Eu esperava encontrar uma solução que pudesse ser implementada em código, mas isso é o mais próximo possível de um "bom o suficiente", por isso estou concedendo a recompensa a ele. Mas acho que a solução que o @danijelk forneceu será mais útil para a maioria das pessoas que se deparar com essa questão por outros motivos que não o especificado. Portanto, esta é uma nota para eles darem uma olhada.
Ivan Peric
650

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):

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

http://forums.iis.net/p/1190643/2026401.aspx

danijelk
fonte
Obrigado pela sua resposta. Eu já tentei isso e não funcionou. :( -
Osama khodrog
8
Não funciona no Windows Server 2012. Leia a postagem de Zach nesta página.
Ivan Akcheurov
Obrigado. Trabalhou para mim fazendo isso em uma máquina virtual no Azure. O que eu gostaria de saber é porque eu teria que fazer isso em uma nova instalação. Certamente o ASPNET se registra quando é instalado, certo? Meu palpite é que tem algo a ver com a ordem da instalação.
David Ponte
4
Se você estiver usando o .NET 4.5.x ou 4.6.x, não se deixe enganar pela resposta que menciona 4.0 e pensando que isso não se aplica a você. Esse problema pode estar relacionado à ordem de instalação do .NET antes do IIS, como era para mim. A execução do comando (no meu caso, a versão de 64 bits) o corrigiu, mesmo que meu aplicativo esteja usando o .NET 4.5.2.
Coxy
Windows 2008, nova instalação O AWS microserver exigiu que eu executasse esse comando .. Apenas para aqueles que consideram que isso não é relevante para o sistema.
terary 17/04/19
170

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 ...

Zach
fonte
3
A configuração do Windows Server é uma PITA. Por que não existe um sistema central de gerenciamento de pacotes?
Kugel
se você instalou o IIS com a plataforma web, para verificar o comentário de Virgo139, ele resolveu o meu problema facilmente
castors33
Esta foi a correção para mim no Windows 10 Pro build 1607, felicidades!
precisa
Isso o corrigiu para mim no Windows 10 também. Vale notar que a correção de linha de comando comum (aspnet_regiis.exe -i) não é permitido no Windows 10.
Nat Webb
Solução confirmada para o Windows 10 Pro.
Zoomzoom 18/10/19
59

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

Jonathan
fonte
2
Obrigado por ortografia-lo, eu estava olhando para Web Server -> Web Server -> tubo de servidor Web por muito tempo ... :)
Gleno
2
Não se esqueça de verificar Roles e recursos> Funções do Servidor> Web Server (IIS)> Servidor Web> Application Development> ASP.NET 4.6 (ou 4.5, dependendo da configuração)
Lionet Chen
1
Sim, reinicie o serviço IIS. Trabalhou para mim! Obrigado. +1
Rusty Nail
47

Para Windows 10 / Windows Server 2016, use o seguinte comando:

dism /online /enable-feature /featurename:IIS-ASPNET45 /all

As respostas sugeridas com aspnet_regiisnão funcionam no Windows 10 (atualização de criadores de conteúdo e versões posteriores) ou no Windows Server 2016:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -i
Microsoft (R) ASP.NET RegIIS versão 4.0.30319.0
Utilitário de administração para instalar e desinstalar o ASP.NET na máquina local.
Copyright (C) Microsoft Corporation. Todos os direitos reservados.
Comece a instalar o ASP.NET (4.0.30319.0).
Esta opção não é suportada nesta versão do sistema operacional. Os administradores devem instalar / desinstalar o ASP.NET 4.5 com IIS8 usando a caixa de diálogo "Ativar / desativar os recursos do Windows", a ferramenta de gerenciamento do Gerenciador do Servidor ou a ferramenta de linha de comando dism.exe. Para mais detalhes, consulte http://go.microsoft.com/fwlink/?LinkID=216771 .
Concluído a instalação do ASP.NET (4.0.30319.0).

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.

Bart Verkoeijen
fonte
Isso foi corrigido para mim, eu estava executando o Windows 10 pro com a atualização do criador. Obrigado!
Samuel Poirier
Resposta lendária! Eu tive que reconstruir meu servidor Web e não atualizava os scripts há alguns anos; adicionei esse comando DISM aos meus scripts de provisionamento de VM, funciona como um encanto.
Chris Schaller
dism / online / enable-feature / featurename: IIS-ASPNET45 / all Funcionou para mim no Windows Server 2016
Syed Nasir Abbas
Graças a você, ainda tenho um emprego! :) Trabalhou.
Scott
42

Execute um destes comandos:

Para o sistema operacional Windows de 32 bits:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

Para o sistema operacional Windows de 64 bits:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -I
user3896335
fonte
Notei ao fazer isso, a pasta, "aspnet_client" é adicionado ao site sob o diretório Sites de conexões IIS
eaglei22
26

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:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
Neshta
fonte
FWIW, Server 2012 R2 diz que esta opção não é suportada, e sugere a utilização do diálogo facilidade para ativar ASP.NET 4.5
BVJ
Sim, a resposta de Zach cobre isso.
Neshta 26/03
13

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

Xaris Fytrakis
fonte
1
O meu era o IIS no Windows 2012 R2. Adicionado o ASP.NET compatível no Gerenciador do Servidor> Gerenciar> Adicionar Funções e Recursos> Instalação baseada em função ou baseada em função> (selecione seu servidor)> Servidor Web (IIS)> Servidor Web> Desenvolvimento de Aplicativos> ASP.NET 4.5. Como o @ArsmanAhmad disse, uma boa verificação de integridade é verificar se a versão do seu pool de aplicativos .NET CLR está definida como v4.0.
GBU
6

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.

  1. Encontre aspnet_regiis em uma pasta semelhante a este caminho. c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \

  2. 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.

  3. 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.

  4. 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.

shubniggurath
fonte
Funcionou perfeitamente para mim. Obrigado.
23717 Mike
5

Verifique se você definiu sua application-siteversão de v2.0para v4.0no Gerenciador do IIS :

Pools de aplicativos> Seu Aplicativo> Configurações Avançadas> Versão do .NET Framework

Depois disso, instale o seu ASP.NET.

Para SO de 32 bits (Windows):

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

Para SO de 64 bits (Windows):

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

Reinicie o seu application-siteno Gerenciador do IIS e aproveite.

Arsman Ahmad
fonte
Sim, eu tentei o meu melhor para tornar a resposta mais simples. ;-) @yuyangJian
Arsman Ahmad
4

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.

jwdaigle
fonte
4

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

theodor.johannesen
fonte
Devo acrescentar que esta foi uma edição do Windows 10 Pro
theodor.johannesen
2

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.

<applicationInitialization doAppInitAfterRestart="true" skipManagedModules="false">
        <add initializationPage="/docs" />    
</applicationInitialization>

Agradecemos a https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI

shemanov
fonte
2

Resolvi esse problema, adicionando "Ativar ou desativar os recursos do Windows". A opção ASP.NET 4.7

insira a descrição da imagem aqui

Edgar Chivichon
fonte
1

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

Thomas Bratt
fonte
1

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.

pirsqua
fonte
Só tive o mesmo problema. Instalei algumas atualizações do Windows que alternavam entre minhas configurações do IIS. Desativar a publicação WebDAV corrigiu novamente.
precisa saber é o seguinte
0

Você pode corrigi-lo alterando o tipo "ExtensionlessUrlHandler-Integrated-4.0" no iis para System.Web.DefaultHttpHandler

user3661608
fonte
0

Para mim, a remoção do WebDAV do meu servidor fez com que o aplicativo retornasse uma 503 Service Unavailablemensagem de erro ao usar PUTouDELETE , 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 PUTor DELETE.

Desative o WebDAV para pool de aplicativos individual:

  1. Clique no pool de aplicativos afetado
  2. Localizar WebDAV Authoring Toolsna lista
  3. Clique para abrir
  4. Clique Disable WebDAVno canto superior direito.

Ta daaaa!

Ainda deixei os itens de remoção no meu web.configarquivo.

 <system.webServer>
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV" />
    </handlers>
 <system.webServer>

Foi neste link que encontrei as instruções, mas não está muito claro.

Lucas
fonte
0

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!

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
<applicationInitialization skipManagedModules="false" doAppInitAfterRestart="true">
  <add initializationPage="/" />
</applicationInitialization>
...

Embora o site seja php, o roteamento para a paginação é gerenciado pelos módulos !!!

Schwarzie2478
fonte
0

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 Installere instalar os seguintes pacotes:

insira a descrição da imagem aqui

Frank
fonte
0

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.

Dipendu Paul
fonte
0

A instalação do .NET 4.7 funcionou para mim. Eu só tinha 3.5 instalado anteriormente.insira a descrição da imagem aqui

Eric S.
fonte