2010-11-17 22 views
347

I DotNetOpenAuth SDK-3.4.5.10201.vsix instalado y no puedo hacerlo funcionar. Funciona localmente (cuando funciono como localhost) pero cuando intento publicarlo no funciona.Se ha detectado una configuración de ASP.NET que no se aplica al modo de canalización integrada administrada

El mensaje de error IIS, recibo es

Error Summary
HTTP Error 500.22 - Internal Server Error
An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode.

Y

Module  ConfigurationValidationModule 
Notification BeginRequest 
Handler  StaticFile 
Error Code 0x80070032 

entonces hay algunas sugerencias sobre la manera de resolver el problema:

cosas que puede probar:

  • Migrate the configuration to the system.webServer/modules section. You can do so manually or by using AppCmd from the command line - for example, %SystemRoot%\system32\inetsrv\appcmd migrate config "Default Web Site/" . Using AppCmd to migrate your application will enable it to work in Integrated mode, and continue to work in Classic mode and on previous versions of IIS.

  • If you are certain that it is OK to ignore this error, it can be disabled by setting system.webServer/[email protected] to false.

  • Alternatively, switch the application to a Classic mode application pool - for example, %SystemRoot%\system32\inetsrv\appcmd set app "Default Web Site/" /applicationPool:"Classic .NET AppPool" . Only do this if you are unable to migrate your application.
    (Set "Default Web Site" and "Classic .NET AppPool" to your application path and application pool name)

Pero el problema es que no tengo acceso al servidor ISS ya que no soy el propietario. ¿Hay alguna forma de resolver esto?

Respuesta

685

La opción 2 nd es la que usted desea.

En su web.config, asegúrese de que existen estas claves:

<configuration> 
    <system.webServer> 
     <validation validateIntegratedModeConfiguration="false"/> 
    </system.webServer> 
</configuration> 
+9

Esto no debería afectar la seguridad de su aplicación. Simplemente desactiva la advertencia que dice que tiene algunos valores de configuración que no se usarán. – David

+17

Este no es realmente un consejo excesivo si tiene configuraciones que no se utilizarán, entonces debe eliminarlas. – Seph

+30

@Seph, no está de acuerdo con que este no sea un buen consejo.Muchas instalaciones de NuGet (por ejemplo, DotLess) agregarán entradas a las secciones que se aplican al modo integrado, y también duplicarán esa configuración para el modo no integrado. Esto se llama * portabilidad * y permite que su configuración funcione * independientemente * de si está utilizando IIS7/integrado o clásico. La única razón para dejar esta configuración de validación como 'verdadera' es para que pueda dejar sus ruedas de entrenamiento y que IIS le grite cada vez que agregue una configuración que no funcionará en modo integrado. Esto es para los inexpertos, pero se pone en el camino. –

31

Si usted todavía tiene que utilizar el módulo HTTP que necesita para configurarlo (.NET 4.0 framework) de la siguiente manera:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <add name="MyModule" type="[Namespace].[Class], [assembly]"/> 
    </modules> 
    <validation validateIntegratedModeConfiguration="false"/> 
</system.webServer> 
+2

EDITADO: No olvide esta parte: , no se menciona en la respuesta de David – bresleveloper

+2

Creo que la propiedad HttpModules en system.web es para ASP 3.5 o antes. Para ASP 4 o superior, use los módulos en system.webserver –

+1

@HoyCheung, en realidad es una cuestión de utilizar la canalización integrada o clásica, no qué versión de .Net, que decide si usar system.web/httpModules o system.webServer/modules. –

30

Me encontré con este problema pero tuve una solución diferente. Implicó la actualización de Control Panel>Administrative Tools>IIS Manager y la reversión de la canalización administrada de mi sitio de aplicaciones desde Integrated hasta Classic.

+3

De acuerdo, ¡esta es la mejor opción en lugar de ocultar el error! Asegúrese de estar utilizando el grupo de aplicaciones correcto: debe ser Classic no integrado – Swomble

+1

Estoy utilizando Visual Studio 2012, ¿cómo puedo cambiar el grupo de aplicaciones a clásico? –

+8

Esta no es una buena solución si desea utilizar todas las características nuevas disponibles en Integrated Pipeline. Esto es como decir revertir a .NET 2.0 de 4.0 debido a un problema. –

