Sé que esta pregunta es antigua, pero quería publicar una respuesta basada en el estado actual de las cosas en el mundo ASP.NET \ IIS combinado con mi experiencia en el mundo real.
Recientemente he encabezado un proyecto en mi empresa en el que quería consolidar y gestionar todas las configuraciones de configuración de la aplicación & ConnectionStrings en nuestros archivos web.config en un lugar central. Quería seguir un enfoque donde nuestras configuraciones de configuración se almacenan en ZooKeeper debido a que los proyectos maduran & estabilidad. Sin mencionar el hecho de que ZooKeeper es, por diseño, una configuración & aplicación de administración de clúster.
Los objetivos del proyecto eran muy simples;
- get ASP.NET para comunicarse con ZooKeeper
- en Global.asax, Application_Start - tire de configuración web.config de ZooKeeper.
Al pasar la parte técnica de obtener ASP.NET para hablar con ZooKeeper, encontré rápidamente y choqué contra una pared con el siguiente código;
ConfigurationManager.AppSettings.Add(key_name, data_value)
Esa declaración tiene el sentido más lógico ya que quería AGREGAR nuevas configuraciones a la colección appSettings. Sin embargo, como se mencionó en el cartel original (y muchos otros), esta llamada de código devuelve un error que indica que la colección es de solo lectura.
Después de investigar un poco y ver las diferentes maneras locas en que las personas trabajaban en torno a este problema, me sentí muy desanimado. En lugar de darme por vencido o conformarme con lo que parecía ser un escenario menos que ideal, decidí indagar y ver si me estaba perdiendo algo.
Con un poco de prueba y error, encontré que el siguiente código haría exactamente lo que quería;
ConfigurationManager.AppSettings.Set(key_name, data_value)
Usando esta línea de código, ahora soy capaz de cargar los 85 AppSettings teclas de ZooKeeper en mi Application_Start.
En cuanto a las declaraciones generales acerca de los cambios en web.config que activan los reciclados de IIS, edité las siguientes configuraciones de la apppool para supervisar la situación detrás de las escenas;
appPool-->Advanced Settings-->Recycling-->Disable Recycling for Configuration Changes = False
appPool-->Advanced Settings-->Recycling-->Generate Recycle Event Log Entry-->[For Each Setting] = True
Con esa combinación de ajustes, si este proceso fueron para causar un reciclaje AppPool, una entrada de registro de sucesos debería haber ser grabada, que no lo era.
Esto me lleva a concluir que es posible, y de hecho seguro, cargar una configuración de aplicaciones desde un medio de almacenamiento centralizado.
Debo mencionar que estoy usando IIS7.5 en Windows 7. El código se implementará en IIS8 en Win2012. Si algo en relación con esta respuesta cambia, actualizaré esta respuesta en consecuencia.
Aquí es una un buen enlace que bien explica sobre la modificación de la web.config a t tiempo de ejecución y su impacto en la aplicación. [http://aspdotnethacker.blogspot.com/2010/05/modify-webconfig-file-at-runtime.html](http://aspdotnethacker.blogspot.com/2010/05/modify-webconfig-file-at- runtime.html) –
@ user330004 el enlace que proporcionó ya no es válido – McArthey
Solo lleva unos segundos encontrar la [versión archivada] (http://web.archive.org/web/20111217082254/http://aspdotnethacker. blogspot.com/2010/05/modify-webconfig-file-at-runtime.html)! – stuartd