(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测试分阶段网站时直接部署到生产网站 - 这意味着我们网站的停机时间,并且安静地挫败了整个网站的目的运动)
答案 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" - >选择您的网络应用 - > "设置" - > "应用程序设置"。
答案 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类型。