Azure SignalR Javascript Согласование "Невозможно разрешить ... ConnectionStringSetting" - PullRequest
0 голосов
/ 23 апреля 2020

Я начал возиться с Azure SignalR и столкнулся с проблемой с отрицательным триггером. Я следовал этому официальному руководству Microsoft:

Вот мой код:

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;
};

Локально работает (к сожалению, там заканчивается руководство). Но если я посещаю URL согласованного http-триггера, я получаю «Internal Server Error 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.

Некоторые люди предположили, что это из-за прописных / строчных букв 'C' в ConnectionStringSetting. Другие сказали, чтобы редактировать local.settings. json. Ничто из этого не повлияло на меня, и я не могу найти никакой полезной информации по этому вопросу.

РЕДАКТИРОВАТЬ 1: Я установил "hubName":"jitsi". С jitsi - это название моей службы SignalR. Как в 'jitsi.service.signalr. net'. Я не уверен, правильно это или нет. Возможно, это является частью проблемы?

РЕДАКТИРОВАТЬ 2: Я пытался без значения для ConnectionStringSetting (так что он идет по умолчанию). Дали мне ту же ошибку. Я также полностью удалил содержимое local.settings.json и затем повторно развернул его, чтобы посмотреть, что произойдет. Такое же поведение, как и раньше. Я предполагаю, что служба использует файл только для локального использования (отсюда и название). Так что, если local.settings.json пусто, нет другого места, где я определил значение для AzureSignalRConnectionString. Я немного покопался и, по-видимому (согласно этой теме) вы должны определить его в

'Конфигурация' -> 'Настройки приложения'

Так что я создал новую настройку с

name: Azure__SignalR__ConnectionString

value: 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.

1 Ответ

0 голосов
/ 23 апреля 2020

Я нашел решение этой проблемы:

Сначала я запутался и подумал, что local.settings.json послужит конфигурацией для действующей / нелокальной версии функции. Это не тот случай. Это только для локального выполнения (мог бы догадаться по имени файла)

Таким образом, остается вопрос: Где / Как я могу отредактировать необходимые настройки в Azure Портале?

Ответ: Главная страница -> Все службы -> Function-App -> MyFunctionApp -> Функции платформы -> Конфигурация -> Параметры приложения -> Создать новый параметр приложения

name: AzureSignalRConnectionString value 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"
    }
  ]
}

С этими настройками у меня теперь работает.

...