Azure 部署槽 - 交换和保留连接字符串

Posted

技术标签:

【中文标题】Azure 部署槽 - 交换和保留连接字符串【英文标题】:Azure Deployment Slots - swapping and retaining connection strings 【发布时间】:2016-07-28 12:34:26 【问题描述】:

我最近使用“带预览交换”功能将暂存 Azure 应用程序交换到生产环境中,完成交换后,生产应用程序指向暂存 SQL DB 连接字符串。在应用程序设置中,我将临时连接字符串保存并检查为临时插槽中的插槽设置,并将生产连接字符串保存并检查为生产插槽中的插槽设置。

有人遇到过吗?我需要将各自的连接字符串粘贴到各自的插槽,但在我的情况下,交换将源字符串带到目标生产插槽,即使我认为我将字符串正确配置为插槽设置并在两个环境中检查它们。

【问题讨论】:

你怎么理解它没有改变? Azure 不会覆盖心理文件。因此,如果您检查心理文件,您将看到已发布的文件(第一个),但无论如何它都会覆盖它。 我正在通过部署后观察数据库表来验证这一点。交换之后,我们的生产用户正在写入暂存表。如果我将连接字符串粘贴到每个插槽,则不应该发生这种情况 - 暂存连接字符串应该粘贴到暂存插槽,而 prod 连接字符串应该粘贴到 prod 插槽。 @Ben 你明白了吗?我遇到了类似的问题,现在当我将数据库切换到预期的数据库时,我的网站将无法工作。考虑删除插槽/数据库并重新开始,但这不是一个很好的解决方案。 :( 我想我也会这样做。我现在正在与 Microsoft Azure 的某个人合作,他基本上提出了同样的建议。看来我的插槽设置并没有真正起到任何作用,因为当我执行交换时根本没有读取它们。我通过一些远程调试确认了这一点,我什至将插槽中的连接字符串更改为不存在的数据库,我仍然能够建立连接。另外,我可以在交换后看到每个插槽中的 web.configs,它们确实有向后的连接字符串。 编辑:我的连接字符串在运行时发生了一些奇怪的事情。当我部署到插槽时,出于某种原因,用于连接 SQL 数据库的 DB 连接字符串是在 web.config 中为实体框架生成的连接字符串,而不是实际的 SQL 连接字符串。由于 EF 字符串中嵌入了 SQL 字符串,因此可以使用该字符串进行连接。 【参考方案1】:

在 Azure 门户的 AppSettings 中,单击连接字符串旁边的“插槽设置”选项:

【讨论】:

我已经这样做了,如上所述。连接字符串仍在与其余代码一起交换。 同样的事情发生在我身上。所有应用设置和连接字符串。 确保你在页面顶部点击了保存,而不仅仅是 ok【参考方案2】:

您是在每次需要时读取连接字符串,还是在应用启动期间读取连接字符串一次并将其保存到内存中的值? Startup.cs 例程似乎只运行一次,并且在交换后不会重新运行。因此,如果您在启动期间在暂存槽中读取该值,则交换到生产时该值不会被刷新。

【讨论】:

以上是关于Azure 部署槽 - 交换和保留连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 Azure 部署槽中的数据库回滚?

当我进行部署槽交换时,为啥 azure 会重新启动网站?

Azure SQL 槽 VNet 的 Azure 函数连接字符串

当我在 Windows Azure 上交换暂存和生产部署时出现“错误:19 - 物理连接不可用”

交换 Azure Web App 部署槽会注销 ASP.NET Core RC2 中的所有用户

在 Azure DevOps 管道中为 WebApp 创建部署槽