18

我目前在 Azure 中有一个应用程序,每当我们将其推送到暂存段时,我们都无法真正进行测试,因为连接字符串指向 prod 数据库。

有人向我提到,您应该能够在 ServiceConfiguration.cscfg 文件中设置连接字符串,而不是(或使用)web.config 文件。这样,您可以在 Azure 门户中更改连接字符串,而不是重新发布 who 应用程序。

有谁知道如何做到这一点?

4

3 回答 3

27

在您的 ServiceConfiguration.cscfg 文件中添加:

<ServiceConfiguration ... />
  <Role ... />
    <ConfigurationSettings>
      <Setting name="DatabaseConnectionString" value="put your connection string here" />
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>

现在您有了一个连接字符串,您可以通过编辑 azure 门户中的配置来更改。

然后,无论何时您需要检索连接字符串,您都可以使用:

using Microsoft.WindowsAzure.ServiceRuntime;

...

String connString = RoleEnvironment.GetConfigurationSettingValue("DatabaseConnectionString")

您可能需要将 Microsoft.WindowsAzure.ServiceRuntime.dll 添加到您的引用中。

RoleEnviroment.IsAvailable可用于测试您是否在 Azure 中运行,如果没有则回退到您的 web.config 设置。

using System.Configuration;
using Microsoft.WindowsAzure.ServiceRuntime;

...

if (RoleEnvironment.IsAvailable)
{
    return RoleEnvironment.GetConfigurationSettingValue("DatabaseConnectionString");
}
else
{
    return ConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString; 
}

本文对上述内容进行了更详细的解释。

于 2011-05-13T07:14:42.057 回答
3

对于实体框架,您不需要提供 providerName,它已经在连接字符串中。它在天蓝色设置中不起作用的原因是,在创建新的 EntityConnection 之前,它包含“需要转换回”的符号。您可以使用 System.Web 中的 HttpUtility.HtmlDecode 来完成。

于 2012-08-01T07:52:07.840 回答
1

基本上你需要在 Azure 服务配置文件中定义这些设置。在这里检查。定义后,可以从 Azure 门户更改这些内容。

于 2011-05-12T15:02:16.017 回答