Le gestionnaire «ExtensionlessUrlHandler-Integrated-4.0» a un mauvais module «ManagedPipelineHandler» dans sa liste de modules

252

Pour être honnête, j'ai essayé de tourner un sale tour sur IIS et juste au moment où je pensais que j'allais m'en tirer, j'ai réalisé que ma solution de contournement ne fonctionnait pas. Voici ce que j'ai essayé de faire:

1) Je application ASP.NET qui a Preloader classe héritant IProcessHostPreloadClient et fait tout l'initialisation du lourd dans préchargement implémentation de la méthode (application est complexe et il est une partie d'un système énorme, donc il faut environ 2 minutes pour établir des connexions à tous nécessaires et pré-instancier certaines inscriptions Unity).

2) J'ai beaucoup de travail à faire sur l'arrêt de l'application (désinscription, déconnexion, suppression, ...), et je suppose que le meilleur endroit pour le faire est dans la méthode * Application_End * située dans Global.asax .

3) Tout fonctionne très bien lorsque j'ai une activité utilisateur (la première demande après le démarrage du pool d'applications qui contient l'application Web susmentionnée provoquera l'appel de * Application_Start * et ensuite * Application_End * à l'arrêt ou au recyclage du pool d'applications), mais des problèmes se produit lorsqu'il n'y a aucune activité utilisateur et que l'application essaie de se redémarrer après avoir été active pendant 48 heures (configuration requise). Puisqu'il n'y a eu aucune demande, la demande n'a officiellement pas été lancée. Ergo, il ne peut pas être gracieusement arrêté car * Application_End * ne sera pas appelé.

4) Vient maintenant la partie désordonnée ... J'ai essayé de faire une demande GET à partir du code à la fin de la méthode de préchargement , et cela a fonctionné. Mais cette solution me semblait mauvaise, même si elle fonctionnait. Donc, j'ai essayé beaucoup de choses, et la dernière chose que j'ai essayée était la suivante:

SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);

