Привязка триггера Azure Web PubSub для Функции Azure

Используйте триггер Azure Web PubSub для обработки событий клиента из службы Azure Web PubSub.

Шаблон конечной точки триггера должен быть задан на стороне службы Web PubSub (портал: параметры —> обработчик событий —> шаблон URL-адреса). В шаблоне конечной точки часть запроса code=<API_KEY>НЕОБХОДИМА, если вы используете приложение-функцию Azure по соображениям безопасности. Ключ можно найти в портал Azure. Найдите ресурс приложения-функции и перейдите к разделу "Функции ->Ключи приложения ">">, webpubsub_extension после развертывания приложения-функции в Azure. Однако этот ключ не нужен при работе с локальными функциями.

<Function_App_Url>/runtime/webhooks/webpubsub?code=<API_KEY>

Снимок экрана: получение системных ключей функции.

Пример

В следующем примере показано, как обрабатывать события пользователей от клиентов.

[Function("Broadcast")]
public static void Run(
[WebPubSubTrigger("<hub>", WebPubSubEventType.User, "message")] UserEventRequest request, ILogger log)
{
    log.LogInformation($"Request from: {request.ConnectionContext.UserId}");
    log.LogInformation($"Request message data: {request.Data}");
    log.LogInformation($"Request message dataType: {request.DataType}");
}

WebPubSubTrigger привязка также поддерживает возвращаемое значение в синхронизированных сценариях, например события системы Connect и пользователя, когда сервер может проверять и отклонять запрос клиента или отправлять сообщения вызывающей программе напрямую. Connectсобытия уважают ConnectEventResponseEventErrorResponse и уважают события пользователя, UserEventResponseа EventErrorResponseтипы rest, не соответствующие текущему сценарию, игнорируются.

[Function("Broadcast")]
public static UserEventResponse Run(
[WebPubSubTrigger("<hub>", WebPubSubEventType.User, "message")] UserEventRequest request)
{
    return new UserEventResponse("[SYSTEM ACK] Received.");
}
const { app, trigger } = require('@azure/functions');

const wpsTrigger = trigger.generic({
    type: 'webPubSubTrigger',
    name: 'request',
    hub: '<hub>',
    eventName: 'message',
    eventType: 'user'
});

app.generic('message', {
    trigger: wpsTrigger,
    handler: async (request, context) => {
        context.log('Request from: ', request.connectionContext.userId);
        context.log('Request message data: ', request.data);
        context.log('Request message dataType: ', request.dataType);
    }
});

WebPubSubTrigger привязка также поддерживает возвращаемое значение в синхронизированных сценариях, например события системы Connect и пользователя, когда сервер может проверять и отклонять запрос клиента или отправлять сообщение клиенту запроса напрямую. В javaScript слабо типизированном языке десериализирован в отношении ключей объектов. И EventErrorResponse имеет самый высокий приоритет, сравниваемый с остальными объектами, то code если он находится в возвращаемом объекте, то он анализируется EventErrorResponse.

app.generic('message', {
    trigger: wpsTrigger,
    handler: async (request, context) => {
          return {
              "data": "ack",
              "dataType" : "text"
          };
    }
});

Примечание.

Полные примеры для этого языка ожидаются.

Примечание.

Расширения Web PubSub для Java пока не поддерживаются.

Настройка

В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json.

Свойство в function.json Свойство атрибута Описание
тип Н/Д Обязательное. Необходимо задать значение webPubSubTrigger.
направление Н/Д Обязательное. Необходимо задать значение in.
имя Н/Д Обязательное. Имя переменной, используемой в коде функции, для параметра, получающего данные события.
втулка Узел Обязательно: в качестве значения следует указать имя концентратора Web PubSub для активируемой функции. Значение атрибута можно установить с более высоким приоритетом или задать в параметрах приложения как глобальное значение.
eventType WebPubSubEventType Обязательно: в качестве значения следует указать тип события сообщений для активируемой функции. Значение должно быть user или system.
eventName Название события Обязательно: в качестве значения следует указать событие сообщений для активируемой функции.

Для system типа события имя события должно находиться в connect, connecteddisconnected.

Для определяемых пользователем подпротоколов используется messageимя события.

