Привязка триггера Службы SignalR для службы "Функции Azure"
Используйте привязку триггера SignalR для реагирования на сообщения, отправляемые из Службы Azure SignalR. При запуске функции сообщения, передаваемые в функцию, анализируются как объект JSON.
В бессерверном режиме Служба SignalR использует для отправки сообщений из клиента в приложение-функцию возможность отправки данных в вышестоящий ресурс. При этом приложение-функция использует для обработки этих сообщений привязку триггера Службы SignalR. Стандартная архитектура показана ниже.
Сведения об установке и настройке см. в обзорной статье.
Пример
Функцию C# можно создать с помощью одного из следующих режимов C#:
- Изолированная рабочая модель: скомпилированная функция C#, которая выполняется в рабочем процессе, изолированном от среды выполнения. Изолированный рабочий процесс необходим для поддержки функций C#, работающих в LTS и не LTS-версиях .NET и платформа .NET Framework.
- Модель внутрипроцессного процесса: скомпилированная функция C#, которая выполняется в том же процессе, что и среда выполнения Функций.
- Скрипт C#: используется в основном при создании функций C# в портал Azure.
Внимание
Поддержка будет завершена для модели в процессе 10 ноября 2026 г. Настоятельно рекомендуется перенести приложения в изолированную рабочую модель для полной поддержки.
В следующем примере показана функция C#, которая получает событие сообщения от клиентов и регистрирует содержимое сообщения.
[Function(nameof(OnClientMessage))]
public static void OnClientMessage(
[SignalRTrigger("Hub", "messages", "sendMessage", "content", ConnectionStringSetting = "SignalRConnection")]
SignalRInvocationContext invocationContext, string content, FunctionContext functionContext)
{
var logger = functionContext.GetLogger(nameof(OnClientMessage));
logger.LogInformation("Connection {connectionId} sent a message. Message content: {content}", invocationContext.ConnectionId, content);
}
Внимание
Модель на основе классов Служба SignalR привязок в изолированной рабочей роли C# не оптимизирует способ записи триггеров SignalR из-за ограничения рабочей модели C#. Дополнительные сведения о модели на основе классов см. в разделе "Модель на основе классов".
Триггер SignalR в настоящее время не поддерживается для Java.
Данные привязки в файле function.json:
{
"type": "signalRTrigger",
"name": "invocation",
"hubName": "hubName1",
"category": "messages",
"event": "SendMessage",
"parameterNames": [
"message"
],
"direction": "in"
}
app.generic("function1",
{
trigger: { "type": "signalRTrigger", "name": "invocation", "direction": "in", "hubName": "hubName1", "event": "SendMessage", "category": "messages" },
handler: (triggerInput, context) => {
context.log(`Receive ${context.Arguments[0]} from ${triggerInput.ConnectionId}.`)
}
})
Скоро должны появиться полные примеры PowerShell.
Ниже приведен код Python.
import logging
import json
import azure.functions as func
def main(invocation) -> None:
invocation_json = json.loads(invocation)
logging.info("Receive {0} from {1}".format(invocation_json['Arguments'][0], invocation_json['ConnectionId']))
Атрибуты
Библиотеки C# в процессе и изолированном рабочем процессе используют SignalRTrigger
атрибут для определения функции. Вместо этого в скрипте C# используется файл конфигурации function.json.
В следующей таблице описываются свойства атрибута SignalRTrigger
.
Свойство атрибута | Description |
---|---|
HubName | В качестве значения следует указать имя концентратора SignalR для активируемой функции. |
Категория | В качестве значения следует указать категорию сообщений для активируемой функции. Категория может быть одним из следующих значений:
|
Событие | В качестве значения следует указать событие сообщений для активируемой функции. Для категории messages событие является целевым в отправляемом клиентами сообщении о вызове. Для категории connections используется только подключенные и отключенные. |
ParameterNames | (Не обязательно.) Список имен, привязанных к параметрам. |
ConnectionStringSetting | Имя параметра приложения, который содержит строку подключения службы SignalR (по умолчанию используется AzureSignalRConnectionString ). |
Заметки
В настоящее время для триггера SignalR не поддерживается заметка Java.
Настройка
В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json.
Свойство в function.json | Описание |
---|---|
type | Должен иметь значениеSignalRTrigger . |
direction | Должен иметь значениеin . |
name | Имя переменной, используемое в коде функции для объекта контекста вызова триггера. |
hubName | В качестве значения следует указать имя концентратора SignalR для активируемой функции. |
category | В качестве значения следует указать категорию сообщений для активируемой функции. Категория может быть одним из следующих значений:
|
event | В качестве значения следует указать событие сообщений для активируемой функции. Для категории messages событие является целевым в отправляемом клиентами сообщении о вызове. Для категории connections используется только подключенные и отключенные. |
parameterNames | (Не обязательно.) Список имен, привязанных к параметрам. |
connectionStringSetting | Имя параметра приложения, который содержит строку подключения службы SignalR (по умолчанию используется AzureSignalRConnectionString ). |
Подробные примеры см. в разделе Примеры.
Использование
Полезные данные
Тип входных данных триггера объявлен как InvocationContext
или пользовательский тип. При выборе InvocationContext
вы получите полный доступ к содержимому запроса. При объявлении пользовательского типа среда выполнения попытается проанализировать текст запроса JSON для задания свойств объекта.
InvocationContext
InvocationContext
содержит все содержимое в сообщении, отправленном из службы SignalR, которая включает следующие свойства:
Свойство | Description |
---|---|
Аргументы | Доступно для категории messages. Содержит аргументы в сообщении о вызове |
Ошибка | Доступно для отключенного события. Может быть пустым, если соединение закрыто без ошибок, или содержать сообщения об ошибках. |
Узел | Имя концентратора, к которому принадлежит сообщение. |
Категория | Категория сообщения. |
Мероприятие | Событие сообщения. |
ConnectionId | Идентификатор подключения клиента, отправляющего сообщение. |
UserId | Удостоверение пользователя клиента, который отправляет сообщение. |
Заголовки | Заголовки запроса. |
Query | Требование запроса, когда клиенты подключаются к службе. |
Претензии | Утверждения клиента. |
С использованием ParameterNames
Свойство ParameterNames
в SignalRTrigger
позволяет привязывать аргументы сообщений о вызове к параметрам функций. Определенное пользователем имя можно использовать в рамках выражений привязки в других привязках или как параметры в коде. Это предоставляет более удобный способ доступа к аргументам InvocationContext
.
Предположим, у вас есть клиент SignalR для JavaScript, пытающийся вызвать метод broadcast
в функции Azure с двумя аргументами message1
и message2
.
await connection.invoke("broadcast", message1, message2);
После установки parameterNames
заданные имена будут соответствовать аргументам, отправляемым на стороне клиента.
[SignalRTrigger(parameterNames: new string[] {"arg1, arg2"})]
arg1
Затем содержит содержимое message1
и arg2
содержит содержимоеmessage2
.
Рекомендации для ParameterNames
Для привязки параметра важен порядок. Если используется ParameterNames
, порядок в ParameterNames
совпадает с порядком аргументов, которые вызываются в клиенте. Если вы используете атрибут [SignalRParameter]
в C#, порядок аргументов в методах функции Azure соответствует порядку аргументов в клиентах.
ParameterNames
и атрибут [SignalRParameter]
нельзя использовать одновременно или вы получите исключение.
Интеграция Службы SignalR
При использовании привязки триггера Службы SignalR этой службе требуется URL-адрес для доступа к приложению-функции. URL-адрес должен быть настроен стороне Службы SignalR в параметрах вышестоящего ресурса.
При использовании триггера Служба SignalR URL-адрес может быть простым и отформатированным следующим образом:
<Function_App_URL>/runtime/webhooks/signalr?code=<API_KEY>
Его Function_App_URL
можно найти на странице обзора приложения-функции и API_KEY
создается функцией Azure. API_KEY
можно получить из signalr_extension
в колонке Ключи приложения в приложении-функции.
Если вы хотите использовать несколько приложений-функций вместе с одной Службой SignalR, вышестоящий ресурс может также поддерживать сложные правила маршрутизации. Дополнительные сведения см. в статье о параметрах отправки данных в вышестоящий ресурс.
Пошаговый пример
Вы можете развернуть комнату чата в приложении-функции с помощью привязки триггера Службы SignalR и возможности отправки данных в вышестоящий ресурс, воспользовавшись примером двунаправленного чата в GitHub.
Следующие шаги
- Azure Functions development and configuration with Azure SignalR Service (Разработка и настройка функций Azure с помощью Службы Azure SignalR)
- Пример привязки триггера Службы SignalR
- пример привязки триггера Служба SignalR в изолированном рабочем процессе