Le gestionnaire "ExtensionlessUrlHandler-Integrated-4.0" a un mauvais module "ManagedPipelineHandler" dans sa liste de modules
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 sortir, j'ai réalisé que ma solution de contournement ne fonctionnait pas. Voici ce que j'ai essayé de faire:
1) j'ai ASP.NET application qui a Preloader classe qui hérite IProcessHostPreloadClient et fait toute l'initialisation lourde dans Preload implémentation de la méthode (l'application est complexe et fait partie d'un système énorme, donc elle nécessite environ 2 minutes pour établir des connexions à tous les services nécessaires et pré-instancier certains enregistrements Unity).
2) j'ai beaucoup de travail à faire lors de l'arrêt de l'application (désabonnement, déconnexion, élimination,...), 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 quand j'ai une activité utilisateur (la première demande après le Pool D'applications qui contient l'application web susmentionnée est démarré entraînera L'appel de* Application_Start * et ensuite * Application_End * est appelé à L'arrêt ou au recyclage du Pool D'applications), mais des problèmes se produisent lorsqu'il n'y a pas d'activité de l'utilisateur et que l'application tente de redémarrer elle - même après avoir été active pendant 48 heures (exigence configurée). Comme il n'y avait pas de demandes, l'application n'a officiellement pas commencé. Ergo, il ne peut pas être arrêté gracieusement puisque * Application_End* ne sera pas appelé.
4) Maintenant vient la partie désordonnée... J'ai essayé de faire un GET demande de code à la fin de la Précontrainte méthode, et cela a fonctionné. Mais cette solution m'a semblé mauvaise, même si cela a fonctionné. Donc, j'ai essayé beaucoup de choses, et la dernière chose que j'ai essayé était ceci:
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 la page de connexion qui était censée être affichée dans la demande initiale) et l'application D'arrêt du Pool D'applications s'est terminée gracieusement en faisant le travail nécessaire dans * Application_End*.
MAIS
Après le démarrage de l'application (préchargée et initiée) de cette manière, c'est ce qui s'est passé quand je voulais atteindre l'application via un navigateur Web:
Erreur HTTP 500.21-erreur interne du serveur Le gestionnaire "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 le réparer?
Si Je ne comprends pas cela, je reviendrai à la première solution (envoi D'une requête GET à partir du code) mais ce problème me dérangera puisque je n'ai même pas une idée de ce qui ne va pas.
21 réponses
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 (l'accent est le mien):
Fournit une implémentation simple de la classe abstraite HttpWorkerRequest qui peut être utilisée pour héberger ASP.NET applications en dehors d'une application Internet Information Services (IIS) . Vous pouvez employer SimpleWorkerRequest directement ou étendre il.
Aussi, si vous regardez la documentation MSDN pour le système .Web.Espace de noms d'hébergement (SimpleWorkerRequest
est dans cet espace de noms), vous verrez aussi quelque chose de similaire à ce qui précède (encore une fois, l'accent est le mien):
Le Système.Web.L'espace de noms d'hébergement fournit la fonctionnalité d'hébergement ASP.NET applications provenant d'applications gérées en dehors de Microsoft Internet Information Services (IIS) .
La solution
Je recommande suppression de 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. Ce dont vous avez besoin est le 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, qu'est-ce que la solution Microsoft faire? Il fait ce que vous essayez de faire - IIS envoie une requête "get" à votre site web après le démarrage du pool d'applications.
Essayez de vous réinscrire ASP.NET avec aspnet_regiis -i
. Il a travaillé 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
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" Ensuite, Les Services D'Information Internet Ensuite, Les Services World Wide Web Puis Fonctionnalités De Développement D'Applications Et puis activez ASP.NET 4,5
Cela a fonctionné pour moi (bien que l'assistant et le libellé soient un peu différents dans Windows Serveur 2012, mais vous allez le comprendre). 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, est complètement au-delà de moi...
Malgré avoir suivi une grande partie des conseils sur cette page, j'avais toujours des problèmes sur Windows Server 2012. L'installation de. Net Extensibility 4.5 (ajouter des rôles et des fonctionnalités > rôles de Serveur > Serveur Web (IIS) > serveur Web > Développement D'applications>. Net Extensibility 4.5) l'a résolu pour moi.
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
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 path:
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
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_regiis
ne fonctionnent pas sur Windows 10 (Creators Update et versions ultérieures) ou Windows Server 2016:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -je
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 droits réservés.
Démarrer l'installation ASP.NET (4.0.30319.0).
Cette option n'est pas prise en charge sur cette version du système d'exploitation. Les administrateurs devraient plutôt installer / désinstaller ASP.NET 4.5 avec IIS8 en utilisant la boîte de dialogue" Activer/Désactiver les fonctionnalités Windows", L'outil de gestion du Gestionnaire de serveur ou le dism.exe outil de ligne de commande. pour plus de détails, veuillez consulter http://go.microsoft.com/fwlink/?LinkID=216771 .
Installation terminée 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.
Dans mon cas (Windows 10 + IIS 10), j'ai dû ouvrir " Activer ou désactiver les fonctionnalités Windows ", puis aller à Internet Information Services > World Wide Web Services > fonctionnalités de développement D'applications > et vérifier ASP.NET 4.6
Ce qui en fait son propre post parce que 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 des options, etc.
Comme l'utilisateur ryan-anderson ci-dessus indiqué, vous ne pouvez pas entrer .exe
Pour ceux qui sont moins à l'aise avec des choses en dehors D'IIS sur le serveur, voici ce que vous faites en quelques étapes simples.
-
Trouver aspnet_regiis dans un dossier similaire à ce chemin. c:\Windows\Microsoft.NET\Framework\v4.0.30319\
Cliquez avec le bouton droit sur Invite de commandes dans le menu Démarrer ou n'importe où et dites-lui de s'exécuter en tant qu'administrateur. L'utilisation de la fonctionnalité "Exécuter" de windows ne fonctionnera tout simplement pas, ou n'a pas fonctionné pour moi.
Revenez à l'exécutable aspnet_regiis. Cliquez et faites-le glisser à droite dans l'invite de commande ou copiez-collez l'adresse dans l'invite de commande.
Retirer, si elle est là, la .exe à la fin. C'est clé. Ajouter le-i (espace moins oeil) à la fin. Entrer.
Si vous avez fait ceci correctement, vous verrez qu'il commence à installer asp.net et puis vous dit qu'il a réussi.
Je sais que c'est un vieux, 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 Server Manager à distance pour ajouter/supprimer des fonctionnalités/rôles), vous devez recourir à des lignes de commande.
Les utilisateurs de Powershell peuvent taper "Install-WindowsFeature Web-Asp-Net45"
Cela devrait être équivalent à l'utilisation du gestionnaire de serveur.
Assurez-vous que vous avez configuré votre application-site
version de v2.0
à v4.0
dans Gestionnaire des services IIS:
Pools D'Applications > votre Application > Paramètres avancés > version. NET Framework
Après cela, installez votre ASP.NET
.
Pour le système D'exploitation 32 bits (Windows):
C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -je
Pour le système D'exploitation 64 bits (Windows):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -je
Redémarrez votre application-site
dans IIS Manager et profitez-en.
J'ai été contesté par le même message d'erreur, avec.net 4.7 installé.
La solution était de suivre un poste mentionné précédemment pour aller avec le "Activer ou désactiver la fonctionnalité Windows", où le". Net Framework 4.7 Advanced Services" - > "ASP.NET 4.7" a déjà été vérifié.
Plus bas dans la liste, il y a les "services D'information Internet" et la sous-Note "fonctionnalités de développement D'applications" --> "ASP.NET 4.7", qui doit également être vérifié.
Lorsque vous activez cette option, attribuez d'autres fonctionnalités sont activées... J'ai simplement appuyé sur le bouton Ok, et le problème a été résolu. Screendump de dialogue fonctionnalités de windows
J'ai eu ce problème et j'ai trouvé que la suppression du dossier suivant a aidé, même avec l'édition Non-Express.Express:
C:\Users\<user>\Documents\IISExpress
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 d'essayer l'une des suggestions ici. Finalement, J'ai complètement supprimé WebDAV D'IIS (fonctionnalités Windows - > Services D'Information Internet - > 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 commencé le problème, mais je ne peux pas en être sûr.
Je travaille sur Windows Server 2012. La fonctionnalité. Net Extensibility 4.5 est activée. Webdavmodule supprimé. Je recevais toujours l'erreur 500.21 sur ASP.NET route '/ docs'.
Changer 'skipManagedModules' en false a résolu le problème.
<applicationInitialization doAppInitAfterRestart="true" skipManagedModules="false">
<add initializationPage="/docs" />
</applicationInitialization>
Grâce à https://groups.google.com/forum/#!topic/bonobo-git-serveur/GbdMXdDO4tI
Vous pouvez le réparer en changeant le type" ExtensionlessUrlHandler-Integrated-4.0 " dans IIS en System.Web.DefaultHttpHandler
Pour moi, la suppression de WebDAV de mon serveur a provoqué le retour d'un message d'erreur 503 Service Unavailable
lors de l'utilisation de PUT
ou DELETE
, donc je l'ai réinstallé. 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 individual , ce qui a arrêté l'erreur' bad module ' lors de l'utilisation de PUT
ou DELETE
.
Désactiver WebDAV pour Piscine Individuelle App:
- cliquez sur le pool d'applications concerné
- Trouver
WebDAV Authoring Tools
dans la liste - Cliquez pour l'ouvrir
- Sur
Disable WebDAV
en haut à droite.
Ta daaaa!
J'ai toujours laissé les éléments de suppression dans mon fichier web.config
.
<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 c'est pas très clair.
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écharge 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: j'ai mis skipManagedModules à true, - > ne le faites pas!
<?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ée par les modules!!!
J'ai aussi couru à ce problème. Mon application MVC4 fonctionne sur un Windows Server 2012 R2 avec IIS 8.5. Aucune de ces solutions affichées n'a fonctionné pour moi...l'installation des frameworks manquants via les fonctionnalités IIS aurait pu le résoudre, mais l'installation a toujours échoué.
, j'ai dû utiliser le Web Platform Installer
et installé les paquets suivants:
Je faisais face à ce problème dans une application web hébergée sur un serveur d'hébergement partagé. Donc, évidemment, n'a pas eu un accès direct à IIS, donc ne pouvait pas appliquer beaucoup de solution proposée 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 appris à connaître cette erreur effectivement menti dans un CSHTML manquant.
J'ai résolu ce problème en ajoutant " activer ou désactiver les fonctionnalités Windows" l'option ASP.NET 4.7