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

Azure托管Blazor应用无法连接Azure SignalR实例部署问题

Blazor Server 部署到 Azure Web App 后未使用 Azure SignalR 服务排查

问题现象

  • 本地运行应用可正常连接 Azure SignalR 实例
  • 部署到 Azure Web App 后连接异常:应用未对接 Azure SignalR 实例,直接与 Web App 本身建立 WebSocket 连接
  • 从 Visual Studio 手动发布、且将 SignalR 添加为服务依赖时,应用可正常使用 SignalR 服务
  • 通过 Azure DevOps CI 流程部署时,应用无法使用 SignalR 服务;核对 Azure 门户端应用配置,未发现两种部署方式存在配置差异

现有配置信息

本地调试配置

本地通过 User Secret 存储 SignalR 连接字符串:

"Azure:SignalR:ConnectionString": "Endpoint=https://<HOST>.service.signalr.net;AccessKey=<KEY>;Version=1.0;"

业务代码配置

已完成基础服务注册与端点映射:

builder.Services.AddServerSideBlazor();
// 其余服务注册逻辑
app.MapBlazorHub();

Azure DevOps 部署任务配置

当前使用的 AzureRmWebAppDeployment@4 部署任务配置如下:

- task: AzureRmWebAppDeployment@4
  displayName: 'Deploy to Azure App Service'
  condition: eq('${{ parameters.slot }}', '')
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: '<SubName>'
    appType: 'webApp'
    WebAppName: '<AppName>'
    ResourceGroupName: '<RG>'
    packageForLinux: '$(System.ArtifactsDirectory)/drop/<App>.zip'

核心排查方向

Visual Studio 手动发布时勾选关联 SignalR 服务依赖,会自动完成两项 DevOps 部署流程默认不执行的操作,这也是两类部署方式效果不一致的核心原因,可按以下优先级排查:

  • 检查发布包内生产环境配置是否覆盖了门户配置
    VS 关联服务依赖发布时,会自动将 SignalR 连接字符串写入发布目录下的appsettings.Production.json,该配置优先级高于 Azure 门户的应用设置。如果 DevOps 构建流程未将正确的 SignalR 连接字符串注入生产配置文件,甚至打包了本地开发环境的空配置,服务端启动时就读取不到有效连接字符串,自动回退到 Web App 自身承载 WebSocket 的模式。
    验证方法:通过 Kudu 进入 Azure Web App 的site/wwwroot目录,下载发布后的appsettings.Production.json文件,检查是否存在Azure:SignalR:ConnectionString配置项、值是否正确。
  • 检查部署任务是否开启配置注入参数
    当前使用的 AzureRmWebAppDeployment@4 任务默认不会自动关联服务依赖的连接字符串,也不会自动执行 JSON 配置替换。VS 发布时默认开启 JSON 配置替换规则,会自动把关联的服务连接字符串注入发布后的配置文件,DevOps 任务未显式配置该参数时不会执行这一步。
    可在部署任务中补充以下参数,确保应用正确加载配置:
    inputs:
      # 保留原有配置参数
      enableXmlTransform: false
      jsonConfigFiles: '**/appsettings.json'
      generateWebConfig: true
      webConfigParameters: '-ASPNETCORE_ENVIRONMENT Production'
    
  • 检查构建产物是否包含 Azure SignalR SDK 程序集
    VS 发布时会自动将所有服务依赖关联的 NuGet 包完整输出到发布目录,如果 DevOps 构建步骤的dotnet publish命令添加了--no-dependencies、程序集裁剪等参数,可能遗漏Microsoft.Azure.SignalR相关程序集。服务端加载不到对应 SDK 时,会直接忽略 Azure SignalR 连接字符串配置,回退到内置 WebSocket 承载模式。
    验证方法:解压 DevOps 构建生成的 zip 部署包,检查根目录是否存在Microsoft.Azure.SignalR.dll文件,若不存在则调整构建的 publish 命令,移除不必要的裁剪参数,确保所有依赖完整输出。
  • 检查运行环境变量是否正确设置
    VS 发布时会自动在生成的 web.config 中设置ASPNETCORE_ENVIRONMENT为Production,如果 DevOps 部署时未配置该环境变量,应用会默认以 Development 环境运行,不会加载生产环境配置,也不会正确读取 Azure 门户的应用设置,最终导致找不到 SignalR 连接字符串。可在 Azure Web App 的「配置-应用程序设置」中确认ASPNETCORE_ENVIRONMENT值为Production,且部署流程不会覆盖该值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 22:54:25