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.
la source
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 (c'est moi qui souligne):
En outre, si vous consultez la documentation MSDN pour l' espace de noms System.Web.Hosting (se
SimpleWorkerRequest
trouve 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):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.
la source
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):
http://forums.iis.net/p/1190643/2026401.aspx
la source
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 ...
la source
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
la source
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 (mise à jour des créateurs et versions ultérieures) ou Windows Server 2016: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.
la source
Exécutez l'une de ces commandes:
Pour le système d'exploitation Windows 32 bits:
Pour le système d'exploitation Windows 64 bits:
la source
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:
la source
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
la source
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.
Recherchez aspnet_regiis dans un dossier similaire à ce chemin. c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \
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.
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.
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.
la source
Assurez-vous que vous avez défini votre
application-site
version dev2.0
àv4.0
dans IIS Manager :Après cela, installez votre
ASP.NET
.Pour un système d'exploitation 32 bits (Windows):
Pour un système d'exploitation 64 bits (Windows):
Redémarrez votre
application-site
dans IIS Manager et profitez-en.la source
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.
la source
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
la source
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.
Merci à https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI
la source
J'ai résolu ce problème, en ajoutant "Activer ou désactiver les fonctionnalités Windows" L'option ASP.NET 4.7
la source
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
la source
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.
la source
Vous pouvez le corriger en modifiant le type «ExtensionlessUrlHandler-Integrated-4.0» dans iis en System.Web.DefaultHttpHandler
la source
Pour moi, la suppression de WebDAV de mon serveur a provoqué l'application renvoyer un
503 Service Unavailable
message d'erreur lors de l'utilisation dePUT
ouDELETE
, 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
PUT
ouDELETE
.Désactivez WebDAV pour le pool d'applications individuel:
WebDAV Authoring Tools
dans la listeDisable WebDAV
en haut à droite.Ta daaaa!
J'ai toujours laissé les éléments supprimés dans mon
web.config
fichier.Ce lien est l'endroit où j'ai trouvé les instructions mais ce n'est pas très clair.
la source
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!
Bien que le site Web soit php, le routage vers la pagination est géré par les modules !!!
la source
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 Installer
et installé les packages suivants:la source
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.
la source
L'installation de .NET 4.7 a fonctionné pour moi. J'avais seulement 3.5 installé auparavant.
la source