RSS 2.0 Atom 1.0 CDF  
JASoft.org - Fraccionamiento de las secciones de configuración en web.config
El blog de José Manuel Alarcón Aguín. Programación .NET y mucho más...
 

Aunque esto es algo muy poco conocido por los programadores de ASP.NET, es posible mover secciones completas de la configuración a sus propios archivos independientes de web.config. Ello se consigue usando el atributo configSource en la sección correspondiente. Por ejemplo, podemos escribir en el nodo ConnectionStrings lo siguiente:

<connectionStrings configSource="conexiones.config"/> 

y ahora tener un archivo independiente llamado conexiones.config que contenga esa sección completa:

<connectionStrings> 
<add name="Clientes" connectionString="..."/>
<add name="Principal" connectionString="..."/> </connectionStrings>

Esto puede resultar útil en muchas ocasiones. Por ejemplo, podemos cambiar más fácilmente entre los ajustes de producción y de desarrollo, manteniendo en común el resto de la configuración. Otro motivo sería proteger de manera especial esa sección y otorgarle sus propios permisos de lectura y escritura.

Uno de los motivos más importantes sería el evitar que se reinicie la aplicación ante determinados cambios. Por ejemplo si sacamos a un archivo la sección AppSettings de ajustes personales, a lo mejor no necesitamos que se reinicie la aplicación sólo modificar algo en ella. Al separarla a su propio archivo conseguiremos este efecto ya que cambia el archivo externo pero no el web.config, y aunque modifiquemos algo en él no se fuerza el reinicio.

Ello es debido a que en machine.config (la configuración principal del equipo) la sección AppSettings está marcada con el atributo restartOnExternalChanges="false". Hay otras secciones que tiene este atributo a true por lo que si se cambia el archivo externo sí que provocaremos un reinicio.

Extraido del curso de preparación del examen 70-528 de desarrollo Web de campusMVP.

Tuesday, April 24, 2007 9:44:37 PM (Hora de verano romance, UTC+02:00)  #    Comments [3]   ASP.NET  |  Trackback
Wednesday, April 25, 2007 8:58:00 AM (Hora de verano romance, UTC+02:00)
Me imagino que no te refieres a nodos propios dentro de AppSettings sino a secciones propias definidas con una clase propia ¿verdad?

Pues lo cierto es que no lo he probado, pero a priori no debería haber problema pero tendrías que "currartelo" tú mismo ya que esas secciones se definen con una clase propia que hereda de IConfigurationSectionHandler. En el constructor de la misma .NET le pasa entre otras cosas el nodo XML (clase XMLNode) dentro del archivo de configuración con los contenidos de éste. Así que es tu responsabilidad leer si existe el atributo configSource (o como le queiras llamar tú, aunque yo dejaría este mismo nombre) y abrir el archivo correspondiente en lugar de procesar directamente el nodo actual que se te pasa...

Si lo pruebas no dejes de comentar el resultado aquí ¿ok?

Saludos

JM.
Thursday, September 25, 2008 2:14:12 PM (Hora de verano romance, UTC+02:00)
Hola, en relación a este tema, entiendo que cualquier modificación al fichero web.config implica que se "reinicie" la aplicación web y no hay manera de evitarlo. Sólo se evitaría en ficheros externos a las secciones que tengan el atributo restartOnExternalChanges="false", pero en el propio web.config imposible.

Este código reiniciará siempre la aplicación, a no ser que la sección AppSettings esté en un fichero externo y se tenga restartOnExternalChanges="false"...

public void Modify(string key, string value)
{
Configuration configuration = WebConfigurationManager.OpenWebConfiguration("~");
AppSettingsSection appSettingsSection = (AppSettingsSection)configuration.GetSection("appSettings");
if (appSettingsSection != null)
{
appSettingsSection.Settings[key].Value = value;
config.Save();
}
}

Saludos cordiales.


espinete
Thursday, September 25, 2008 5:32:21 PM (Hora de verano romance, UTC+02:00)
Gracias por la aportación, Espinete
Name
E-mail
Home page

Comment (Some html is allowed: a@href@title, b, i, strike, strong, u) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Enter the code shown (prevents robots):

Live Comment Preview
Copyright © 2008 José Manuel Alarcón Aguín. All rights reserved.