You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Web App槽交换后连接字符串异常:生产与预发均写入预发库

Azure Web App槽交换后数据库写入异常排查步骤

针对你遇到的生产槽和预发布槽交换后均写入预发布数据库的问题,可按以下方向排查:

  • 确认槽专属配置标记是否生效
    检查两个槽的连接字符串是否开启了「Slot Setting」开关。槽专属配置在交换时会保留各自的设置,不会被交换;如果开关未开启,交换时生产槽的连接字符串会被预发布槽的覆盖,导致两个槽使用相同的预发布数据库连接。

  • 排查应用读取连接字符串的代码逻辑
    验证代码中是否正确读取Azure门户配置的连接字符串:

    • 确保使用框架原生方法读取(如ASP.NET Core中Configuration.GetConnectionString("YourConnStringName")),而非硬编码、读取本地配置文件或错误的配置节点。
    • 确认没有错误关联ASPNETCORE_ENVIRONMENT到数据库连接逻辑——即使你声明该变量仅用于Key Vault OAuth密钥,仍需排查是否有代码分支根据环境变量错误切换了连接字符串。
  • 查看槽交换操作日志
    在Azure Portal进入Web App的「部署槽」页面,点击「交换历史」,查看交换过程的详细日志:

    • 确认槽专属的连接字符串是否被标记为「Not swapped」(未被交换);如果日志显示连接字符串被交换,说明槽专属标记未正确设置。
  • 验证运行时实际使用的连接字符串
    在应用中临时添加调试端点(仅限测试环境),输出连接字符串的Catalog部分(避免泄露敏感信息):

    [Route("api/debug/conn-catalog")]
    public IActionResult GetConnectionCatalog()
    {
        var connString = Configuration.GetConnectionString("YourConnStringName");
        var catalog = connString?.Split("Catalog=")[1].Split(';')[0];
        return Ok(new { DatabaseCatalog = catalog });
    }
    

    访问该端点,确认生产槽返回正常Catalog名称,预发布槽返回带-staging的名称。

  • 检查Key Vault配置关联(若使用)
    如果连接字符串是通过Key Vault引用(如@Microsoft.KeyVault(SecretUri=...)):

    • 确认Key Vault中对应生产和预发布的密钥内容是否正确。
    • 验证应用服务身份是否有权限读取对应环境的密钥,避免因权限或引用路径错误导致读取到错误的连接字符串。
  • 重置应用配置缓存
    若Azure配置缓存存在异常,可尝试:

    • 在Kudu控制台执行配置刷新操作,或重新保存一次两个槽的连接字符串配置(无需修改内容,仅触发配置同步)。
    • 重启应用服务实例,确保配置完全加载。

内容的提问来源于stack exchange,提问作者USMC6072

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 03:34:53