Migliori pratiche della stringa di connessione di Azure

Ho un’applicazione che sto semplicemente migrando ad Azure. Attualmente utilizzo la trasformazione web.config per gestire la modifica del database che collega gli ambienti string dev / staging / prod. Come è meglio gestire queste stringhe di connessione multiple in Azure?

Nei casi in cui non importa se lo sviluppatore può vedere le credenziali di produzione, è ansible utilizzare le trasformazioni di configurazione di Visual Studio 10 incorporate. Se questo è ciò che stai cercando, procedi nel seguente modo:

1. Naviga nella cartella del progetto di Azure in Esplora file
2. Creare una copia di ServiceConfiguration.cscfg
3. Rinominare la copia in ServiceConfiguration.Base.cscfg
4. Per ogni configurazione di build (ad esempio Dev, Staging, Production), creare un ServiceConfiguration. .cscfg file. In questi file, è ansible utilizzare la normale syntax di trasformazione di configurazione
5. Apri il tuo file .ccproj in un editor di testo
6. Trova il seguente nodo,

    

e sostituiscilo con questo (dovrai modificare questo blocco in modo che corrisponda alle tue configurazioni di build):

     ServiceConfiguration.cscfg   ServiceConfiguration.cscfg   ServiceConfiguration.cscfg   ServiceConfiguration.cscfg   

7. Aggiungi quanto segue alla fine del file .ccproj, appena sopra :

     

8.Se stai usando un server CI su cui non è installato Visual Studio 10, probabilmente dovrai copiare la cartella C: \ Programmi \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web e il suo contenuto da una macchina di sviluppo al server.

Aggiornamento: come notato da @SolarSteve, potrebbe essere necessario aggiungere uno spazio dei nomi ai file ServiceConfiguration. *. Cscfg. Ecco un esempio di ServiceConfiguration.Base.cscfg:

         

Personalmente noi:

  1. Dropped completamente trasformazioni di configurazione web.
  2. L’impostazione viene recuperata da cscfg.
  3. La versione di sviluppo di cscfg punta all’ambiente di sviluppo locale (che è memorizzato nel controllo di versione).
  4. Durante la distribuzione in produzione, forniamo credenziali sicure per la produzione di SQL Azure e storage.

Per un esempio della class di gestione delle impostazioni che esegue la scansione delle impostazioni dell’applicazione e dell’ambiente cloud per i valori di configurazione, è ansible controllare l’open source Lokad.CQRS per il progetto Windows Azure (vedere CloudSettingsProvider)

È ansible utilizzare CloudConfigurationManager in Azure SDK 1.7 http://msdn.microsoft.com/en-us/LIBRARY/microsoft.windowsazure.cloudconfigurationmanager

Ciò inizia guardando ServiceConfiguration.cscfg ad esempio ServiceConfiguration.Cloud.cscfg per le impostazioni di configurazione. Se non è lì, torna a web.config e app.config

Per esempio

 CloudConfigurationManager.GetSetting("StorageConnectionString") 

Apparirà nell’appropriato cscfgfile per l’impostazione StorageConnectionString, quindi cercherà il web.config e quindi app.config.

Abbiamo un certo numero di ambienti (dev locale all’interno di dev fabric, dev dev localizzato, test, rilascio che ha 2 versioni: release / prod e release / staging e 20 progetti alcuni dei quali richiedono una certa variabilità nelle impostazioni di configurazione. problema creando un piccolo progetto di “config”, incluse le sottocartelle che corrispondono agli ambienti. Copiamo i file dalla sottocartella a seconda della build che stiamo facendo nella cartella principale del progetto di configurazione, durante ogni compilazione.

Tutti gli altri progetti si collegano al progetto di configurazione per i file .config. Utilizziamo anche file di configurazione parziali per mantenere la follia di ripetere le stesse informazioni per tutto il tempo in vari ambienti.

Spero che questo ti aiuti

Ho avuto lo stesso requisito per la trasformazione di ServiceConfiguration.

Sono andato con la risposta di jmac (grazie!), Ma ho avuto problemi con lo spazio dei nomi nella versione Base:

  

dopo un po ‘di più, ho scoperto questo di Andrew Patterson (grazie).

quindi il mio file di trasformazione risultante: