Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте привязку триггера SignalR для реагирования на сообщения, отправляемые из Службы Azure SignalR. При запуске функции сообщения, передаваемые в функцию, анализируются как объект JSON.
В бессерверном режиме Служба SignalR использует для отправки сообщений из клиента в приложение-функцию возможность отправки данных в вышестоящий ресурс. При этом приложение-функция использует для обработки этих сообщений привязку триггера Службы SignalR. Стандартная архитектура показана ниже.
Сведения об установке и настройке см. в обзорной статье.
Пример
Вы можете создать функцию C# с помощью одного из следующих режимов C#:
- Изолированная рабочая модель: скомпилированная функция C#, которая выполняется в рабочем процессе, изолированном от среды выполнения. Изолированный рабочий процесс необходим для поддержки функций C#, работающих в долгосрочной поддержке (LTS) и версиях, отличных от LTS для .NET и .NET Framework.
- Модель в процессе: скомпилированная функция C#, которая выполняется в том же процессе, что и среда выполнения Функций Azure.
- Скрипт 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 ${triggerInput.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.
| Свойство атрибута | Описание |
|---|---|
| Имя концентратора | В качестве значения следует указать имя концентратора SignalR для активируемой функции. |
| Категория | В качестве значения следует указать категорию сообщений для активируемой функции. Категория может быть одним из следующих значений:
|
| Событие | В качестве значения следует указать событие сообщений для активируемой функции. Для категории messages событие является целевым в отправляемом клиентами сообщении о вызове. Для категории connections используется только подключенные и отключенные. |
| ParameterNames | (Не обязательно.) Список имен, привязанных к параметрам. |
| ConnectionStringSetting | Имя коллекции параметров или параметров приложения, содержащей Служба SignalR строка подключения, в которой по умолчанию задано AzureSignalRConnectionStringзначение . |
Заметки
В настоящее время для триггера SignalR не поддерживается заметка Java.
Настройка
В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json.
| Свойство в function.json | Описание |
|---|---|
| тип | Должен иметь значениеSignalRTrigger. |
| направление | Должен иметь значениеin. |
| имя | Имя переменной, используемое в коде функции для объекта контекста вызова триггера. |
| hubName | В качестве значения следует указать имя концентратора SignalR для активируемой функции. |
| категория | В качестве значения следует указать категорию сообщений для активируемой функции. Категория может быть одним из следующих значений:
|
| событие | В качестве значения следует указать событие сообщений для активируемой функции. Для категории messages событие является целевым в отправляемом клиентами сообщении о вызове. Для категории connections используется только подключенные и отключенные. |
| parameterNames | (Не обязательно.) Список имен, привязанных к параметрам. |
| connectionStringSetting | Имя коллекции параметров или параметров приложения, содержащей Служба SignalR строка подключения, в которой по умолчанию задано AzureSignalRConnectionStringзначение . |
Подробные примеры см. в разделе Примеры.
Использование
Connections
Свойство устанавливается на ключ в настройках приложения, который возвращает значение, connectionStringSetting используемое runtime Functions для подключения к экземпляру Служба Azure SignalR, используемому расширением. Значение этого свойства соединения зависит от типа соединения:
-
Управляемое соединение идентичности: свойство
connectionStringSettingявляется<CONNECTION_NAME_PREFIX>общим для группы настроек, которые вместе определяют соединение на основе идентичности с конечной точкой сервиса. Для получения дополнительной информации см. раздел «Определить идентичные связи». -
Key Vault reference:
connectionStringSettingНастройка свойств возвращает ссылку на Azure Key Vault на место, где централизованно поддерживается строка подключения. Для получения дополнительной информации смотрите раздел Define Key Vault connections. -
App Configuration reference:
connectionStringSettingНастройка свойства возвращает ссылку на Конфигурация приложений Azure, которая возвращает строка подключения или ссылку на Key Vault. Для получения дополнительной информации см. Конфигурация приложений Azure в статье о соединениях. -
Connection string: Настройка
connectionStringSettingсвойств возвращает фактическую строка подключения SignalR. Поскольку строка строка подключения содержит общие секретные ключи, следует рассмотреть возможность использования управляемого идентификатора соединения, если это возможно. Для получения дополнительной информации см. раздел «Определить соединения».
Чтобы узнать больше о соединениях связей, см. раздел «Управление соединением в Функции Azure». Чтобы получить строка подключения, следуйте шагам, указанным в разделе «Как получить строки соединения».
Хост Functions ищет ключ или префикс ключа, названный AzureSignalRConnectionString при подключении к вашему сервису SignalR. В противном случае используется установленное значение connectionStringSetting ключа для получения необходимой информации о соединении.
Полезные данные
Тип входных данных триггера объявлен как InvocationContext или пользовательский тип. При выборе InvocationContextвы получите полный доступ к содержимому запроса. При объявлении пользовательского типа среда выполнения попытается проанализировать текст запроса JSON для задания свойств объекта.
КонтекстВызова
InvocationContext содержит все содержимое в сообщении, отправленном из службы SignalR, которая включает следующие свойства:
| Свойство | Описание |
|---|---|
| Аргументы | Доступно для категории messages. Содержит аргументы в сообщении о вызове |
| Ошибка | Доступно для отключенного события. Может быть пустым, если соединение закрыто без ошибок, или содержать сообщения об ошибках. |
| Узел | Имя концентратора, к которому принадлежит сообщение. |
| Категория | Категория сообщения. |
| Мероприятие | Событие сообщения. |
| ConnectionId | Идентификатор подключения клиента, отправляющего сообщение. |
| UserId | Удостоверение пользователя клиента, который отправляет сообщение. |
| Заголовки | Заголовки запроса. |
| Запрос | Требование запроса, когда клиенты подключаются к службе. |
| Претензии | Утверждения клиента. |
С использованием 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 development and configuration with Служба Azure SignalR (Разработка и настройка функций Azure с помощью Службы Azure SignalR)
- Пример привязки триггера Службы SignalR
- пример привязки триггера Служба SignalR в изолированном рабочем процессе