6

Tengo una aplicación ASP.NET MVC 3 ejecutándose en Azure. También usa SQL Azure para una base de datos.Administración de varios archivos web.config para una aplicación MVC3 Azure

Quiero implementar esta aplicación en diferentes instancias (Pruebas, demostraciones, producciones múltiples) y cada instancia necesita su propia base de datos SQL.

Sé que con la nueva actualización de herramientas de Azure, puede administrar configuraciones de servicios múltiples. Esto es genial y casi soluciona mi problema. El único problema es con las cadenas de conexión SQL en los archivos web.config en la parte MVC del proyecto.

Quiero la misma funcionalidad exacta que con la característica Configuraciones de servicios múltiples, pero para hacerlo para las cadenas de conexión de SQL.

Gracias por su ayuda !!

Respuesta

5

.Net configuration transformations debería hacer el trabajo. Al igual que Azure Service Configurations, se crea un archivo Web.ConfigurationName.config por separado para cada instancia en la que desee implementar. La construcción de la solución con la Configuración adecuada (Pruebas, Demostración, etc.) insertará los valores de configuración de "instancia" correctos en Web.config.

+0

Este es el enfoque que uso y funciona muy bien. –

+0

¿Cómo se puede honestamente recomendar la escritura de transformaciones XLS en los archivos de configuración de uno? Los archivos de configuración ya son lo suficientemente grandes como lo son. –

3

Generalmente mantengo mis cadenas de conexión de SQL en los archivos ServiceDefinition. *. Cscfg. De esta forma, obtendrá la ventaja adicional de poder editarlos en instancias en ejecución, lo cual es ideal para realizar intercambios VIP.

Si está probando fuera del emulador de máquinas de desarrollo, es bastante fácil de escribir una abstracción sobre config:

class AzureConfig : IConfig 
{ 
    public string GetConnectionString(string name) 
    { 
    get 
    { 
     return RoleEnvironment.GetConfigurationSettingsValue(name); 
    } 
    } 
} 

class OnPremConfig : IConfig 
{ 
    public string GetConnectionString(string name) 
    { 
    get 
    { 
     return ConfigurationManager.ConnectionStrings[name].ConnectionString; 
    } 
    } 
} 

luego configurar el contenedor IoC para comprobar RoleEnvironment.IsAvailable y devolver el tipo relevante.

Cuestiones relacionadas