Для поддерживаемого системой подпротокола json.webpubsub.azure.v1.имя события — это имя события, определяемое пользователем.
clientProtocols ClientProtocols Необязательный — указывает, какой клиентский протокол может активировать функции триггера Web PubSub.

Допустимы следующие значения без учета регистра:
allпринимает все клиентские протоколы. Значение по умолчанию.
webPubSub: принимает только протоколы Web PubSub.
mqtt: принимает только протоколы MQTT.
connections Connections Необязательно. Массив имен параметров приложения или префиксов коллекции, определяющих исходящие подключения службы Azure Web PubSub. Эти значения используются для проверки защиты от злоупотреблений и подписи. Если не указано, вернитесь к глобальному WebPubSubConnectionString параметру приложения. Если проверка не настроена, проверка пропускается, и все запросы принимаются.
Примере: ["CustomWebPubSubConnection1", "CustomWebPubSubConnection2"]

Внимание

Для оптимальной безопасности приложение-функция должна использовать управляемые удостоверения при подключении к службе Web PubSub вместо использования строки подключения, содержащей общий секретный ключ. Дополнительные сведения см. в статье "Авторизация запроса управляемого удостоверения с помощью идентификатора Microsoft Entra".

Применение

В C# WebPubSubEventRequest — распознаваемый по типу параметр привязки; остальные параметры привязываются по имени. Ознакомьтесь со следующей таблицей для доступных параметров и типов.

В слабо типизированном языке, например JavaScript, name используется function.json для привязки объекта триггера в отношении следующей таблицы сопоставления. И уважение dataTypefunction.json к преобразованию сообщения соответствующим образом, если name задано data значение в качестве объекта привязки для входных данных триггера. Все параметры можно считывать и context.bindingData.<BindingName>JObject преобразовывать.

Имя привязки Тип привязки Описание Свойства
запрос WebPubSubEventRequest Описание вышестоящего запроса Свойство отличается различными типами событий, включая производные классыConnectEventRequest, MqttConnectEventRequest, ConnectedEventRequest, MqttConnectedEventRequest, UserEventRequestDisconnectedEventRequestи MqttDisconnectedEventRequest.
Контекст подключения WebPubSubConnectionContext Стандартные сведения о запросе Тип события, Название события, Хаб, Идентификатор соединения, Идентификатор пользователя, Заголовки, Источник, Подпись, Состояния
. BinaryData,string,,Streambyte[] Запрос данных сообщения от клиента в событии пользователя message -
тип данных WebPubSubDataType Запрос данных dataType, который поддерживает binary, textjson -
требования IDictionary<string, string[]> Утверждения пользователей в системном connect запросе -
запрос IDictionary<string, string[]> Запрос пользователя в системном connect запросе -
субпротоколы IList<string> Доступные подпротоколы в системном connect запросе -
сертификаты клиента IList<ClientCertificate> Список отпечатков сертификатов от клиентов в системном connect запросе -
причина string Причина в системном disconnected запросе -

Внимание

В C# необходимо поместить в первую очередь несколько типов поддерживаемых параметров, т. е. requestdata другие, кроме типа по умолчаниюBinaryData, чтобы сделать привязку функции правильной.

Возвращаемый ответ

WebPubSubTrigger учитывает возвращаемый клиентом ответ на синхронные события connect события и события пользователя. Только соответствующий ответ отправляется обратно в службу, в противном случае он игнорируется. Кроме того, WebPubSubTrigger возвращаемый объект поддерживает пользователей SetState() для управления метаданными подключения и ClearStates() управления ими. И расширение объединяет результаты из возвращаемого значения с исходными из запроса WebPubSubConnectionContext.States. Значение в существующем ключе перезаписывается и добавляется значение в новом ключе.

Тип возвращаемых данных Описание Свойства
ConnectEventResponse Ответ на событие connect Группы, роли, UserId, Subprotocol
UserEventResponse Ответ на событие пользователя Тип данных, Данные
EventErrorResponse Ответ с ошибкой для события синхронизации Код, ErrorMessage
*WebPubSubEventResponse Для неопределенных сценариев возврата используется базовый тип ответа поддерживаемых типов. -