6

Compruebe si hay algún conflicto en su autenticación de IIS. es decir, si habilita la autenticación anónima y la suplantación ASP.NET, ambos pueden causar el error también.

90

Al agregar <validation validateIntegratedModeConfiguration="false"/> se aborda el síntoma, pero no es apropiado para todas las circunstancias. Después de haber tratado este tema varias veces, espero ayudar a otros no solo a superar el problema sino a entenderlo. (Que se convierte cada vez más importante como IIS 6 se desvanece en mitos y rumores.)

Antecedentes:

Este problema y la confusión que rodea comenzó con la introducción de ASP.NET 2.0 y IIS 7. IIS 6 tenían y continúa teniendo solo un modo de canalización, y es equivalente a lo que IIS 7+ llama modo "Clásico". El segundo, más nuevo y recomendado modo de canalización 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 se limita a una canalización de ASP.NET que no puede interactuar con la tubería de IIS. Básicamente se recibe una solicitud y si se ha informado 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. La importancia de esto se puede deducir de un ejemplo. Si tuviera que autorizar el acceso a archivos de imágenes estáticas, no podría hacerlo con un módulo de ASP.NET porque la canalización de IIS 6 manejará esas solicitudes por sí misma y ASP.NET nunca verá esas solicitudes porque nunca fueron entregadas. .* Por otro lado, autorizar a los usuarios a acceder a una página .ASPX como una solicitud de Foo.aspx es trivial incluso en IIS 6/Classic porque IIS siempre transfiere esas solicitudes a la interconexión de ASP.NET. En el modo Clásico, ASP.NET no sabe lo que no se ha dicho y hay muchas cosas que IIS 6/Classic puede no estar diciendo.

  • Se recomienda el modo integrado porque los controladores y módulos de ASP.NET pueden interactuar directamente con la interconexión de IIS. La canalización de IIS ya no entrega la solicitud a la interconexión de ASP.NET, ahora permite que el código de ASP.NET se enganche directamente a la interconexión de IIS y a todas las solicitudes que lo aciertan. Esto significa que un módulo de ASP.NET no sólo puede observar las solicitudes a archivos de imágenes estáticas, pero puede interceptar las peticiones y tomar medidas al negar el acceso, el registro de la solicitud, etc.

Superar el error:

  1. Si está ejecutando una aplicación anterior que se creó originalmente para IIS 6, quizás la haya movido a un nuevo servidor, no puede haber absolutamente nada de malo en ejecutar el grupo de aplicaciones de esa aplicación en el modo Clásico. Adelante, no tienes que sentirte mal.
  2. Por otra parte, tal vez le está dando a su aplicación un lavado de cara o estuvo traqueteando hasta que instaló una biblioteca de terceros a través de NuGet, manualmente o por otros medios. En ese caso, es completamente posible httpHandlers o httpModules se han agregado a system.web. El resultado es el error que está viendo porque validateIntegratedModeConfiguration predetermina true. Ahora usted tiene dos opciones:

    1. Retire la httpHandlershttpModules y elementos de system.web. Hay un par de resultados posibles de esto:
      • Todo funciona bien, un resultado común;
      • Su aplicación continúa quejándose, puede haber un archivo web.config en la carpeta principal de la que está heredando, considere limpiar ese web.config también;
      • Te cansas de eliminar httpHandlers y httpModules que los paquetes NuGet siguen agregando a system.web, haz lo que necesites.
  3. Si estas opciones no funcionan o son más problemas de lo que vale entonces yo no voy a decir que no se puede establecer validateIntegratedModeConfiguration a false, pero al menos que sepa lo que' rehacer y por qué es importante.

Buena lee:

* Por supuesto, hay maneras de conseguir todo tipo de cosas extrañas en la tubería de ASP.NET IIS 6/Classic a través de conjuros como wildcard mappings, si te gusta ese tipo de cosas.

+0

+1 única solución no es una respuesta a su problema sino una solución con una explicación que es la respuesta perfecta. Qué es y por qué tenemos que cambiar esto, estas preguntas de respuesta dadas por @Jeremy cook responden. –

+0

