Trabajar con URLs de varios entornos en Microsoft Azure

Una de las tareas que puede resultar más tediosa cuando trabajamos con diferentes entornos es el manejo de las URLs de cada uno de ellos. Cuando desarrollamos para el servicio Cloud Service de Microsoft Azure debemos tener en cuenta 3 posibles escenarios:

  1. Emulación en local: Cuando estamos desarrollando la aplicación, las URLs están compuestas por el host local y el puerto (por ejemplo, http://127.0.0.1:5812).
  2. Entorno de staging: Entorno de preproducción donde las URLs se regeneran con cada nuevo despligue./li>
  3. Entorno de producción: El paso final, donde se hace uso de el DNS proporcionado por la plataforma o el dominio externo que tengamos configurado.

En varias ocasiones he podido comprobar que los desarrolladores comentan y descomentan las URL dependiendo del entorno donde van a desplegar la solución, lo cual nos lleva a que, por equivocación o descuido, perdamos el tiempo con una subida donde las URLs están mal configuradas. Una posible solución sería utilizar un helper con el siguiente código:

var url = RoleEnvironment.GetConfigurationSettingValue("WebApiURL");

Estoy recuperando a través de RoleEnvironment.GetConfigurationSettingValue una cadena que se corresponde con una URL. Para que esta solución funcione correctamente, debemos modificar el archivo de configuración de los roles:

En el caso del modo Local apuntará al localhost de nuestra máquina:

Service Configuration Local

En el modo Cloud devolverá la cadena http://myserviceazure.cloudapp.net, correspondiente a producción:

Service Configuration Cloud Production

Si estamos trabajando con el entorno de staging, es posible recuperar el GUID aleatorio a través de la propiedad RoleEnvironment.DeploymentId.

03/07/2014 Actualización: En el siguiente post se muestra una forma de lidiar entre staging y producción: Actualizar el archivo ServiceConfiguration.cscfg ya desplegado y obtener una copia.

Espero que sea de utilidad.

¡Saludos!