Compartir a través de


Configuración de aplicaciones Azure

Todo desarrollador de .NET sabe que el lugar en donde debe ponerse la configuración de las aplicaciones es en un archivo app.config o web.config. Este mecanismo funciona perfectamente en Windows Azure siempre y cuando no se necesite cambiar los valores de los parámetros de configuración.

El motivo es que Windows Azure no permite cambiar la configuración almacenada en un archivo .config una vez lo se ha desplegado a la nube. La única opción para reconfigurar la aplicación sería volverla a desplegar. Evidentemente esto no es operativo y hace que este mecanismo de configuración tradicional no sea todo lo útil que debiera en aplicaciones para Azure.

Así, Windows Azure define un mecanismo propio de configuración basado en dos tipos de archivos:

Archivo de definición de servicio

El archivo de definición del servicio (.csdef), especifica los 'endpoints' del servicio, y establece la declaración de los parámetros de configuración del mismo. Este archivo no puede ser cambiado una vez el servicio ha sido desplegado. Este es el aspecto típico de este archivo.

<?xml version="1.0"?>
<ServiceDefinition name="CloudService" xmlns="https://schemas.microsoft.com/
ServiceHosting 2008/10/ServiceDefinition">
<WorkerRole name="WorkerRole" enableNativeCodeExecution="false">
<ConfigurationSettings>
<Setting name="message"/>
</ConfigurationSettings>
</WorkerRole>
</ServiceDefinition>

El archivo de configuración del servicio

Del ejemplo anterior se deduce que el archivo de definición anterior declara un ajuste o parámetro cuyo nombre es message. Se puede establecer el valor de este parámetro en el archivo de configuración del servicio (.cscfg).

El archivo de configuración del servicio, como se puede deducir de su nombre, permite especificar las opciones de configuración para uno o más roles. Este archivo puede ser dinámicamente modificado una vez la aplicación está desplegada en Windows Azure. A continuación se puede ver el aspecto de un archivo .cscfg:

<?xml version="1.0"?> 
<ServiceConfiguration serviceName="CloudService" xmlns="http://
schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
<Role name="WorkerRole1">
<Instances count="1" />
<ConfigurationSettings>
<Setting name="message" value="Hola, Windows Azure" />
</ConfigurationSettings>
</Role>
</ServiceConfiguration>

En este archivo .cscfg, se puede ver el valor de configuración que se ha dado para el parámetro del servicio message que se ha declarado en el archivo de definición del servicio.

Una vez está establecida la configuración del servicio el siguiente paso es leerla. Para ello, el SDK de Windows Azure cuenta con la clase RoleEnviroment. Esta clase nos proporciona un método, GetConfigurationSettingValue que nos permite pasarle el nombre del parámetro de configuración a leer (message en el ejemplo) y devuelve su valor como una cadena.

if (RoleEnviroment.IsAvilable) 
{
string message = RoleEnvironment.GetConfigurationSettingValue("message");
}

Nota: Debemos asegurarnos de que la aplicación está ejecutándose dentro del Fabric para poder invocar a los métodos de RoleEnviroment. Sino recibiríamos una excepción.

Para más comodidad también es posible, desde las propiedades de rol, usar el editor de propiedades que proporcionan la extensiones de Azure para Visual Studio.