Pregunta

Estoy buscando formas de hacer que nuestra aplicación sea más extensible y más fácil de manipular sin tener que modificar el archivo web.config (o, en nuestro caso, los archivos application.config, que contienen el nodo appsettings).

Una forma en la que he pensado es mantener la configuración de la aplicación en la tabla de base de datos que tiene una dependencia sqlcached. Esto significa que:

  • Cada vez que se cambia una configuración en la base de datos, se invalida la memoria caché y se recupera la configuración, por lo que se actualiza la aplicación en tiempo real sin tener que alterar los archivos y reiniciar toda la aplicación.
  • Podemos crear una herramienta personalizada que nos permita modificar la configuración.

Las desventajas que veo son que esto puede causar serios problemas lógicos, ya que, si tiene algo que verifica una aparición al inicio de un proceso, y luego cambia a la mitad, podría terminar alterando involuntariamente el proceso. flujo, ya que se anula el requisito de un reinicio completo de la aplicación.

¿Hay alguna forma de evitar esto?

¿Existe una mejor manera de administrar las aplicaciones, de modo que pueda modificarlas sobre la marcha de forma remota para uno, varios o todos los servidores de una sola vez?

¿Fue útil?

Solución

Creo que has atrapado a los dos jugadores principales:

  • O bien, tiene acceso al sistema de archivos y pone todas sus configuraciones en una gran cantidad de archivos * .config allí

O:

  • no tiene acceso (o solo tiene un acceso muy limitado) al sistema de archivos del servidor y, por lo tanto, es mejor que coloque los ajustes de configuración y las preferencias del usuario en una base de datos, básicamente dejando solo la cadena de conexión al archivo de configuración. en el disco

Ambos enfoques tienen sus pros y sus contras. He intentado durante mucho tiempo encontrar una forma de " materializar " una sección de configuración de un campo de base de datos, de modo que básicamente podría usar el XML de configuración, pero almacenado en un campo de base de datos. Desafortunadamente, todo el sistema de configuración de .NET 2.0 está muy " bloqueado " y solo asume que los datos provendrán de los archivos, no hay manera de conectarlos, por ejemplo. un proveedor de base de datos para permitir que el sistema de configuración lea su contenido desde un campo de base de datos :-( ¡Realmente es muy malo!

El único otro enfoque que he visto es un " ConfigurationService " en la aplicación de ejemplo StockTrader 2.0 proporcionada por Microsoft, pero para mis necesidades , se sentía como una exageración y como un subsistema realmente complejo, muy pesado.

Otros consejos

Usted podría usar SQLite, que será una base de datos independiente en un solo archivo. ¿Dos pájaros de un tiro?

Si hace referencia a un archivo de configuración externo que contiene los ajustes de la aplicación (dejando todo lo demás en la aplicación normal .config), entonces creo que editarlo solo vuelve a cargar esa configuración, no obliga a que se reinicie toda la aplicación.

Hay una pregunta similar sobre el tema aquí: Archivos de aplicación.config (web.config) anidados

WRT: el problema de los valores cambian en medio de la ejecución del programa. Supongo que podría almacenar en caché localmente los valores y generar un evento cuando cambian, lo que permite que las rutinas alcancen un punto adecuado antes de usar los valores actualizados.

Creo que en asp.net conseguimos esto de forma gratuita porque cada ciclo de vida de la página es distinto, por lo que el valor se aplica simplemente a las nuevas solicitudes de página, no en medio de una ejecución.

Editar: Un poco de información adicional:

Los cambios de configuración provocan un reinicio del dominio de la aplicación

De MSDN :

  

Los cambios en la configuración de los archivos Web.config hacen que el dominio de la aplicación se reinicie indirectamente. Este comportamiento se produce por diseño. Opcionalmente, puede usar el atributo configSource para hacer referencia a archivos de configuración externos que no causan un reinicio cuando se realiza un cambio. Para obtener más información, consulte configSource en Atributos generales heredados por los elementos de la sección.

Más información sobre el clase del Administrador de configuración en el System.Configuration namespace que se podría usar para modificar el archivos de configuración programáticamente (es decir, en una herramienta personalizada, si se pueden proporcionar permisos de lectura de disco relevantes) Si sigue utilizando las clases de configuración integradas, creo que cambiar las configuraciones externas no provocará el reinicio de la aplicación, pero generaría eventos (como propiedad cambiada ) que podría manejar, para asegurarse de que su código no se vea afectado al cambiar la configuración.

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