代码之家  ›  专栏  ›  技术社区  ›  Craig

Azure连接字符串最佳实践

  •  50
  • Craig  · 技术社区  · 14 年前

    我有一个正在迁移到Azure的应用程序。目前我使用web.config转换来管理更改数据库连接字符串dev/staging/prod environments。如何在Azure中管理这些多个连接字符串?

    5 回复  |  直到 7 年前
        1
  •  28
  •   Community CDub    7 年前

    在开发人员是否可以看到产品凭据无关紧要的情况下,可以使用内置的Visual Studio 10配置转换。如果这正是您要找的,请执行以下步骤:

    1.在文件资源管理器中导航到你的Azure项目文件夹
    2。复制ServiceConfiguration.cscfg
    三。将副本重命名为ServiceConfiguration.Base.cscfg
    四。对于每个生成配置(例如Dev、Staging、Production),创建一个ServiceConfiguration。<build config name>.cscfg文件。在这些文件中,可以使用 config transformation syntax
    5个。在文本编辑器中打开.ccproj文件
    6。找到以下节点,

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

    并将其替换为(必须编辑此块以匹配生成配置):

    <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.在上面.ccproj文件的末尾添加以下内容 </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.如果您使用的是未安装Visual Studio 10的CI服务器,则可能需要将C:\ Program Files\MSBuild\Microsoft\Visual Studio\v10.0\Web文件夹及其内容从开发计算机复制到服务器。

    更新: 作为@SolarSteve noted ,可能需要向ServiceConfiguration.*.cscfg文件中添加命名空间。下面是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>
    
        2
  •  14
  •   Rinat Abdullin    14 年前

    就我们个人而言:

    1. 已完全删除web配置转换。
    2. 从cscfg检索设置。
    3. cscfg的开发版本指向本地开发环境(存储在版本控制中)。
    4. 在部署到生产环境时,我们为生产SQL Azure和存储提供安全凭据。

    对于扫描应用程序设置和云环境以获取配置值的设置管理类的示例,您可以签出开放源代码 Lokad.CQRS for Windows Azure 项目(请参阅CloudSettingsProvider)

        3
  •  7
  •   GraemeMiller Oxon    12 年前

    你可以在Azure SDK 1.7中使用CloudConfigurationManager http://msdn.microsoft.com/en-us/LIBRARY/microsoft.windowsazure.cloudconfigurationmanager

    首先在ServiceConfiguration.cscfg中查找ServiceConfiguration.Cloud.cscfg以获取配置设置。如果不存在,则返回web.config和app.config

    例如

    CloudConfigurationManager.GetSetting("StorageConnectionString")
    

    将在相应的cscfgffile中查找StorageConnectionString设置,然后搜索web.config,然后搜索app.config。

        4
  •  6
  •   Igorek    14 年前

    我们有许多环境(本地开发在dev fabric内部,本地开发在dev fabric外部,testing,release,它有两个版本:release/prod和release/staging,以及20个项目,其中一些项目需要在配置设置中进行一些变化)。我们通过创建一个很小的“config”项目解决了这个问题,其中包括与环境匹配的子文件夹。在每次编译过程中,我们都会从子文件夹中复制文件,具体取决于我们在config项目的根文件夹中执行的构建。

    所有其他项目都链接到.config文件的配置项目。我们还使用部分配置文件来保持在不同环境中一直重复相同信息的疯狂。

    希望这有帮助

        5
  •  6
  •   Community CDub    7 年前

    我对转换服务配置有相同的要求。

    我接受了jmac的回答(谢谢!),但基本版本中的命名空间有问题:

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

    再翻一翻就发现了 this 安德鲁·帕特森(谢谢)。

    所以我得到的转换文件:

    <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>