当我调整这些设置时,我需要在web.config中传播实体框架,asp.net成员资格(它们都在web.config的connectionstrings部分中)和会话状态(在sessonstate的sqlconnectionstring中)的连接字符串更改在windows azure的服务配置中。
在开发过程中,我们将我们的应用程序作为标准的asp.net webforms应用程序进行测试,但是一旦部署它就会在azure中运行。因此,我们需要允许站点在非天蓝色和天蓝色的上下文中运行。这就是为什么我们现在只是依赖web.config中的值。因为这些连接字符串不是直接在我的代码中调用编写一个实用程序类,如果可用或从web.config获取,则从azure服务配置中获取不是这些价值观的可能性。
我意识到编辑web.config会导致服务中断 - 我只打算在下班时间这样做。
答案 0 :(得分:2)
我认为最好的方法是将配置信息包装在服务中。然后,在服务中,使用RoleEnvironment确定要使用的设置。例如
public static class Config
{
public static string ConnStr
{
get
{
if (RoleEnvironment.IsAvailable)
return RoleEnvironment.GetConfigurationSettingValue("ConnStr");
return ConfigurationManager.AppSettings["ConnStr"];
}
}
}
如果这不起作用,并且您需要更改实际的web.config(例如,使用命名连接字符串),那么您需要在运行时修改配置。在您的角色开始时,执行以下操作:
var config = WebConfigurationManager.OpenWebConfiguration(null);
var connStrs = WebConfigurationManager.OpenWebConfiguration(null).GetSection("connectionStrings") as ConnectionStringsSection;
connStrs.ConnectionStrings["ConnStr"].ConnectionString = RoleEnvironment.GetConfigurationSettingValue("ConnStr");
config.Save();
要在角色运行后处理配置更改时,只需从RoleEnvironment.Changing事件中调用与上面相同的代码。
祝你好运,埃里克