是否可以在Azure VIP交换期间更改连接字符串

是否可以在Azure VIP交换期间更改连接字符串,azure,connection-string,azure-sql-database,Azure,Connection String,Azure Sql Database,我正在尝试在Azure(9月工具包)中设置临时和实时环境,我想要一个单独的临时和实时数据库-具有不同的连接字符串。显然,我可以通过Visual Studio中的web.config转换来实现这一点,但是有没有一种方法可以在VIP交换期间自动更改连接字符串,以便登台站点指向登台数据,而活动站点指向活动数据?我希望不必部署两次。我认为在进行VIP交换时,角色不会发生任何变化。相反,它改变了负载平衡器的配置 因此,应用程序中不会发生任何导致其更改配置的情况。我能想到的唯一一件事是URL在两者之间发生变

我正在尝试在Azure(9月工具包)中设置临时和实时环境,我想要一个单独的临时和实时数据库-具有不同的连接字符串。显然,我可以通过Visual Studio中的web.config转换来实现这一点,但是有没有一种方法可以在VIP交换期间自动更改连接字符串,以便登台站点指向登台数据,而活动站点指向活动数据?我希望不必部署两次。

我认为在进行VIP交换时,角色不会发生任何变化。相反,它改变了负载平衡器的配置

因此,应用程序中不会发生任何导致其更改配置的情况。我能想到的唯一一件事是URL在两者之间发生变化。您可以实现选择两个连接字符串之一的代码,该字符串基于访问它的URL(假设我们只讨论web角色),但它看起来很混乱


从根本上说,我认为问题在于登台不是一个单独的测试环境;这是生产的垫脚石。因此,Microsoft的假设是配置不会更改。

使用管理API和PowerShell cmdlet,您可以自动化大量Azure平台,这可以包括协调VIP交换机和连接字符串更改

这是一种方法:

  • 将数据库连接字符串添加到ServiceConfiguration文件
  • 通过使用RoleEnvironment.GetConfigurationSettingValue而不是更典型的.NET ConfigurationManager.ConnectionString API,修改应用程序逻辑以从Azure特定配置读取连接字符串
  • 实现RoleEnvironmentChangeing,以便在Azure服务配置发生更改时通知您的逻辑。在此处添加代码以更新应用程序的连接字符串,再次使用RoleEnvironment.GetConfigurationSettingValue
  • 使用“暂存”DB连接字符串的ServiceConfiguration设置部署到暂存
  • 编写一个PowerShell脚本,该脚本将调用VIP交换机(从中围绕Move Deployment cmdlet构建),并使用包含“生产”DB连接字符串的新ServiceConfiguration文件调用配置更改(请参阅Set-DeploymentConfiguration)

  • 总而言之,步骤5将在一次自动操作中执行VIP交换和连接字符串更新。

    是的,这正是我们发现的:“暂存”在这里的意思是“即将上线”。我们在不同的Azure订阅上有一个完全独立的环境进行测试。部署后但VIP交换之前,我们要做的一件事是启动“暂存”环境,以验证web.config转换和类似转换中没有简单错误-这也确保缓存已填充,VM正确运行.Thx。看起来像是一个单独的测试环境。不太满意,主要是在成本基础上。最后一段+1。暂存区应该只用于确保你的应用程序在“生产开关”打开之前运行良好。我认为它是生产的垫脚石。如果您想要一个测试环境,那么您必须启动另一个web角色。这应该不是什么大问题,因为prod/staging角色的成本都是一样的。因此,如果我理解您的解释,当数据库架构发生更改时,绝对不应该使用VIP开关。在更新数据库之前,暂存将被中断,或者在更新数据库之后,生产将被中断。这是假设一个共同的设置;安迪,下面有一个更详细的解决方法。