Maison >php教程 >PHP开发 >Analyse et solutions aux causes de l'erreur 500.23 signalées par IIS7

Analyse et solutions aux causes de l'erreur 500.23 signalées par IIS7

高洛峰
高洛峰original
2017-01-06 16:21:391786parcourir

Contexte : Aujourd'hui, il y a eu une exception d'ouverture de fonction sur le terminal de l'entreprise, signalant une erreur 500. J'ai utilisé Fiddler pour trouver le lien, puis je l'ai ouvert dans IE, signalant une erreur 500.23 : ASP.NET non applicable dans l'intégré. Le mode pipeline d'hébergement a été détecté. L'arrière-plan est un environnement intégré à IIS7 et Tomcat7, qui est enregistré ici.

Erreur HTTP 500.23 - Erreur de serveur interne

Un paramètre ASP.NET qui n'est pas applicable en mode pipeline d'hébergement intégré a été détecté.

Analyse et solutions aux causes de lerreur 500.23 signalées par IIS7

Pourquoi les erreurs ci-dessus se produisent-elles ?

Le pool d'applications dans IIS7 a deux modes, l'un est le « mode intégré » et l'autre est le « mode classique ».

Le mode classique est la méthode IIS 6 à laquelle nous sommes habitués.

Si vous utilisez le mode intégré, vous devez modifier le fichier de configuration des httpModules et httpHandlers personnalisés, et les transférer vers les sections

Deux solutions :

La première méthode consiste à configurer le pool d'applications

Configurer le pool d'applications sur IIS7 et changer le mode du pool d'applications en « Classique » et tout s'est bien passé après ça. Comme le montre l'image :

Analyse et solutions aux causes de lerreur 500.23 signalées par IIS7

IIS7 , nous essayons les solutions suivantes :

La deuxième méthode, modifiez le fichier de configuration web.config :

Remarque : chemin web.config C:inetpubwwwrootweb.config

Par exemple, les paramètres d'origine (vous n'avez peut-être pas de nœuds httpModules, httpHandlers dans votre environnement)

<system.web>
............
<httpModules>
<add name="MyModule"type="MyApp.MyModule" />
</httpModules>
<httpHandlers>
<add path="*.myh"verb="GET"type="MyApp.MyHandler" />
</httpHandlers>
</system.web>
Quand le pool d'applications IIS7 est en "Mode intégré", remplacez par :

<system.web>
...........
</system.web>
<system.webServer>
<modules>
<add name="MyModule"type="MyApp.MyModule" /> 
</modules>
<handlers>
<add name="MyHandler"path="*.myh"verb="GET"type="MyApp.MyHandler"preCondition="integratedMode" />
</handlers>
</system.webServer>
(si votre Si web.config n'a pas de nœuds httpModules ou httpHandlers, ajoutez directement au nœud system.webServer :

<validation validateIntegratedModeConfiguration="false" />
Désactivez la vérification du mode intégré pour éviter les erreurs

Emplacement du journal IIS

Le journal d'IIS 6.0 est stocké dans :
c:windowssystem32logfiles

. Le journal d'IIS 7 est stocké dans :

%SystemDrive%inetpublogsLogFiles

Après mon test, les journaux IIS sont écrits immédiatement et ne nécessitent pas de réinitialisation IIS.


Les journaux IIS 6 et 7 sont écrits dans différents dossiers selon différents sites. Le format des dossiers d'emplacement est "w3svc{ siteId}".


Dans IIS6, la façon d'afficher l'ID du site est de : déterminer l'ID du site via le nom du dossier de journal IIS.


Dans IIS7, dans la gestion IIS Dans les paramètres avancés du navigateur, l'ID en général est l'ID du site, et vous devez ensuite utilisez cet ID pour localiser quel dossier du dossier LogFiles appartient au site que vous souhaitez afficher.

La différence entre Intégré et Classique


Les pools d'applications d'IIS7 ont deux modes, l'un est Intégré et l'autre est classique. Si vous utilisez le mode intégré, vous devez modifier les fichiers de configuration pour les httpModules et httpHandlers personnalisés, et vous devez les modifier dans les sections différence entre les deux modes d'IIS7 et IIS6 ?


IIS7.0 Mode intégré : les modules et les gestionnaires d'asp.net sont lus à partir de webServer>, et les sections de configuration précédentes et sous seront ignorées. Si la validation est désactivée, aucune erreur ne sera générée.


Mode classique IIS7.0 : contrairement à la situation ci-dessus, les et les


Classique vs Intégré

Le mode Classique (le seul mode dans IIS6 et versions antérieures) est un mode dans lequel IIS ne fonctionne qu'avec les extensions ISAPI et les filtres ISAPI directement. En fait, dans ce mode, Asp.net est. juste une extension ISAPI (aspnet_isapi.dll) et un filtre ISAPI (aspnet_filter.dll).IIS traite simplement Asp.net comme un plugin externe implémenté dans ISAPI et fonctionne avec lui comme une boîte noire (et seulement lorsqu'il est nécessaire d'émettre la demande toASP .NET). Dans ce mode, Asp.net n'est pas très différent de PHP ou d'autres technologies pour IIS.

Le mode classique est le seul mode de fonctionnement pour IIS6.0 et versions antérieures (fonctionne uniquement sur EXTENSION ISAPI, FILTRES ISAPI (sous EXTENSION, FILTRES ISAPI). Dans ce mode, asp.net n'est qu'un plug-in (aspnet_isapi.dll, aspnet_filter.dll) qui implémente respectivement ISAPI EXTENSION et ISAPI FILTER. Le travail des II consiste uniquement à transmettre des requêtes spécifiques à Asp.net et à les héberger avec. PHP et ainsi de suite dans IIS Les plugins dans .

Le mode intégré, en revanche, est un nouveau mode dans IIS7 dans lequel le pipeline IIS est étroitement intégré (c'est-à-dire est exactement le même) car ASP.net peut voir chaque requête qu'il souhaite et manipuler les éléments. En fait, ASP.NET n'est plus traité comme un plugin externe. Il est complètement mélangé et intégré dans IIS. Dans ce mode, les HttpModules Asp.net ont presque autant de puissance qu'un filtre ISAPI et les HttpHandlers Asp.net le peuvent. ont des capacités presque équivalentes à celles d'une extension ISAPI. Dans ce mode, Asp.net fait essentiellement partie d'IIS .net et a un contrôle et un accès complets à l'ensemble du pipeline de requêtes. Asp.net n'est plus un plug-in externe, mais est entièrement intégré à IIS. Dans ce mode, Asp.net HttpModules et ISAPI Filter ont des droits de contrôle égaux, et Asp.net HttpHandlers et ISAPI Extension ont des droits de contrôle égaux. En d'autres termes, Asp.net fait déjà partie d'IIS.

Si vous souhaitez prendre en compte à la fois IIS6 et IIS7, vous pouvez conserver les mêmes définitions dans httpHandlers (pour IIS6) et handlers (pour IIS7) dans web.config, mais pensez à ajouter , sinon IIS7 provoquera des erreurs dues à des définitions répétées.

Pour plus d'articles sur l'analyse des causes et les solutions de l'erreur 500.23 signalée par IIS7, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn