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

Azure部署槽交换后旧生产槽未正确读取Staging设置求助

Azure部署槽交换后配置读取异常问题排查与解决

问题背景

我用Azure部署槽区分生产槽和Staging槽,执行槽交换后出现以下异常:

  • 原Staging槽转为新生产槽,能正常读取对应应用设置
  • 原生产槽转为新Staging槽后,自动重启后仍读取生产环境配置,只有手动重启该槽才能获取正确的Staging设置
  • 额外问题:WEBSITE_HOSTNAME在交换后仍保留Staging槽的值,需重启才会更新,还会导致停机
  • 已尝试使用IOptionsMonitor<MyOptions>并注册OnChange变更处理程序,但完全无效
  • 交换后新Staging槽(原生产槽)确实会自动重启,但通过单例服务构造函数的日志验证,它启动时还是读取生产配置
  • 该问题导致两个实例同时以生产模式运行,争夺资源引发竞态条件

排查方向与解决方法

1. 确认「槽设置」标记是否正确配置

Azure部署槽的设置分为槽特定设置和全局设置:

  • 只有标记为「槽设置」的配置,在槽交换时会保留给对应槽,不会被交换
  • 确保生产/Staging专属配置(如数据库连接字符串、环境标识)都已勾选「槽设置」复选框
  • 操作路径:Azure门户 → 目标应用服务 → 部署槽 → 对应槽 → 配置 → 应用设置 → 找到目标设置并勾选「槽设置」

2. 修正单例服务的配置读取逻辑

单例服务的构造函数仅在应用启动时执行一次,如果在此阶段直接读取配置值,后续配置变更无法同步:

  • 不要在单例构造函数中绑定配置值,改为注入IOptionsMonitor<MyOptions>,在业务方法中实时获取CurrentValue
  • 示例代码:
    public class MySingletonService
    {
        private readonly IOptionsMonitor<MyOptions> _optionsMonitor;
    
        public MySingletonService(IOptionsMonitor<MyOptions> optionsMonitor)
        {
            _optionsMonitor = optionsMonitor;
            // 避免在此处读取CurrentValue,改为在需要时获取
        }
    
        public void ExecuteBusinessLogic()
        {
            var currentConfig = _optionsMonitor.CurrentValue;
            // 使用最新配置执行业务操作
        }
    }
    

3. 强制槽交换后触发配置刷新

若自动重启未加载新配置,可通过自定义脚本或CLI命令强制刷新:

  • 添加Post交换脚本:在部署槽「部署中心」→「部署选项」中,配置Post交换脚本执行配置刷新操作
  • Azure CLI命令示例:
    az webapp config appsettings set --name <你的应用名> --resource-group <资源组名> --slot <Staging槽名> --settings FORCE_CONFIG_REFRESH=true
    

4. 修复WEBSITE_HOSTNAME异常问题

WEBSITE_HOSTNAME是Azure自动管理的槽特定设置,若交换后未更新:

  • 检查是否有自定义部署脚本修改过该环境变量
  • 应用中实时获取该值,不要缓存:
    var currentHostname = Environment.GetEnvironmentVariable("WEBSITE_HOSTNAME");
    

5. 启用部署槽预热功能

开启预热可确保槽切换前加载正确配置,避免交换后出现异常:

  • 操作路径:Azure门户 → 目标应用服务 → 部署槽 → 对应槽 → 配置 → 常规设置 → 开启「预热实例」选项
  • 预热会在交换流量前完成新槽的启动与配置加载,保证切换后配置立即生效

内容的提问来源于stack exchange,提问作者Aviad P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:32:36