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

如何为Azure App Service部署槽设置独立数据库连接字符串

解决方案:Azure App Service槽连接不同SQL数据库

问题根源

你在生产槽添加的连接字符串没生效,核心原因有两点:

  • Azure App Service的连接字符串默认会被加载到配置的ConnectionStrings节点下,但你的代码是从根节点sqlConnectionString读取,导致槽配置的项没被识别;
  • 若Key Vault配置源的加载顺序在App Service槽配置之后,会覆盖槽里的自定义设置。

具体修复步骤

1. 修改代码读取连接字符串的逻辑

调整Program.cs中的代码,优先读取App Service槽配置的ConnectionStrings节点项,再 fallback 到Key Vault的根节点项:

var sqlConnectionString = builder.Configuration.GetConnectionString("sqlConnectionString") 
                          ?? builder.Configuration.GetSection("sqlConnectionString").Value;

builder.Services.AddDbContext<MyAppContext>(options =>
    options.UseSqlServer(sqlConnectionString ?? throw new InvalidOperationException("Connection string 'sqlConnectionString' not found.")));

GetConnectionString("sqlConnectionString")会自动读取ConnectionStrings:sqlConnectionString节点,这正是App Service槽配置的连接字符串存放位置。

2. 确保槽连接字符串配置正确

进入生产槽的配置 > 连接字符串:

  • 添加名称为sqlConnectionString的项,类型选择SQLAzure,值填入生产数据库的连接串;
  • 务必勾选槽设置(该选项会让配置绑定到当前槽,交换槽时不会被替换,保证生产槽始终使用生产数据库连接串)。

3. 调整配置源加载顺序

ASP.NET Core的配置源加载顺序决定了优先级,要让App Service槽配置覆盖Key Vault的设置,需确保App Service配置源在Key Vault之前添加:

var builder = WebApplication.CreateBuilder(args);

// 先加载App Service配置(包含槽配置)
builder.Configuration.AddAzureAppConfiguration();

// 再加载Key Vault配置,此时槽配置优先级更高
var keyVaultUrl = builder.Configuration["KeyVaultUrl"];
if (!string.IsNullOrEmpty(keyVaultUrl))
{
    builder.Configuration.AddAzureKeyVault(
        new Uri(keyVaultUrl),
        new DefaultAzureCredential());
}

// 后续的DbContext配置...

4. 验证槽交换行为

完成上述配置后,交换暂存和生产槽时:

  • 生产槽的sqlConnectionString(绑定槽的设置)会保留;
  • 交换后的生产实例(原暂存槽)会自动使用生产槽的连接字符串,连接到生产数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:42:43