Поделиться через


Привязка триггера 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события уважают ConnectEventResponse UserEventResponse и уважают события пользователя, EventErrorResponseа 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 Свойство атрибута Описание
type Н/Д Обязательное. Необходимо задать значение webPubSubTrigger.
direction Н/Д Обязательное. Необходимо задать значение in.
name Н/Д Обязательное. Имя переменной, используемой в коде функции, для параметра, получающего данные события.
hub Узел Обязательно: в качестве значения следует указать имя концентратора Web PubSub для активируемой функции. Значение атрибута можно установить с более высоким приоритетом или задать в параметрах приложения как глобальное значение.
eventType WebPubSubEventType Обязательно: в качестве значения следует указать тип события сообщений для активируемой функции. Значение должно быть user или system.
eventName EventName Обязательно: в качестве значения следует указать событие сообщений для активируемой функции.

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

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

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

Допустимы следующие значения без учета регистра:
allпринимает все клиентские протоколы. Значение по умолчанию.
webPubSub: принимает только протоколы Web PubSub.
mqtt: принимает только протоколы MQTT.
Подключение Connection Необязательно. Имя параметров или коллекции параметров приложения, указывающее вышестоящую службу Azure Web PubSub. Значение используется для проверки подписи. Значение автоматически разрешается с параметрами WebPubSubConnectionString приложения по умолчанию. И null означает, что проверка не требуется и всегда выполняется успешно.

Применение

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

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

Имя привязки Тип привязки Description Свойства
запрос WebPubSubEventRequest Описание вышестоящего запроса Свойство отличается различными типами событий, включая производные классыConnectEventRequest, MqttConnectEventRequest, ConnectedEventRequest, MqttConnectedEventRequest, UserEventRequestDisconnectedEventRequestи MqttDisconnectedEventRequest.
connectionContext WebPubSubConnectionContext Стандартные сведения о запросе EventType, EventName, Hub, ConnectionId, UserId, Headers, Origin, Signature, States
. BinaryData,string,,Streambyte[] Запрос данных сообщения от клиента в событии пользователя message -
dataType WebPubSubDataType Запрос данных dataType, который поддерживает binary, textjson -
claims IDictionary<string, string[]> Утверждения пользователей в системном connect запросе -
query IDictionary<string, string[]> Запрос пользователя в системном connect запросе -
subprotocols IList<string> Доступные подпротоколы в системном connect запросе -
clientCertificates IList<ClientCertificate> Список отпечатков сертификатов от клиентов в системном connect запросе -
reason string Причина в системном disconnected запросе -

Внимание

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

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

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

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