2011-01-19 11 views
33

Possiedo un progetto di Azure (Azure 1.3) in VS2010. Esistono 2 webroles, un progetto di pagina Web e un progetto WCF. In modalità debug voglio che il progetto web utilizzi un web.config per l'ambiente DEV e che quando si pubblichi il web.config per PROD debba essere usato.Web.config di Azure per ambiente

Qual è il modo migliore per farlo?

Attualmente sto affrontando problemi quando si utilizza un Web.Debug.config con trasformazione XSLT. Non sembra funzionare in Azure ....

+0

Questa [SO risposta] (http://stackoverflow.com/questions/4190984/azure-connection-string-best-practices/5185380#5185380) indica il numero minimo di passaggi necessari per l'installazione delle trasformazioni di configurazione di Azure. –

risposta

9

Risolvi il tuo problema in un modo diverso. Pensa a web.config che è sempre statico e non cambia mai quando si lavora con Azure. Che cosa cambia è il tuo ServiceConfiguration.cscfg.

Quello che abbiamo fatto è stato creato dal nostro provider di configurazione che prima controlla ServiceConfiguration.cscfg e poi torna a web.config se la stringa di impostazione/connessione non è lì. Ciò ci consente di eseguire i server in IIS/WCF direttamente durante lo sviluppo e di avere impostazioni diverse durante la distribuzione in Azure. Ci sono alcune circostanze in cui devi usare web.config (sì, mi riferisco a WCF qui) e in quei casi devi scrivere codice e creare una convenzione invece di archiviare tutto in web.config. Ho un post sul blog in cui mostro un esempio di come l'ho fatto quando ho a che fare con WIF (Windows Identity Foundation) and Azure.

+1

Questo è un buon consiglio in particolare quando si tiene conto del fatto che è possibile modificare le configurazioni del cloud mentre l'istanza è in esecuzione, diversamente dalle configurazioni web. Detto questo, uso anche le trasformazioni di config sui web configs che salvano i problemi con cose difficili da spostare da web.config. – knightpfhor

+0

@ aaron-weiker: questo è un ottimo consiglio per cose come le app, ma non sembra funzionare ad esempio se si configurano gli endpoint in modo diverso per gli ambienti prod/dev. Finché so, non è possibile configurare binding/endpoint tramite * .cscfg. Ma forse mi sbaglio. –

+0

@NikitaG. Correggere, non è possibile modificare i binding in fase di esecuzione. I binding sono configurati come parte del pacchetto stesso e non cambiano mai. Se hai bisogno di qualcosa di dinamico, dovresti aggiungere tutte le porte possibili alla configurazione del tuo endpoint e poi al runtime scegliere quello appropriato. Non che io pensi che sia una buona idea, ma è un modo per rendere le cose un po 'più dinamiche. –

0

Un'altra soluzione possibile è avere due progetti CloudService, ciascuno con ServiceConfiguration.cscfg specifico (dev/prod). Sviluppa usando Dev, ma distribuisci il Prod.

+0

Questo è corretto, ma avresti ancora bisogno di sviluppare qualcosa che guardi al cloud configs piuttosto che al web.config come ha sottolineato Aaron. – knightpfhor

2

Mi piace questa domanda!

Per i ruoli dei lavoratori, ho risolto questo problema rilevando l'ambiente in fase di esecuzione e il lancio il mio 'applicazione' in un nuovo AppDomain con una configurazione personalizzata:

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

Questo è incredibilmente efficiente!

mi piacerebbe fare lo stesso con progetti web, perché utilizzando la configurazione specifica Azure è un sacco di guai:

  • Entrambi config non sono nello stesso luogo, che è in termini di tempo durante il debug
  • devi imparare un nuovo modo di scrivere qualcosa che sia di serie Sould
  • a volte vi chiederete se l'applicazione falled indietro sul web.config a causa di un errore di sintassi stupido

Sto ancora cercando il modo giusto per farlo, like in this post

3

Sono d'accordo con Mose, ottima domanda!

Visual Studio 2010 include una soluzione per questo tipo di problema, trasformazioni web.config. Se guardi al tuo ruolo web noterai che include Web.Debug.config e Web.Release.config insieme al tradizionale web.config. Questi file vengono utilizzati per trasformare il web.config durante la distribuzione.

L'esempio canonico è "Ho bisogno di stringhe di connessione al database diverse per lo sviluppo e il rilascio" ma si adatta anche alla tua situazione.

C'è un post di blog eccellente dal team di Visual Web Developer che spiega come utilizzare questa funzione (non preoccuparsi con i documenti MSDN, I conoscere come funziona e ancora non capisco i documenti). Scopri http://blogs.msdn.com/b/webdevtools/archive/2009/05/04/web-deployment-web-config-transformation.aspx

+0

Come dichiarato correttamente da Aaron, il web.config (o i derivati ​​da esso .debug.config o .release.config) sono "statici" in Azure. Quindi voglio sapere se questo meccanismo si applica anche a serviceconfiguration.cscfg ...... –

+0

Non sono sicuro, ma questo potrebbe essere quello che stai cercando: http://blog.alexlambert.com/2010 /05/using-visual-studio-configuration.html –

+0

Questa è una soluzione simile con qualche dettaglio in più: http://blogs.msdn.com/b/tomholl/archive/2011/02/23/using-msbuild- to-deploy-to-multiple-windows-azure-environments.aspx –

0

problemi attualmente sto affrontando quando si utilizza un Web.Debug.config con trasformare XSLT. Non sembra funzionare in Azure ....

Dipende se si desidera farlo funzionare sulla macchina locale o all'interno dell'integrazione continua.

  • Per la macchina locale ho cercato di rispondere qui: https://stackoverflow.com/a/9393533/182371
  • Per la integrazione continua è ancora più facile. Quando costruisci dalla riga di comando specificando il valore della proprietà di configurazione, le tue configurazioni verranno trasformate (non importa cosa faccia quando si costruisce all'interno di VS). Pertanto, la corretta specificazione delle configurazioni di compilazione per il cloud e il progetto Web fornirà l'output corretto in base ai parametri di costruzione.
Problemi correlati