Esta explicación me llevó a solucionar el problema de un sitio de prueba pequeño alojado en IIS 7.5 en modo integrado. Cuando creé un nuevo proyecto de MVC, agregué el httpModule, Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule en mi Web.config. Esto se debe a que dejé marcada la opción "Agregar insights de la aplicación al proyecto" al crear un nuevo proyecto de aplicación web de ASP.NET. Cuando eliminé httpModule de Web.config, el sitio funcionó sin el error. Configurar validateIntegratedModeConfiguration en falso funcionó, pero eso fue solo un enfoque bandaid. – iCode

+1

Se ha detectado una configuración de ASP.NET que no se aplica en el modo de canalización gestionada integrada. Este es otro mensaje de error de Microsoft inútil. ASP.net tiene miles de configuraciones pero Microsoft no pensó incluir el que causaba el error en el texto de error. MS está siendo dirigido por marketeers en lugar de ingenieros, por lo que no se espera que las cosas mejoren en el corto plazo. :-( –

2

Esto funcionó para mí:

  1. eliminar el sitio creado originalmente.
  2. recrear el sitio en IIS
  3. solución limpia
  4. solución Construir

parece que algo salió al sur cuando originalmente creó el sitio. Odio las soluciones que son similares a "Reiniciar su máquina, luego vuelva a instalar Windows" sin saber qué causó el error. Pero, esto funcionó para mí. Rápido y simple. Espero que ayude a alguien más.

-2

El método para local es el error

image

+3

No modifique esta configuración a menos que sepa realmente lo que está haciendo. Esta casi nunca es la respuesta correcta. – NickG

1

me encontré con este problema e inspirado por la respuesta de @Jeremy Cook, poco la bala para averiguar qué diablos hizo IIS 7 modo integrado a no como mi web.config. Aquí está mi escenario:

  1. Web API (versión 4.0.030506.0 también conocido como el viejo)
  2. .NET 4.0
  3. atributo de direccionamiento 3.5.6 para la Web API [spoiler alert: era este chico]

Quería usar el enrutamiento de atributos en un proyecto que (desafortunadamente) tenía que usar .NET 4 y por lo tanto no podía usar Web API 2.2 (que necesita .NET 4.5). El paquete NuGet significado bien añadió esta sección en la sección <system.web>:

<system.web> 
<httpHandlers> 
     <add verb="*" path="routes.axd" type="AttributeRouting.Web.Logging.LogRoutesHandler, AttributeRouting.Web" /> 
    </httpHandlers> 
</system.web> 

[Yo digo bien intencionado, ya que se requiere esta parte en versiones anteriores de IIS]

retirar esta sección me llevó más allá del HTTP 500.23 !!

Resumen: I segundas palabras de Jeremy que es importante entender por qué las cosas no funcionan en lugar de sólo "enmascarar el síntoma". Incluso si usted tiene que enmascarar el síntoma, usted sabe lo que está haciendo (y por qué) :-)

+0

Gracias. Agregué AttributeRouting, incluido el paquete NuGet de complemento Api Controller, y eliminé la sección que indicado desde web.config resuelto el problema. Sin embargo, estoy un poco preocupado porque mi aplicación web MVC ya estaba usando .NET Framework 4.5. –

+2

@RobertOschler si está en .NET 4.5, ya tiene un enrutamiento de atributos integrado en AFAIK - usted no debería necesitar este NuGet? – dotnetguy

+0

Gracias y basura. Hoy pasaron unas horas obteniendo el paquete AttributeRouting ejecutando NuGet. Lo saqué y deshice todo el código "arreglos" que agregué para hacerlo funcionar, y lo sustituí por el atributo Web API 2 Route() para el atributo GET(). Funcionó muy bien. Realmente necesitamos un sistema experto en estos días solo para ayudarnos con todos estos paquetes. –

1

En su web.config asegurarse de que existen estas claves:

<configuration> 
    <system.webServer> 
     <validation validateIntegratedModeConfiguration="false"/> 
    </system.webServer> 
</configuration> 

, así como comprobar la Asp.Net Impresonation = Desactivar En IIS Site Authetication

0

En mi caso me faltaba la carpeta dll in bin a la que se hizo referencia en el archivo web.config. Compruebe si estaba usando alguna configuración en web.config pero en realidad no tiene dll.

Gracias

Cuestiones relacionadas