Привязка триггера 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 , connected disconnected . Для определяемых пользователем подпротоколов используется 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 , UserEventRequest DisconnectedEventRequest и MqttDisconnectedEventRequest . |
connectionContext | WebPubSubConnectionContext |
Стандартные сведения о запросе | EventType, EventName, Hub, ConnectionId, UserId, Headers, Origin, Signature, States |
. | BinaryData ,string ,,Stream byte[] |
Запрос данных сообщения от клиента в событии пользователя message |
- |
dataType | WebPubSubDataType |
Запрос данных dataType, который поддерживает binary , text json |
- |
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 |
Для неопределенных сценариев возврата используется базовый тип ответа поддерживаемых типов. | - |