执行Azure网站暂存交换时,将替换连接字符串

时间:2014-06-12 14:22:04

标签: azure connection-string azure-web-sites staging

(1)我们使用Sql Server(网络版)在Azure网站上运行Web应用程序。该应用程序包括两个连接字符串:

  • DefaultConnection - 正常连接字符串,格式为 Server=tcp:{my-sql-server}.database.windows.net,1433;Database=...)。

  • EFConnection - 实体框架连接字符串。因为即时通讯使用了 EF设计师(并喜欢它)我需要使用连接字符串 形式metadata=res://*/Models.EDM...

(2)我已将连接字符串放在web.config中;这是接受“元数据...”(EF)连接字符串的唯一方法(当尝试在Azure网站的控制面板中输入这些连接字符串时,我遇到了各种奇怪的错误。)

一切都很好。

(3)接下来,我在我们的网站上添加了一个临时插槽来执行分阶段开发,如Staged Deployment on Microsoft Azure Web Sites

中所述

分阶段网站运作正常。我为它创建了一个不同的Sql Server,并以与生产站点相同的方式设置其连接字符串(即在web.config中)。我使用web.config处理不同的web.config Transformations。 (我有另外两个转换 - 用于开发/调试和本地部署/发布)


问题:现在我有一个生产+暂存网站,我尝试做交换。交换效果很好,引入站点的任何更改都会交换到生产。

但是,交换还从登台站点获取连接字符串,将生产连接到登台数据库。

*这是一个已知错误吗?是否有解决办法? (现在我需要在QA测试分阶段网站时直接部署到生产网站 - 这意味着我们网站的停机时间,并且安静地挫败了整个网站的目的运动)

5 个答案:

答案 0 :(得分:11)

应用程序设置和连接字符串对插槽没有粘性,并且在交换时将保留在网站上,但我们可以使用PowerShell命令将所选应用程序设置和连接字符串配置为粘滞到插槽(Azure门户尚不支持)。

在Azure PowerShell中使用此命令将2个应用程序设置设置为插槽的粘性:

/* If you have one config */
Set-AzureWebsite -Name mysite -SlotStickyAppSettingNames @("myslot")

/* If you have more than one */
Set-AzureWebsite -Name mysite -SlotStickyAppSettingNames @("myslot", "myslot2")

此命令将2个连接字符串设置为插槽的粘性(遵循上述相同的原则):

Set-AzureWebsite -Name mysite -SlotStickyConnectionStringNames @("myconn", "myconn2")

对插槽配置的粘贴是网站范围的配置,会影响该网站中的所有插槽。

修改

正如Jeff Treuting在下面的评论中所指出的,现在新的门户网站有一个" Slot设置"您可以选择的复选框:

" Web Apps" - >选择您的网络应用 - > "设置" - > "应用程序设置"。 Azure Portal Image

答案 1 :(得分:4)

Staging环境是一种生产交换模式,允许您在将网站与当前生产系统交换之前强制执行网站升级。它还提供回滚机制,以防您的升级出现问题。

对于使用此术语代表QA环境尽可能接近生产的公司而言,分期这个词可能有点误导。在Microsoft Azure中,临时环境是一种预生产概念,允许您预先配置和测试网站的升级。

QA环境应该有自己的环境。

答案 2 :(得分:1)

Azure网站的部署插槽功能允许在将客户流量引导至此版本之前,在目标平台上验证网站版本的完整内容和配置更新。期望在执行交换之前,部署时隙将以期望的目标格式完全配置。交换操作不会将转换应用于源部署插槽,它会无缝地重定向Web流量。

在验证和交换前更新方面简化工作流程的一个想法是使用EF连接字符串的应用程序设置。

答案 3 :(得分:0)

所以我们应该使用azure" staging"作为部署中的另一个步骤 - 用于确保立即部署的方法,而不会导致站点停机?

在这种情况下,我仍然可以将它用作qa环境,并在交换产品之前进行重新配置。

答案 4 :(得分:0)

FWIW,您可以通过以下方式保存Azure门户中的EF连接字符串:(a)复制并粘贴整个字符串BETWEEN引号,(b)用实际的双重替换内部连接字符串周围的HTML实体修改引号引用,以及(c)选择" Custom"对于Azure控制台中的DB类型。