Solución:
El 2Dakota del Norte La opción es la que desea.
En tus web.config
, asegúrese de que existan estas claves:
<configuration>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
</configuration>
Añadiendo <validation validateIntegratedModeConfiguration="false"/>
aborda el síntoma, pero no es apropiado para todas las circunstancias. Habiendo resuelto este problema varias veces, espero ayudar a otros no solo a superar el problema, sino también a comprenderlo. (Lo que se vuelve cada vez más importante a medida que IIS 6 se convierte en mito y rumor).
Fondo:
Este problema y la confusión que lo rodea comenzó con la introducción de ASP.NET 2.0 e IIS 7. IIS 6 tenía y sigue teniendo solo un modo de canalización, y es equivalente a lo que IIS 7+ llama modo “Clásico”. El segundo modo de canalización, más nuevo y recomendado para todas las aplicaciones que se ejecutan en IIS 7+ se denomina modo “Integrado”.
Entonces, ¿cuál es la diferencia? La diferencia clave es cómo ASP.NET interactúa con IIS.
-
Modo clásico está limitado a una canalización ASP.NET que no puede interactuar con la canalización IIS. Esencialmente, entra una solicitud y si se le ha dicho a IIS 6 / Classic, a través de la configuración del servidor, que ASP.NET puede manejarlo, IIS entrega la solicitud a ASP.NET y continúa. El significado de esto puede deducirse de un ejemplo. Si autorizara el acceso a archivos de imágenes estáticas, no podría hacerlo con un módulo ASP.NET porque la canalización de IIS 6 manejará esas solicitudes por sí misma y ASP.NET nunca verá esas solicitudes porque nunca se entregaron. . * Por otro lado, autorizar qué usuarios pueden acceder a una página .ASPX, como una solicitud de Foo.aspx, es trivial incluso en IIS 6 / Classic porque IIS siempre entrega esas solicitudes a la canalización de ASP.NET. En el modo Clásico, ASP.NET no sabe lo que no se le ha dicho y hay muchas cosas que IIS 6 / Classic puede no estar diciendo.
-
Modo integrado Se recomienda porque los controladores y módulos ASP.NET pueden interactuar directamente con la canalización de IIS. La canalización de IIS ya no transfiere simplemente la solicitud a la canalización de ASP.NET, ahora permite que el código ASP.NET se conecte directamente a la canalización de IIS y todas las solicitudes que lo golpean. Esto significa que un módulo ASP.NET no solo puede observar las solicitudes de archivos de imágenes estáticas, sino que puede interceptar esas solicitudes y tomar medidas negando el acceso, registrando la solicitud, etc.
Superando el error:
- Si está ejecutando una aplicación anterior que se creó originalmente para IIS 6, tal vez la haya movido a un nuevo servidor, puede que no haya absolutamente nada de malo en ejecutar el grupo de aplicaciones de esa aplicación en el modo Clásico. Adelante, no tiene por qué sentirse mal.
-
Por otra parte, tal vez le esté dando a su aplicación un lavado de cara o estaba funcionando bien hasta que instaló una biblioteca de terceros a través de NuGet, manualmente o por algún otro medio. En ese caso es completamente posible
httpHandlers
ohttpModules
han sido agregados asystem.web
. El resultado es el error que está viendo porquevalidateIntegratedModeConfiguration
valores predeterminadostrue
. Ahora tienes dos opciones:- Eliminar el
httpHandlers
yhttpModules
elementos desystem.web
. Hay un par de posibles resultados de esto:- Todo funciona bien, un resultado común;
- Su aplicación continúa quejándose, puede haber un web.config en una carpeta principal de la que está heredando, considere limpiar ese web.config también;
- Te cansas de quitarte el
httpHandlers
yhttpModules
que los paquetes NuGet siguen agregandosystem.web
, oye, haz lo que necesites.
- Eliminar el
- Si esas opciones no funcionan o son más problemáticas de lo que vale, no voy a decirles que no pueden configurar
validateIntegratedModeConfiguration
parafalse
, pero al menos sabes lo que estás haciendo y por qué es importante.
Buenas lecturas:
- ASP.NET 2.0 Cambios importantes en IIS 7.0
- Integración de ASP.NET con IIS 7
- Descripción general de los controladores HTTP y los módulos HTTP
* Por supuesto, hay formas de introducir todo tipo de cosas extrañas en la canalización de ASP.NET desde IIS 6 / Classic a través de encantamientos como asignaciones de comodines, si te gusta ese tipo de cosas.
Si aún necesita usar el módulo HTTP, debe configurarlo (marco .NET 4.0) de la siguiente manera:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="MyModule" type="[Namespace].[Class], [assembly]"/>
</modules>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>