Pregunta

Tengo dificultades con la administración de configuración de una aplicación ASP.Net para desplegar para diferentes clientes. El volumen total de los diferentes ajustes que deben haciendo girar ocupa grandes cantidades de tiempo, y los métodos de configuración actuales son demasiado complicadas para que podamos empujar esta responsabilidad a los socios de apoyo.

¿Alguna sugerencia para mejores métodos para manejar este o buenas fuentes de información para la investigación?

¿Cómo se hacen las cosas en la actualidad:

  • Varios archivos de configuración XML que se hace referencia en Web.Config, por ejemplo un AppSettings.xml.
  • Configuraciones para sitios específicos se mantienen en los archivos de configuración duplicados.
  • Los archivos de texto que contienen listas de datos específicos al sitio
  • En algunos casos, una sola vez manual de cambios a la base de datos
  • C # configuración para Windsor COI.

Las cuestiones específicas que estamos teniendo:

  • Los diferentes sitios con diferentes características habilitadas, diferentes servicios externos que tiene que hablar con diferentes y reglas de negocio.
  • Los diferentes tipos de implementación (en vivo, prueba, capacitación)
  • cambiar claves de configuración a través de versiones (se añaden, quitar), lo que significa que tenemos que actualizar todos los archivos duplicados
  • Todavía tenemos que ser capaces de teclas alter mientras se ejecuta la aplicación

Nuestros pensamientos actuales sobre cómo podemos abordar esto son:

  • Mover la configuración en código compilado dinámicamente (posiblemente Boo, Binsor o JavaScript)
  • tienen alguna forma de diffing / fusión de configuración: combinar una configuración por defecto con un / config formación en vivo / prueba y un sitio específico de configuración
¿Fue útil?

Solución

Como quiera que se vaya, creo que podría ser valiosa para tener la noción de una única "fuente de verdad" para su configuración.

La duplicación está bien, si es necesario proporcionar la configuración de algunos componentes en su propia forma especializada.

Sin embargo, para mantener su cordura creo que debería tratar de apuntar a tener un lugar donde se configura toda la configuración relativa a su aplicación, y luego un mecanismo bien definido para traducirlo en el interior de las entradas Web.config, y cualquier otra mecanismo de configuración que tienen que soportar.

En función del nivel de experiencia de sus socios de apoyo (si o no van a romper XML), imagino que también desee proporcionar una utilidad de interfaz gráfica de usuario para hacerles giran todas las perillas en esta "fuente de verdad" fichero de configuración , con "Aplicar" va a transformar en marcha / código de actualización para hacer los cambios necesarios en Web.config y amigos.

A continuación, para gestionar su configuración para diferentes sitios / clientes, que en teoría tiene alrededor de un fichero de configuración para administrar.

Nota: En ASP.NET 4.0 una configuración de tiempo de construcción transformar mecanismo estará disponible (ver http://blog.hmobius.com/post/2010/02/17/ASPNET-40-Part-4 -config-Transformación-Files.aspx ), lo que puede hacer esta tarea más fácil. Al parecer, se puede usar esto con algunos hacks para proyectos web que no (ver http://philbolduc.blogspot.com/2010/03/using-config-transforms-outside-web.html ).

Sin embargo, si es necesario realizar estos cambios en el tiempo de implementación, puede ser atrapado con la escritura de herramientas personalizadas para hacer esto, aunque parece que las transformadas XDT puede ser el camino a seguir para que, teniendo en cuenta que desea poder añadir / actualizar / Borrar de los artículos.

Otros consejos

Si el código de utilización de dichos elementos de configuración es el código a manejar / puede cambiar (y todos corriendo en el espacio de código administrado / C #) Me gustaría ver a portar las llamadas a métodos que consiguen ajustes a una llamada en un producto único como clase con al un método menos GetString () en él.

GetObject () puede ser muy útil (echa un vistazo a la serialización XML .Net cosas - los americanos lo escriben con una 'z': la serialización) ... útil para muchas cosas, pero también porque significa que puede empezar relacionados con el empaque elementos de configuración en entradas individuales en el almacén.

En lo que respecta utilizando un solo almacén (una tabla de base de datos con acceso en caché) o utilizar su nueva fachada configuración sólo para encapsular donde se almacenan los elementos de configuración - que depende de usted ... Yo prefiero fuertemente por una sola tienda para la implementación del producto configuración, ya que entonces siempre se sabe exactamente dónde buscar y dónde hacer cambios. Todas las referencias de servicios Web (WCF o de otra manera) se pueden Constucted y llamaron el uso de cadenas en tiempo de ejecución suministrados por ...:)

En términos de almacenamiento en caché de los valores para las llaves - Yo uso mi propio en la memoria caché (para aplicaciones más pequeñas), porque la sobrecarga en la pila es manejable ... cosas como Memcache podrían trabajar aquí (se accede almacén de configuración a través de TCP / en el en algún lugar de la red) ...

EDITAR Algo así como:

public class ConfigurationStore
{
    private static ConfigurationStore _instance = null;

    public static ConfigurationStore Instance {
        get {
        if(_instance == null)
        {
            _instance = new ConfigurationStore();
        }

        return _instance;
        }
    }

    public string GetValue(string key)
    {
        ....
    }

    public Object GetObject(string key)
    {
        ...
    }
}

Se puede considerar la búsqueda de secuencias de comandos para la automatización NAnt combinado con alguna utilidad .net costumbre de manipular las teclas de configuración.

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