无法从Azure应用服务配置应用程序设置中读取Azure SignalR连接字符串

问题描述

我正在使用Azure SignalR应用程序,并且在我的appsettings.json中设置以下部分时,在本地计算机上一切正常:

 "Azure": {
    "SignalR": {
      "ConnectionString": "XXXXX"
    }
  }

然后在我的startup.cs中进行初始化,如下所示:

services.AddSignalR().AddAzureSignalR();

但是,当我使用App Service>配置> ApplicationSettings在Azure App Service中创建相同的环境变量时:

enter image description here

我的应用程序无法启动,并且出现以下应用程序错误

System.ArgumentException: Connection string missing required properties endpoint and accesskey. (Parameter 'connectionString')
   at Microsoft.Azure.SignalR.ConnectionStringParser.Parse(String connectionString)
   at Microsoft.Azure.SignalR.ServiceEndpoint..ctor(String connectionString,EndpointType type,String name)

当我将连接字符串硬性化到AddAzureSignalR()connectionstring参数上并部署一切正常时。

尽管azuresignalR能够通过“ Kudo Appsettings”页面以Azure:sginalR:ConnectionString的形式查看,但似乎无法拾取此环境变量。

解决方法

您需要这样发起,

 string azureSignalrConnectionString = configuration["Azure:SignalR:ConnectionString"];
 services.AddSignalR().AddNewtonsoftJsonProtocol().AddAzureSignalR(options =>
 {
        options.ConnectionString = azureSignalrConnectionString;
 });
,

所以我在Azure SignalR github页面上问了同样的问题,下面是我得到的答案:

EnvironmentVariablesConfigurationProvider自动替换__ 与:。因此,当您通过环境配置连接字符串时 变量,则应使用Azure__SignalR__ConnectionString作为键。 通过JSON文件进行配置时,应使用原始密钥 Azure:SignalR:ConnectionString。

一旦我将其更改为双下划线都有效