2011-01-19 13 views
33

Tengo un proyecto de Azure (Azure 1.3) en VS2010. Hay 2 webroles, un proyecto de página web y un proyecto WCF. En el modo de depuración, quiero que el proyecto web use un web.config para el entorno DEV, y cuando se debe publicar el web.config para PROD.Azure web.config por entorno

¿Cuál es la mejor manera de hacerlo?

Actualmente tengo problemas cuando uso un Web.Debug.config con la transformación XSLT. Parece que no funciona en Azure ...

+0

Este [SO respuesta] (http://stackoverflow.com/questions/4190984/azure-connection-string-best-practices/5185380#5185380) da el número mínimo de pasos necesarios para ajustar las transformadas de configuración Azure. –

Respuesta

9

Resuelva su problema de otra manera. Piense en el hecho de que web.config siempre es estático y nunca cambia cuando se trabaja con Azure. Lo que sí cambia es tu ServiceConfiguration.cscfg.

Lo que hemos hecho es crear nuestro propio proveedor de configuración que comprueba primero ServiceConfiguration.cscfg y luego recurre a la web.config si la cadena de configuración/conexión no está allí. Esto nos permite ejecutar servidores en IIS/WCF directamente durante el desarrollo y luego tener diferentes configuraciones cuando se implementan en Azure. Hay algunas circunstancias donde tiene que usar web.config (sí, me refiero a WCF aquí) y en esos casos debe escribir código y crear convenciones en lugar de almacenar todo en web.config. Tengo una publicación de blog donde muestro un ejemplo de cómo lo hice al tratar con WIF (Windows Identity Foundation) and Azure.

+1

Este es un buen consejo, especialmente cuando se tiene en cuenta el hecho de que puede cambiar las configuraciones de la nube mientras se ejecuta la instancia, a diferencia de las configuraciones web. Habiendo dicho eso, también utilizo las transformaciones de configuración en las configuraciones web, lo que ahorra problemas con cosas que son difíciles de mover desde la web.config. – knightpfhor

+0

@ aaron-weiker: este es un gran consejo para cosas como los juegos de aplicaciones, pero parece que no funciona, por ejemplo, si configura sus puntos finales de una manera diferente para entornos de prod/dev. Mientras lo sepa, no es posible configurar enlaces/puntos finales a través de * .cscfg. Pero tal vez estoy equivocado. –

+0

@NikitaG. Correcto, no puedes cambiar enlaces en el tiempo de ejecución. Los enlaces se configuran como parte del paquete en sí y nunca cambian. Si necesita algo dinámico, deberá agregar todos los puertos posibles en la configuración de su endpoint y luego, en tiempo de ejecución, elegir el que corresponda. No es que crea que sea una buena idea, pero es una forma de hacer que las cosas sean un poco más dinámicas. –

0

Otra posible solución es tener dos proyectos de CloudService, cada uno con ServiceConfiguration.cscfg (dev/prod) específico. Desarrolle usando Dev, pero implemente Prod.

+0

Esto es correcto, pero igual tendrías que desarrollar algo que mirara las configuraciones de la nube en lugar de la web.config como señaló Aaron. – knightpfhor

2

Me gusta esta pregunta!

Para roles de trabajo, he resuelto este problema mediante la detección del entorno en tiempo de ejecución y el lanzamiento de mi 'aplicación' en un nuevo dominio de aplicación con una configuración personalizada:

  • bot.cloud.config
  • bot.dev .config
  • bot.win.config

Esto es increíblemente eficiente !

me gustaría hacer lo mismo con los proyectos web, porque el uso de la configuración específica Azure es un montón de problemas:

  • Tanto configuración no están en el mismo lugar, lo cual es mucho tiempo al depurar
  • usted tiene que aprender una nueva forma de escribir algo que deberán ser llenados estándar
  • en algún momento usted se preguntará si la aplicación falled de nuevo en web.config debido a un error de sintaxis estúpida

Todavía estoy buscando la manera correcta de hacerlo, like in this post

3

Estoy de acuerdo con Mose, ¡excelente pregunta!

Visual Studio 2010 incluye una solución para este tipo de problema, web.config transforma. Si nos fijamos en su rol web, notará que incluye Web.Debug.config y Web.Release.config junto con el tradicional web.config. Estos archivos se usan para transformar web.config durante la implementación.

El ejemplo canónico es "Necesito diferentes cadenas de conexión de base de datos para el desarrollo y lanzamiento" pero también se adapta a su situación.

Hay una excelente entrada de blog del Visual Web Developer equipo que se explica cómo utilizar esta función (no se moleste con la documentación de MSDN, yo sé cómo funciona y todavía no entiendo la documentación). Salida http://blogs.msdn.com/b/webdevtools/archive/2009/05/04/web-deployment-web-config-transformation.aspx

+0

Como dijo correctamente Aaron, el web.config (o las derivadas de él .debug.config o .release.config) son 'estáticos' en Azure. Así que quiero saber si estos mecanismos también se aplican para la configuración de servicio .cscfg ...... –

+0

No estoy seguro, pero esto podría ser lo que está buscando: http://blog.alexlambert.com/2010 /05/using-visual-studio-configuration.html –

+0

Esta es una solución similar con un poco más de detalle: http://blogs.msdn.com/b/tomholl/archive/2011/02/23/using-msbuild- to-deploy-to-multiple-windows-azure-environments.aspx –

0

cuestiones Actualmente me estoy enfrentando al utilizar un Web.Debug.config con transformar XSLT. Parece que no funciona en Azure ...

Depende de si desea que funcione en su máquina local o en una integración continua.

  • Para el máquina local Traté de responder aquí: https://stackoverflow.com/a/9393533/182371
  • Para el integración continua es aún más fácil. Cuando construya desde la línea de comando especificando el valor de la propiedad de Configuración, sus configuraciones serán transformadas (sin importar lo que haga cuando construya dentro de VS). Por lo tanto, especificar adecuadamente las configuraciones de compilación tanto para la nube como para el proyecto web le dará la salida correcta en función de los parámetros de compilación.
Cuestiones relacionadas