50

J'ai une application que je viens de migrer vers Azure. Actuellement, j'utilise la transformation web.config pour gérer la modification de la base de données connectant les environnements dev/staging/prod. Comment gérer au mieux ces multiples chaînes de connexion dans Azure?Meilleures pratiques relatives aux chaînes de connexion Azure

Répondre

28

Dans les cas où il n'a pas d'importance si le développeur peut voir les informations d'identification de production, vous pouvez utiliser intégré dans Visual Studio 10 transformations de configuration. Si c'est ce que vous cherchez, procédez comme suit:

1.Navigate dans votre dossier de projet Azure dans l'explorateur de fichiers
2. Faites une copie de ServiceConfiguration.cscfg
3. Renommer copie ServiceConfiguration.Base .cscfg
4. Pour chaque configuration de construction (par exemple, Dev, Staging, Production), créez une configuration de service. < build config nom > fichier .cscfg. Dans ces fichiers, vous pouvez utiliser la config transformation syntax normale
5. Ouvrez votre fichier .ccproj dans un éditeur de texte
6. Trouver le noeud suivant,

<ItemGroup> 
    <ServiceDefinition Include="ServiceDefinition.csdef" /> 
    <ServiceConfiguration Include="ServiceConfiguration.cscfg" /> 
</ItemGroup> 

et le remplacer par ce (vous devrez modifier ce bloc pour répondre à vos configs de construction):

<ItemGroup> 
    <ServiceDefinition Include="ServiceDefinition.csdef" /> 
    <ServiceConfiguration Include="ServiceConfiguration.cscfg" /> 
    <None Include="ServiceConfiguration.Base.cscfg"> 
     <DependentUpon>ServiceConfiguration.cscfg</DependentUpon> 
    </None> 
    <None Include="ServiceConfiguration.Dev.cscfg"> 
     <DependentUpon>ServiceConfiguration.cscfg</DependentUpon> 
    </None> 
    <None Include="ServiceConfiguration.Staging.cscfg"> 
     <DependentUpon>ServiceConfiguration.cscfg</DependentUpon> 
    </None> 
    <None Include="ServiceConfiguration.Production.cscfg"> 
     <DependentUpon>ServiceConfiguration.cscfg</DependentUpon> 
    </None> 
</ItemGroup> 

7.Add ce qui suit à la fin du fichier .ccproj, juste au-dessus </Project>:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" /> 
<Target Name="BeforeBuild"> 
    <TransformXml Source="ServiceConfiguration.Base.cscfg" Transform="ServiceConfiguration.$(Configuration).cscfg" Destination="ServiceConfiguration.cscfg" /> 
</Target> 

8.Si vous utilisez un serveur CI sur lequel Visual Studio 10 n'est pas installé, vous devrez probablement copier le dossier C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web et son contenu d'une machine de développement au serveur.

Mise à jour: Comme @SolarSteve noted, vous pourriez avoir à ajouter un espace de noms à votre ServiceConfiguration * fichiers cscfg... Voici un exemple de ServiceConfiguration.Base.cscfg:

<sc:ServiceConfiguration serviceName="MyServiceName" osFamily="1" osVersion="*" xmlns:sc="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <sc:Role name="MyRoleName"> 
    <sc:Instances count="1" /> 
    <sc:ConfigurationSettings> 
     <sc:Setting name="DataConnectionString" value="xxx" /> 
    </sc:ConfigurationSettings> 
    </sc:Role> 
</sc:ServiceConfiguration> 
+0

Je reçois une erreur "WAT020: Une seule définition de service peut être active." ci-dessus ... des idées ce que j'ai mal fait? –

+2

Ignorer ce qui précède je suis un idiot ... –

+0

Hey jmac, j'ai créé un addin VS (http://visualstudiogallery.msdn.microsoft.com/69023d00 -a4f9-4a34-a6cd-7e854ba318b5) qui utilise TransformXml un tas de ppl a demandé le support du projet Azure.Cela semble être un bon point de départ pour moi.Si je l'implémente, peux-tu t'assurer que je l'ai bien compris? moi par email: sayedha [à] {MICROSOFTdotCOM}. –

14

Personnellement nous:

  1. transformations de configuration web complètement supprimés.
  2. La valeur est extraite de cscfg.
  3. La version de développement de cscfg pointe vers un environnement de développement local (stocké dans le contrôle de version).
  4. Lors du déploiement en production, nous fournissons des informations d'identification sécurisées pour la production SQL Azure et le stockage.

Pour l'échantillon des paramètres de classe de gestion qui analyse les paramètres d'application et de l'environnement de nuage pour les valeurs de configuration, vous pouvez vérifier projet source de Lokad.CQRS for Windows Azure ouverte (voir CloudSettingsProvider)

6

Nous avons un certain nombre d'environnements (dev locaux à l'intérieur dev fabric, dev en dehors de dev fabric, testing, release qui a 2 versions: release/prod et release/staging et 20 projets dont certains nécessitent une certaine variabilité dans les paramètres de configuration Nous avons résolu ce problème en créant un petit projet "config", Nous copions les fichiers du sous-dossier en fonction de la construction que nous faisons dans le dossier racine du projet config, lors de chaque compil e.

Tous les autres projets sont liés au projet config pour les fichiers .config. Nous utilisons également des fichiers de configuration partiels pour garder la folie de répéter la même information tout le temps dans différents environnements.

Hope this helps

+1

Enfin publié un blog à ce sujet à http://www.paraleap.com/blog/post/Managing-environments-in-a-distributed-Azure-or-other-cloud-based-NET-solution.aspx – Igorek

+0

Si toutes vos solutions réutilisent le même projet de configuration, comment gérez-vous les propriétés de configuration spécifiques à la solution? – Jeff

+0

Pouvez-vous élaborer? – Igorek

6

J'ai eu la même exigence de transformation ServiceConfiguration.

J'y suis allé avec la réponse de CCMC, mais avait du mal avec l'espace de noms dans la version de base (merci!):

<ServiceConfiguration serviceName="TestCloud2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*"> 

après un peu plus farfouillé trouvé this par Andrew Patterson (Merci) .

donc mon fichier de transformation résultant:

<asc:ServiceConfiguration serviceName="TestCloud2" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xmlns:asc="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*"> 
<asc:Role name="WebRole1"> 
    <asc:Instances count="1" /> 
    <asc:ConfigurationSettings> 
     <asc:Setting name="LoggingStorage" value="UseDevelopmentStorage=true" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
    </asc:ConfigurationSettings> 
</asc:Role> 

7

Vous pouvez utiliser CloudConfigurationManager Azure SDK 1.7 http://msdn.microsoft.com/en-us/LIBRARY/microsoft.windowsazure.cloudconfigurationmanager

Cela commence par la recherche dans le ServiceConfiguration.cscfg par exemple ServiceConfiguration.Cloud.cscfg pour le paramètre de configuration. Si ce n'est pas là, il revient à web.config et app.config

Par exemple

CloudConfigurationManager.GetSetting("StorageConnectionString") 

regardera dans le cscfgfile approprié pour le réglage de StorageConnectionString, il cherchera le web.config et app.config.