1

我需要传播实体框架,asp.net成员资格(它们都在web.config的connectionstrings部分中)和会话状态(它是在sessonstate的sqlconnectionstring)中,当我调整windows azure的服务配置中的这些设置时,在web.config中。需要ServiceConfiguration.cscfg来填充web.config会话状态和连接字符串

在开发过程中,我们测试了我们的应用程序作为标准的asp.net webforms应用程序,但是一旦它被部署,它就会以azure运行。所以我们需要允许网站在非天蓝色和天蓝色的环境下运行。这就是为什么我们现在只依赖web.config中的值。因为这些连接字符串不会在我的代码中直接调用,因此编写的实用程序类可以从azure服务配置获取,如果可用或以其他方式从web.config获取这些价值不可能。

我意识到编辑web.config会导致服务中断 - 而且我只打算在下班时间这样做。

回答

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事件调用相同的代码之上。

祝你好运,

埃里克

+0

感谢您的示例代码。调整角色启动只在部署实例时处理 - 但我的实例可能已经部署并正在运行 - 并且我需要在实例运行时更改web.config - 您是否有一些示例? – DkDev

+0

只要角色配置更改,您就需要调用更新web.config的代码。 RoleEnvironment.Changing事件就是你想要使用的。 –