【问题标题】:Azure SignalR Javascript Negotiate "Unable to resolve ...ConnectionStringSetting"Azure SignalR Javascript 协商“无法解析 ...ConnectionStringSetting”
【发布时间】:2020-04-23 21:24:46
【问题描述】:

我开始修补 Azure SignalR,但遇到了 negiotate 触发器的问题。 我关注了this微软官方指南:

这是我的代码:

local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureSignalRConnectionString": "Endpoint=https://my.service.signalr.net;AccessKey=myKey=;Version=1.0;",
    "FUNCTIONS_WORKER_RUNTIME": "node"
  },
  "Host": {
    "LocalHttpPort": 7071,
    "CORS": "*",
    "CORSCredentials": true
  }
}

函数.json

{
  "disabled": false,
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get"
      ],
      "name": "req",
      "route": "negotiate"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "type": "SignalRConnectionInfo",
      "name": "connectionInfo",
      "hubName": "jitsi",
      "ConnectionStringSetting": "Endpoint=https://my.service.signalr.net;AccessKey=myKey;Version=1.0;",
      "direction": "in"
    }
  ]
}

index.js

module.exports = async function (context, req, connectionInfo) {
    context.res.body = connectionInfo;
};

它在本地运行良好(不幸的是,这就是指南结束的地方)。但是,如果我访问协商 http-trigger 的 URL,我会得到“内部服务器错误 500”。日志包含以下输出。

2020-04-23T08:47:32  Welcome, you are now connected to log-streaming service. The default timeout is 2 hours. Change the timeout with the App Setting SCM_LOGSTREAM_TIMEOUT (in seconds). 
2020-04-23T08:47:52.070 [Information] Executing 'Functions.jitsiNegotiate' (Reason='This function was programmatically called via the host APIs.', Id=2b791d95-3775-47bb-ade1-ac9005929f61)
2020-04-23T08:47:52.238 [Error] Executed 'Functions.jitsiNegotiate' (Failed, Id=2b791d95-3775-47bb-ade1-ac9005929f61)
Unable to resolve the value for property 'SignalRConnectionInfoAttribute.ConnectionStringSetting'. Make sure the setting exists and has a valid value.

正如您在我的代码中看到的,我确实提供了ConnectionStringSetting

有些人认为这是由于ConnectionStringSetting 中的小写/大写“C”。 其他人说要编辑local.settings.json。 这些都对我没有任何影响,我找不到任何关于这个问题的有用信息。

编辑 1: 我设置了"hubName":"jitsi"jitsi 是我的 SignalR 服务的名称。 如'jitsi.service.signalr.net'。我不确定这是否正确。 也许这就是问题的一部分?

编辑 2: 我尝试没有为ConnectionStringSetting 设置任何值(使其变为默认值)。 给了我同样的错误。我也彻底删除了local.settings.json的所有内容,然后重新部署看看会发生什么。 与以前相同的行为。 我的猜测是该服务仅将文件用于本地使用(因此得名)。 因此,在local.settings.json 为空的情况下,没有其他地方可以定义AzureSignalRConnectionString 的值。 我做了一些挖掘,显然(根据this 线程)你应该在

下定义它

'配置'->'应用程序设置'

所以我用

创建了一个新设置

名称:Azure__SignalR__ConnectionString

值:myMaskedConnectionString

导致以下错误:

The SignalR Service connection string must be set either via an 'AzureSignalRConnectionString' app setting, via an 'AzureSignalRConnectionString' environment variable, or directly in code via SignalROptions.ConnectionString or SignalRConnectionInfoAttribute.ConnectionStringSetting.

【问题讨论】:

  • ConnectionStringSetting 值应该是AzureSignalRConnectionString,而不是字符串内容。
  • 只是为了清楚。这就是你的意思:... "hubName": "jitsi", "ConnectionStringSetting": "AzureSignalRConnectionString", "direction": "in" ...
  • 是的,它应该是包含 SignalR 服务连接字符串的应用程序设置的名称,请查看此文档。docs.microsoft.com/en-us/azure/azure-functions/…
  • 我试过了。和以前一样的错误。无论如何,默认值似乎是“AzureSignalRConnectionString”。所以我也可以省略它对吗?
  • 您是在本地测试还是在门户网站上测试?

标签: azure signalr azure-function-app azure-signalr


【解决方案1】:

我找到了解决这个问题的方法:

起初我很困惑,并认为local.settings.json 将用作该功能的实时/非本地版本的配置。事实并非如此。仅用于本地执行(可以通过文件名猜到)

所以问题仍然存在:在哪里/如何在 Azure 门户中编辑所需的设置?

答案:首页 -> 所有服务 -> Function-App -> MyFunctionApp -> 平台功能 -> 配置 -> 应用程序设置 -> 新建应用程序设置

名称:AzureSignalRConnectionString 值 MyMaskedConnectionString

然后在function.json 中这样:

{
  "disabled": false,
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get"
      ],
      "name": "req",
      "route": "negotiate"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "type": "SignalRConnectionInfo",
      "name": "connectionInfo",
      "hubName": "jitsi",
      "direction": "in",
      "connectionStringSetting": "AzureSignalRConnectionString"
    }
  ]
}

有了这些设置,它现在对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    相关资源
    最近更新 更多