... et cela a fait son but. * Application_Start * a été appelé, (j'ai vérifié la réponse, il contenait une page de connexion qui était censée être affichée dans la demande initiale) et sur l'application Application shutdown shutdown s'est terminée gracieusement en effectuant le travail nécessaire dans * Application_End *.

MAIS

Après le démarrage de l'application (préchargée et lancée) de cette manière, voici ce qui s'est passé lorsque j'ai voulu accéder à l'application via un navigateur Web:

Erreur HTTP 500.21 - Le gestionnaire d'erreurs du serveur interne "ExtensionlessUrlHandler-Integrated-4.0" a un mauvais module "ManagedPipelineHandler" dans sa liste de modules

Je suis incapable de comprendre cela. Quelqu'un peut-il me dire pourquoi cela se produit et comment y remédier?

Si je ne comprends pas cela, je vais revenir à la première solution (envoyer une demande GET à partir du code), mais ce problème me dérangera car je n'ai même aucune idée de ce qui ne va pas.

Ivan Peric
la source
quelle version d'IIS utilisez-vous?
chue x
IIS 7.5 (7.5.7600.16385)
Ivan Peric
Pas une réponse directe à votre question, mais pour d'autres utilisateurs ayant un problème similaire et supposant que vous avez une application Internet: vous pouvez simplement utiliser un service externe comme uptimerobot.com pour toucher votre application à chaque X fois. Vous gardez votre application en état de fonctionnement + vous avez les avantages supplémentaires du service (disponibilité, alertes, etc.).
qbantek
@qbantek Même si l'application sur laquelle je travaille n'est pas accessible sur Internet, vous m'avez donné une bonne idée. Je pourrais utiliser l'équilibreur de charge pour effectuer des contacts périodiques en définissant le type de vérification de l'état de santé sur Simple HTTP GET. Merci
Ivan Peric

Réponses:

24

Le problème

Vous utilisez SimpleWorkerRequest dans un scénario pour lequel il n'a pas été conçu. Vous l'utilisez dans IIS . Si vous regardez le lien MSDN précédent (c'est moi qui souligne):

Fournit une implémentation simple de la classe abstraite HttpWorkerRequest qui peut être utilisée pour héberger des applications ASP.NET en dehors d'une application Internet Information Services (IIS) . Vous pouvez utiliser SimpleWorkerRequest directement ou l'étendre.

En outre, si vous consultez la documentation MSDN pour l' espace de noms System.Web.Hosting (se SimpleWorkerRequesttrouve dans cet espace de noms), vous verrez également quelque chose de similaire à ce qui précède (encore une fois, l'accent est sur moi):

L'espace de noms System.Web.Hosting fournit la fonctionnalité d'hébergement des applications ASP.NET à partir d'applications gérées en dehors de Microsoft Internet Information Services (IIS) .

La solution

Je recommanderais de supprimer l'appel à SimpleWorkerRequest. Au lieu de cela, vous pouvez utiliser une solution Microsoft pour vous assurer que votre site Web démarre automatiquement après son recyclage. Vous avez besoin du module d'initialisation d'application Microsoft pour IIS 7.5 . Ce n'est pas compliqué à configurer, mais vous devez comprendre les options exactes. C'est pourquoi je recommanderais également l' interface utilisateur d'initialisation d'application pour IIS 7.5 . L'interface utilisateur est écrite par un blogueur MSDN.

Alors, que fait exactement la solution Microsoft? Il fait ce que vous essayez de faire: IIS envoie une demande "get" à votre site Web après le démarrage du pool d'applications.

chue x
la source
2
Je sautais pour trouver une solution qui peut être implémentée dans le code, mais c'est aussi proche d'un «assez bon» que possible, donc je lui accorde la prime. Mais je suppose que la solution fournie par @danijelk sera la plus utile pour la plupart des gens qui rencontrent cette question pour une raison autre que celle que j'ai spécifiée. C'est donc une note pour qu'ils y jettent un œil.
Ivan Peric
650

Essayez de réenregistrer ASP.NET avec aspnet_regiis -i. Ça a marché pour moi.

Un chemin probable pour .NET 4 (à partir de l'invite de commande élevée):

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

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

danijelk
la source
Merci pour votre réponse. J'ai déjà essayé ça et ça n'a pas marché. :( -
Osama khodrog
8
Ne fonctionne pas pour Windows Server 2012. Lisez le post de Zach sur cette page.
Ivan Akcheurov
Merci. A travaillé pour moi en faisant cela sur une machine virtuelle dans Azure. Ce que j'aimerais savoir, c'est pourquoi devrais-je le faire sur une nouvelle installation. Certes, ASPNET s'enregistre lors de l'installation, n'est-ce pas? Je suppose que cela a quelque chose à voir avec l'ordre d'installation.
David Bridge
4
Si vous utilisez .NET 4.5.x ou 4.6.x, ne vous laissez pas berner par la réponse mentionnant 4.0 et pensant qu'elle ne s'applique pas à vous. Ce problème peut être lié à l'ordre d'installation de .NET avant IIS, comme c'était le cas pour moi. L'exécution de la commande (dans mon cas, la version 64 bits) l'a corrigé même si mon application utilise .NET 4.5.2.
Coxy
Windows 2008, une nouvelle installation du microserveur AWS m'a obligé à exécuter cette commande ... Juste pour ceux d'entre nous qui pensent que ce n'est pas pertinent pour leur système.
terary
170

Si vous rencontrez cette erreur avec Windows 8 / Windows Server 2012 et .Net 4.5, suivez ces instructions ici: http://www.britishdeveloper.co.uk/2013/01/handler-extensionlessurlhandler.html

Accédez à «activer ou désactiver les fonctionnalités Windows», puis les services Internet, puis les services World Wide Web, puis les fonctionnalités de développement d'applications, puis activez ASP.NET 4.5.

Cela a fonctionné pour moi (bien que l'assistant et la formulation soient un peu différents dans Windows Server 2012, mais vous le comprendrez). Cela étant dit, pourquoi cela est nécessaire après avoir tout installé via le programme d'installation de la plate-forme Web, y compris toutes les dépendances, me dépasse complètement ...

Zach
la source
3
La configuration de Windows Server est un PITA. Pourquoi n'y a-t-il pas de système central de gestion des packages?
Kugel
si vous avez installé iis avec une plateforme web, vérifiez le commentaire de Virgo139, cela a résolu mon problème facilement
castors33
Ce fut la solution pour moi sur Windows 10 Pro build 1607, cheers!
Apogee
Cela a également été corrigé pour moi sur Windows 10. Il convient de noter que le correctif de ligne de commande commun (aspnet_regiis.exe -i) n'est pas autorisé sur Windows 10.
Nat Webb
Solution confirmée pour Windows 10 Pro.
Zoomzoom
59

En dépit de suivre la plupart des conseils sur cette page, je rencontrais toujours des problèmes sur Windows Server 2012. L'installation de .NET Extensibility 4.5 l'a résolu pour moi:

Add Roles and Features > Server Roles > Web Server (IIS) > Web Server > Application Development > .NET Extensibility 4.5

Jonathan
la source
2
Merci de l'avoir expliqué, je regardais Web Server -> Web Server -> Web Server pipe depuis bien trop longtemps ... :)
Gleno
2
N'oubliez pas de vérifier Rôles et fonctionnalités> Rôles de serveur> Serveur Web (IIS)> Serveur Web> Développement d'applications> ASP.NET 4.6 (ou 4.5 selon votre configuration)
Lionet Chen
1
Oui, puis redémarrez le service IIS. A travaillé pour moi! Merci. +1
Nail rouillé
47

Pour Windows 10 / Windows Server 2016, utilisez la commande suivante:

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

Les réponses suggérées avec aspnet_regiisne fonctionnent pas sur Windows 10 (mise à jour des créateurs et versions ultérieures) ou Windows Server 2016:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -i
Microsoft (R) ASP.NET RegIIS version 4.0.30319.0
Utilitaire d'administration pour installer et désinstaller ASP.NET sur la machine locale.
Copyright (C) Microsoft Corporation. Tous les droits sont réservés.
Commencez à installer ASP.NET (4.0.30319.0).
Cette option n'est pas prise en charge sur cette version du système d'exploitation. Les administrateurs doivent plutôt installer / désinstaller ASP.NET 4.5 avec IIS8 à l'aide de la boîte de dialogue «Activer / désactiver les fonctionnalités Windows», l'outil de gestion du Gestionnaire de serveur ou l'outil de ligne de commande dism.exe. Pour plus de détails, veuillez consulter http://go.microsoft.com/fwlink/?LinkID=216771 .
Installation terminée d'ASP.NET (4.0.30319.0).

Fait intéressant, la boîte de dialogue "Activer / désactiver les fonctionnalités Windows" ne m'a pas permis de décocher .NET ni ASP.NET 4.6, et seule la commande DISM ci-dessus a fonctionné. Je ne sais pas si le featurename est correct, mais cela a fonctionné pour moi.

Bart Verkoeijen
la source
Cela m'a corrigé, j'utilisais Windows 10 pro avec la mise à jour du créateur. Merci!
Samuel Poirier
Réponse légendaire! J'ai dû reconstruire mon serveur Web, et je n'avais pas mis à jour les scripts depuis quelques années, j'ai ajouté cette commande DISM à mes scripts de provisioning VM, fonctionne comme un charme.
Chris Schaller
dism / online / enable-feature / featurename: IIS-ASPNET45 / all A travaillé pour moi sur Windows Server 2016
Syed Nasir Abbas
Grâce à vous, j'ai encore un boulot! :) Travaillé.
Scott
42

Exécutez l'une de ces commandes:

Pour le système d'exploitation Windows 32 bits:

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

Pour le système d'exploitation Windows 64 bits:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -I
user3896335
la source
J'ai remarqué qu'en faisant cela, le dossier "aspnet_client" était ajouté au site Web sous le répertoire Sites de IIS Connections
eaglei22
26

Ce https://stackoverflow.com/a/13266763/1277458 fonctionne parfaitement. Mais si vous avez un système d'exploitation 64 bits, utilisez Framework64 au lieu de Framework dans le chemin:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
Neshta
la source
FWIW, Server 2012 R2 indique que cette option n'est pas prise en charge et suggère d'utiliser la boîte de dialogue Fonctionnalité pour activer ASP.NET 4.5
bvj
Oui, la réponse de Zach couvre cela.
Neshta
13

Dans mon cas (Windows 10 + IIS 10), j'ai dû ouvrir « Activer ou désactiver les fonctionnalités Windows », puis aller dans Internet Information Services> Services World Wide Web> Fonctionnalités de développement d'applications> et vérifier ASP.NET 4.6

Xaris Fytrakis
la source
1
Le mien était IIS sur Windows 2012 R2. Ajout de l'ASP.NET compatible dans le Gestionnaire de serveur> Gérer> Ajouter des rôles et des fonctionnalités> Installation basée sur les rôles ou les fonctionnalités> (sélectionnez votre serveur)> Serveur Web (IIS)> Serveur Web> Développement d'applications> ASP.NET 4.5. Comme l'a dit @ArsmanAhmad, une bonne vérification de la santé mentale consiste à vérifier si la version CLR de votre pool d'applications .NET est définie sur v4.0.
GBU
6

Faire de cet article son propre message, car cela m'a fait passer des heures.

J'ai vu peut-être une douzaine de messages similaires ici et ailleurs sur ce problème et le correctif aspnet_regiis. Ils ne travaillaient pas pour moi, et aspnet_regiis agissait bizarrement, listant simplement les options, etc.

Comme indiqué par l'utilisateur ryan-anderson ci-dessus, vous ne pouvez pas entrer .exe

Pour ceux qui sont moins à l'aise avec les choses en dehors d'IIS sur le serveur, voici ce que vous faites en quelques étapes simples.

  1. Recherchez aspnet_regiis dans un dossier similaire à ce chemin. c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \

  2. Faites un clic droit sur l'invite de commande dans le menu Démarrer ou n'importe où et dites-lui de s'exécuter en tant qu'administrateur. L'utilisation de la fonction "Exécuter" de Windows ne fonctionnera tout simplement pas, ou n'a pas fonctionné pour moi.

  3. Revenez à l'exécutable aspnet_regiis. Cliquez-glissez-le directement dans l'invite de commande ou copiez-collez l'adresse dans l'invite de commande.

  4. Supprimez, s'il est là, le .exe à la fin. C'est la clé. Ajoutez le -i (espace moins œil) à la fin. Entrer.

Si vous l'avez fait correctement, vous verrez qu'il commence à installer asp.net, puis vous indique qu'il a réussi.

shubniggurath
la source
A parfaitement fonctionné pour moi. Je vous remercie.
Mike
5

Assurez-vous que vous avez défini votre application-siteversion de v2.0à v4.0dans IIS Manager :

Pools d'applications> Votre application> Paramètres avancés> Version .NET Framework

Après cela, installez votre ASP.NET.

Pour un système d'exploitation 32 bits (Windows):

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

Pour un système d'exploitation 64 bits (Windows):

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

Redémarrez votre application-sitedans IIS Manager et profitez-en.

Arsman Ahmad
la source
Ouais, j'ai fait de mon mieux pour rendre la réponse plus simple. ;-) @yuyangJian
Arsman Ahmad
4

Je sais que c'est un ancien, mais j'ai pensé que je pourrais ajouter de la valeur. Pour ceux d'entre nous qui exécutent Server Core en dehors d'un domaine (les membres du domaine peuvent simplement exécuter le Gestionnaire de serveur à distance pour ajouter / supprimer des fonctionnalités / rôles), vous devez recourir aux lignes de commande.

Les utilisateurs de Powershell peuvent taper "Install-WindowsFeature Web-Asp-Net45"

Cela devrait être équivalent à l'utilisation du gestionnaire de serveur.

jwdaigle
la source
4

J'ai été interpellé par le même message d'erreur, avec .net 4.7 installé.

La solution consistait à suivre un article mentionné précédemment pour utiliser la fonction "Activer ou désactiver Windows", où les "Services avancés .NET Framework 4.7" -> "ASP.NET 4.7" étaient déjà vérifiés.

Plus bas dans la liste, il y a les "Internet Information Services" et la sous-note "Application Development Features" -> "ASP.NET 4.7", qui doivent également être vérifiées.

Lors de l'activation, de nombreuses autres fonctionnalités sont activées ... J'ai simplement appuyé sur le bouton OK et le problème a été résolu. Capture d'écran de la boîte de dialogue des fonctionnalités de Windows

theodor.johannesen
la source
Je dois ajouter qu'il s'agissait d'une édition Windows 10 Pro
theodor.johannesen
2

Je travaille sur Windows Server 2012. La fonctionnalité .NET Extensibility 4.5 est activée. WebDAVModule supprimé. J'obtenais toujours une erreur 500.21 sur la route ASP.NET '/ docs'.

Changer 'skipManagedModules' en false a résolu le problème.

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

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

shemanov
la source
2

J'ai résolu ce problème, en ajoutant "Activer ou désactiver les fonctionnalités Windows" L'option ASP.NET 4.7

entrez la description de l'image ici

Edgar Chivichon
la source
1

J'ai eu ce problème et j'ai constaté que la suppression du dossier suivant a aidé, même avec l'édition non Express.

C:\Users\<user>\Documents\IISExpress

Thomas Bratt
la source
1

Cette erreur a commencé à m'arriver de nulle part la semaine dernière, affectant les sites Web existants sur ma machine. Je n'ai pas eu de chance en essayant l'une des suggestions ici. Finalement, j'ai complètement supprimé WebDAV d'IIS (Fonctionnalités Windows -> Services Internet (IIS) -> Services World Wide Web -> Fonctionnalités HTTP communes -> Publication WebDAV). J'ai fait une réinitialisation IIS après cela pour faire bonne mesure, et mon erreur a finalement été résolue.

Je ne peux que deviner qu'une mise à jour Windows a déclenché le problème, mais je ne peux pas en être sûr.

pirsqua
la source
Juste eu le même problème. Installation de certaines mises à jour de Windows qui ont changé mes paramètres IIS. La désactivation de la publication WebDAV l'a corrigé à nouveau.
ElliotSchmelliot
0

Vous pouvez le corriger en modifiant le type «ExtensionlessUrlHandler-Integrated-4.0» dans iis en System.Web.DefaultHttpHandler

user3661608
la source
0

Pour moi, la suppression de WebDAV de mon serveur a provoqué l'application renvoyer un 503 Service Unavailablemessage d'erreur lors de l'utilisation de PUTou DELETE, donc je l'ai réinstallé à nouveau. J'ai également essayé de supprimer complètement .NET Framework 4.5 et de le réinstaller et j'ai également essayé de me réinscrire comme suggéré, mais en vain.

J'ai pu résoudre ce problème en désactivant WebDAV pour le pool d'applications individuel , cela a stoppé l'erreur «mauvais module» lors de l'utilisation de PUTou DELETE.

Désactivez WebDAV pour le pool d'applications individuel:

  1. Cliquez sur le pool d'applications affecté
  2. Rechercher WebDAV Authoring Toolsdans la liste
  3. Cliquez pour l'ouvrir
  4. Cliquez Disable WebDAVen haut à droite.

Ta daaaa!

J'ai toujours laissé les éléments supprimés dans mon web.configfichier.

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

Ce lien est l'endroit où j'ai trouvé les instructions mais ce n'est pas très clair.

Luc
la source
0

Ce n'est peut-être pas une solution utile pour OP mais cela concerne le même message "erreur".

Nous hébergeons des pages PHP sur IIS8.5 avec .NET 4.5 installé correctement.

Nous utilisons la fonctionnalité de préchargement pour nous assurer que notre application est toujours réactive dans tous les domaines.

Après un certain temps, nous avons commencé à obtenir cette erreur au hasard.

Dans le web.config: je mets skipManagedModules à true, -> ne faites pas ça!

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

Bien que le site Web soit php, le routage vers la pagination est géré par les modules !!!

Schwarzie2478
la source
0

J'ai également rencontré ce problème. Mon application MVC4 s'exécute sur Windows Server 2012 R2 avec IIS 8.5. Aucune de ces solutions publiées n'a fonctionné pour moi ... l'installation des cadres manquants via les fonctionnalités IIS aurait pu le résoudre, mais l'installation a toujours échoué.

J'ai dû utiliser le Web Platform Installeret installé les packages suivants:

entrez la description de l'image ici

Franc
la source
0

J'étais confronté à ce problème dans une application Web hébergée sur un serveur d'hébergement partagé. Donc, évidemment, n'avait pas d'accès direct à IIS, donc ne pouvait pas appliquer de nombreuses solutions proposées ici.

Sur le panneau de configuration du fournisseur d'hébergement, j'ai activé la journalisation des erreurs pour IIS et ASP.Net. Et puis j'ai appris que l'erreur se trouvait dans un cshtml manquant.

Dipendu Paul
la source
0

L'installation de .NET 4.7 a fonctionné pour moi. J'avais seulement 3.5 installé auparavant.entrez la description de l'image ici

Eric S.
la source