An ASP.NET un paramètre qui ne s'applique pas en mode pipeline géré intégré a été détecté
J'ai installé DotNetOpenAuth SDK-3.4.5.10201.vsix et moi ne pouvons pas le faire fonctionner. Cela fonctionne localement (quand je cours en tant que localhost) mais quand j'essaie de publier cela ne fonctionne pas.
Le message D'erreur IIS que je reçois est
Résumé Des Erreurs
Erreur HTTP 500.22-erreur interne du serveur
An ASP.NET un paramètre qui ne s'applique pas en mode pipeline géré intégré a été détecté.
Et
Module ConfigurationValidationModule Notification BeginRequest Handler StaticFile Error Code 0x80070032
Ensuite, il y a quelques suggestions sur la façon dont pour résoudre le problème:
Choses que vous pouvez essayer:
Migrer la configuration vers le
system.webServer/modules
section. Vous peut le faire manuellement ou en utilisant AppCmd à partir de la ligne de commande par exemple,%SystemRoot%system32inetsrvappcmd migrate config "Default Web Site/"
. UtiliserAppCmd
pour migrer votre l'application lui permettra de travailler dans Mode intégré, et continuer à travailler en mode classique et sur Précédent les versions de IIS.Si vous êtes certain qu'il est correct de ignorer ce erreur, il peut être désactivé par la mise en
system.webServer/validation@validateIntegratedModeConfiguration
à false.Alternativement, basculez l'application vers un pool D'applications en mode Classique - exemple,
%SystemRoot%system32inetsrvappcmd set app "Default Web Site/" /applicationPool:"Classic .NET AppPool"
. Faire cela seulement si vous êtes impossible de migrer votre application.
(Définissez "site Web par défaut" et "Classic. net AppPool" sur le chemin de votre application et le nom de votre pool d'applications)
Mais le problème est que je n'ai pas accès au serveur ISS car je ne suis pas le propriétaire de. Est-il possible de résoudre ce problème?
10 réponses
2nd option est celle que vous voulez.
Dans votre web.config
, Assurez-vous que ces clés existent:
<configuration>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
</configuration>
L'ajout de <validation validateIntegratedModeConfiguration="false"/>
résout le symptôme, mais n'est pas approprié pour toutes les circonstances. Ayant couru autour de cette question à quelques reprises, j'espère aider les autres non seulement à surmonter le problème, mais à le comprendre. (Qui devient de plus en plus important que IIS 6 se fane dans le mythe et la rumeur.)
Contexte:
Cette question et la confusion qui l'entoure ont commencé avec l'introduction de ASP.NET 2.0 et IIS 7. IIS 6 avait et continue d'avoir un seul mode de pipeline, et il est équivalent à ce que IIS 7 + appelle le mode "Classique". Le deuxième mode de pipeline, plus récent et recommandé pour toutes les applications fonctionnant sur IIS 7+ est appelé mode "intégré".
Alors, quelle est la différence? La principale différence est de savoir comment ASP.NET interagit avec IIS.
Le mode Classique est limité à un ASP.NET pipeline qui ne peut pas interagir avec le pipeline IIS. Essentiellement, une requête arrive et si IIS 6 / Classic a été dit, via la configuration du serveur, que ASP.NET peut le gérer ensuite, IIS passe la demande à ASP.NET et passe à autre chose. La signification de ceci peut être glanée à partir d'un exemple. Si je devais autoriser l'accès aux fichiers image statiques, Je ne serais pas en mesure de le faire avec un ASP.NET module parce que le pipeline IIS 6 traitera ces demandes lui-même et ASP.NET ne verra jamais ces demandes parce qu'ils n'ont jamais été remis.* D'autre part, autoriser quels utilisateurs peuvent accéder à un .Page ASPX comme une demande de Foo.aspx est trivial même dans IIS 6 / Classic parce que IIS remet toujours ces demandes au ASP.NET pipeline. En mode Classique ASP.NET ne sait pas ce qu'il n'a pas été dit Et il y a beaucoup de choses que IIS 6/Classic peut ne pas le dire.
Le mode intégré est recommandé car ASP.NET les gestionnaires et les modules peuvent interagir directement avec le pipeline IIS. Le pipeline IIS ne transmet plus simplement la requête au ASP.NET pipeline, maintenant il permet ASP.NET code à accrocher directement dans le pipeline IIS et tous les les demandes qu'il a frappé. Cela signifie qu'un ASP.NET module peut non seulement observer les demandes de fichiers image statiques, mais peut intercepter ces demandes et prendre des mesures en refusant l'accès, la journalisation de la demande, etc.
Surmonter l'erreur:
- Si vous exécutez une ancienne application qui a été construite à L'origine pour IIS 6, peut-être que vous l'avez déplacée vers un nouveau serveur, il n'y a peut-être absolument rien de mal à exécuter le pool d'applications de cette application en mode Classique. Aller en avant, vous n'avez pas à vous sentir mal.
-
Là encore, peut-être que vous donnez à votre application un lifting ou qu'elle se déroulait très bien jusqu'à ce que vous ayez installé une bibliothèque tierce via NuGet, manuellement ou par d'autres moyens. Dans ce cas, il est tout à fait possible que
httpHandlers
ouhttpModules
aient été ajoutés àsystem.web
. Le résultat est l'erreur que vous voyez parce quevalidateIntegratedModeConfiguration
par défauttrue
. Maintenant, vous avez deux choix:- supprimez les éléments
httpHandlers
ethttpModules
desystem.web
. Il y a un couple résultats possibles de cette:- Tout fonctionne bien, un résultat commun;
- votre application continue de se plaindre, il peut y avoir un web.config dans un dossier parent dont vous héritez, envisagez de nettoyer ce web.config aussi;
- Vous êtes fatigué de supprimer les
httpHandlers
ethttpModules
que les paquets NuGet continuent d'ajouter àsystem.web
, Faites ce dont vous avez besoin.
- supprimez les éléments
- si ces options ne fonctionnent pas ou sont plus de problèmes que cela vaut la peine alors je suis Je ne vais pas vous dire que vous ne pouvez pas définir
validateIntegratedModeConfiguration
surfalse
, mais au moins vous savez ce que vous faites et pourquoi cela importe.
Bonne lecture:
- ASP.NET 2.0 briser les changements sur IIS 7.0
- ASP.NET intégration avec IIS 7
- présentation des gestionnaires HTTP et des Modules HTTP
*bien sûr, il y a des façons d'obtenir toutes sortes de choses étranges dans le ASP.NET pipeline de IIS 6 / Classic via incantations comme générique mappages, si vous aimez ce genre de chose.
Si vous devez toujours utiliser le Module HTTP, vous devez le configurer (. net 4.0 framework) comme suit:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="MyModule" type="[Namespace].[Class], [assembly]"/>
</modules>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
J'ai rencontré ce problème mais j'ai eu une solution différente. Cela impliquait la mise à jour du Control Panel>Administrative Tools>IIS Manager
et le retour du Pipeline géré de mon site D'application de Integrated
à Classic
.
Vérifiez s'il y a un conflit dans votre authentification IIS. c'est à dire que vous activez l'authentification anonyme et ASP.NET l'usurpation d'identité à la fois peut provoquer l'erreur aussi.
Dans votre site web.config assurez-vous que ces clés existent:
<configuration>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
</configuration>
Ainsi que de vérifier le Asp.Net Impresonation = désactiver {[5] } dans IIS site Authetication
Cela a fonctionné pour moi:
- supprime le site créé à l'origine.
- recréer le site dans IIS
- solution Propre
- Construire une solution
On dirait que quelque chose est allé au sud quand j'ai créé le site à l'origine. Je déteste les solutions similaires à "redémarrez votre machine, puis réinstallez windows" sans savoir ce qui a causé l'erreur. Mais, cela a fonctionné pour moi. Rapide et simple. Espérons que cela aide quelqu'un d'autre.
J'ai rencontré ce problème et inspiré par la réponse de @Jeremy Cook, j'ai mordu la balle pour savoir ce qui a fait que le mode intégré IIS 7 n'aime pas mon web.config. Voici mon scénario:
- API Web (version 4.0.030506.0 alias l'ancienne)
- . net 4.0
- Attribute Routing 3.5.6 pour L'API Web [alerte spoiler: c'était ce gars!]
Je voulais utiliser le routage d'attributs dans un projet qui (malheureusement) devait utiliser. Net 4 et ne pouvait donc pas utiliser L'API web 2.2 (qui besoins .NET 4.5). Le paquet NuGet bien intentionné a ajouté cette section Sous la section <system.web>
:
<system.web>
<httpHandlers>
<add verb="*" path="routes.axd" type="AttributeRouting.Web.Logging.LogRoutesHandler, AttributeRouting.Web" />
</httpHandlers>
</system.web>
[je dis bien intentionné, car cette partie est requise sur les anciennes versions D'IIS]
La Suppression de cette section m'a passé le HTTP 500.23!!
Résumé: Je soutiens les mots de Jeremy qu'il est important de comprendre pourquoi les choses ne fonctionnent pas plutôt que de simplement "masquer le symptôme". Même si vous devez masquer le symptôme, vous savez ce que vous faites (et pourquoi): -)
Dans mon cas, il me manquait dll dans le dossier bin qui a été référencé dans le web.fichier de configuration. Vérifiez donc si vous utilisiez un paramètre dans le web.config mais en fait n'ont pas dll.
Merci