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é.
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 :
IIS7 , nous essayons les solutions suivantes :
La deuxième méthode, modifiez le fichier de configuration web.config :
Remarque : chemin web.config C:inetpubwwwrootweb.configPar 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>
<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>
<validation validateIntegratedModeConfiguration="false" />
Le journal d'IIS 6.0 est stocké dans :
c:windowssystem32logfiles
%SystemDrive%inetpublogsLogFiles
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.