17

我有一个当前在Azure中的应用程序,每当我们将它推入暂存段时,我们都无法真正测试,因为连接字符串指向了prod数据库。在服务配置中设置应用程序ConnectionString而不是Azure中的web.config

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

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

回答

26

在你ServiceConfiguration.cscfg文件中加入:

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

现在你有一个连接字符串,您可以通过编辑蔚蓝门户网站的内部结构发生变化。

然后任何时候你需要检索连接字符串,你可以使用做到这一点:

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

This article has a more verbose explanation of the above.

+1

此错误不允许指定连接提供者(实体框架所要求的),比如System.Data.EntityClient。有什么想法? – 2012-02-28 07:12:53

+0

@DaleAnderson,把它们放在web.config中。想不到一个更好的地方与EF:( – CMircea 2012-04-07 13:55:42

+0

Yeh。我实际上发现web.config最适合那种东西 - 无需重新部署在测试场景中更改它,并且可以使用配置转换轻松管理。 – 2012-04-08 04:31:41

1

基本上你需要在Azure服务配置文件中定义这些设置。检查here。一旦定义,这些可以从Azure门户进行更改。

3

对于实体框架,你并不需要提供的providerName,这里面已经在ConnectionString。当它处于天蓝色设置时,它不起作用的原因是,它包含&“符号”,在创建新EntityConnection之前需要将其转换回“在System.Web中使用HttpUtility.HtmlDecode。”

相关问题