Pregunta

Este problema nos ha dejado a varios de nosotros en la oficina. Todos somos nuevos en la implementación de aplicaciones ASP.NET en una granja de servidores web, y no tengo ideas.

Tenemos una granja de servidores web, y la aplicación se copia en todos ellos. Sin embargo, estamos teniendo un problema ...

Se está lanzando una excepción al intentar obtener la configuración de appSettings . Tras una investigación más profunda, resulta que el nodo no está usando el Web.Config local, sino que recae en el Web.Config en la carpeta del marco .NET (tenemos Esto se demostró agregando claves allí, que aparecen en una página de prueba).

Debo estar perdiendo algo, porque mi entendimiento es que mientras el archivo esté allí, IIS debería usar eso. ¡Uno de los servidores parece funcionar bien!

Aquí hay una lista de lo que hemos confirmado:

  • El archivo de configuración está en el directorio de la aplicación.
  • El contenido de dicho archivo es correcto.
  • Al ver el archivo desde IIS > Sitio > Propiedades > ASP.NET > Editar configuración se muestra el contenido correcto.

Sin embargo, en tiempo de ejecución, el archivo que se utiliza es el global ( windows \ ms .net \ framework \ v2 \ config \ web.config ).

¿Alguien tiene alguna sugerencia en cuanto a lo que puede salir mal? ¡Aprecio toda la ayuda que puedo obtener!

Gracias.

Rob

¿Fue útil?

Solución 3

En primer lugar, muchas gracias a los muchachos que respondieron, ¡aprecio la ayuda!

Sólo una actualización sobre este problema. Fue una dura!

Resulta que no había nada de malo en el código o la configuración.

Parece que algo extraño estaba sucediendo con la granja de servidores (que no tengo absolutamente ningún control ni acceso). El administrador del sistema reconstruyó la granja de servidores, volvió a implementar la solución y todo funcionó bien.

Supongo que nunca sabremos lo que estaba mal, ¡pero al menos sabemos que no fue un problema de desarrollo!

Gracias de nuevo, Rob

Otros consejos

Esta es la jerarquía para la configuración de ASP.NET. Tal vez esto podría ayudar a comprender qué configuraciones se sobrescriben entre sí.

Servidor

Machine.config: el archivo Machine.config contiene el esquema ASP.NET para todas las aplicaciones web en el servidor. Este archivo se encuentra en la parte superior de la jerarquía de combinación de configuración.

Web raíz

Web.config: el archivo Web.config para el servidor se almacena en el mismo directorio que el archivo Machine.config y contiene valores predeterminados para la mayoría de las secciones de configuración de system.web. En el tiempo de ejecución, este archivo se fusiona en segundo lugar desde la parte superior en la jerarquía de configuración.

sitio web

Web.config: el archivo Web.config para un sitio web específico contiene configuraciones que se aplican al sitio web y se heredan hacia abajo a través de todas las aplicaciones y subdirectorios de ASP.NET del sitio.

Directorio raíz de la aplicación ASP.NET

Web.config: El archivo Web.config para una aplicación ASP.NET específica se encuentra en el directorio raíz de la aplicación y contiene configuraciones que se aplican a la aplicación web y heredan hacia abajo a través de todos los subdirectorios en su rama.

subdirectorio de aplicación ASP.NET

Web.config: el archivo Web.config para un subdirectorio de aplicación contiene configuraciones que se aplican a este subdirectorio y se heredan hacia abajo a través de todos los subdirectorios en su rama.

Directorio de aplicaciones del cliente

ApplicationName.config: el archivo ApplicationName.config contiene la configuración de una aplicación cliente de Windows (no una aplicación web).


Comprender qué archivos y carpetas ASP.NET se heredan a través de carpetas y aplicaciones es muy importante para el desarrollo y la solución de problemas.

Aquí hay un breve resumen:

  • los archivos web.config se heredan hasta el final del árbol, más allá de todos los límites de la aplicación.
  • global.asax solo vive dentro de su aplicación
  • / bin y las / app_ {carpetas} solo viven dentro de su aplicación

Por lo tanto, esto significa que cualquier cosa establecida en el archivo raíz web.config heredará todo el sitio, incluso si algunas carpetas están marcadas como aplicaciones.

Donde esto se complica es si el archivo web.config tiene referencias a ensamblajes pero las sub-aplicaciones no tienen esos ensamblajes. Por ejemplo, supongamos que tiene un módulo HTTP configurado en la raíz del sitio y referenciado desde el archivo web.config del sitio. Si tiene una sub-aplicación llamada / subcarpeta que está marcada como una aplicación, entonces / subcarpeta intentará cargar el controlador HTTP desde / subcarpeta / bin. Como no existe, se lanzará un error.

Hay varias maneras de evitar esto. Probablemente, el más limpio si no se necesita el controlador HTTP en / subcarpeta es "eliminando" la referencia agregando una cláusula en el archivo /subfolder/web.config. Puedes hacer esto con Este es un ejemplo de cómo eliminar un módulo HTTP en una subcarpeta:

<httpModules>
  <remove name="ErrorLog"/>
</httpModules>

Aquí se muestra el aspecto del sitio web.config:

<httpModules>
      <add name="ErrorLog"  type="GotDotNet.Elmah.ErrorLogModule, GotDotNet.Elmah, Version=1.0.5527.0, Culture=neutral, PublicKeyToken=978d5e1bd64b33e5" />
</httpModules>print("code sample");

Por lo que dices en los comentarios, sugiero que vayas con " Prueba y error " ;.

¿Qué sucede si inserta una entrada errónea por propósito? ¿La aplicación falla o no afecta nada?

Intente copiar el contenido y luego elimine y vuelva a crear ese archivo desde cero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top