Udostępnij przez


Powiązanie wyzwalacza usługi Azure Web PubSub dla usługi Azure Functions

Użyj wyzwalacza Azure Web PubSub, aby obsługiwać zdarzenia klienta z usługi Azure Web PubSub.

Wzorzec punktu końcowego wyzwalacza będzie następujący, który powinien być ustawiony po stronie usługi Web PubSub (portal: ustawienia —> procedura obsługi zdarzeń —> szablon adresu URL). We wzorcu punktu końcowego część code=<API_KEY> zapytania jest wymagana , gdy używasz aplikacji funkcji platformy Azure ze względów bezpieczeństwa . Klucz można znaleźć w witrynie Azure Portal. Znajdź zasób aplikacji funkcji i przejdź do pozycji Funkcje ->Klucze aplikacji ->Klucze systemowe ->webpubsub_extension po wdrożeniu aplikacji funkcji na platformie Azure. Jednak ten klucz nie jest potrzebny podczas pracy z funkcjami lokalnymi.

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

Zrzut ekranu przedstawiający pobieranie kluczy systemowych funkcji.

Przykład

W poniższym przykładzie pokazano, jak obsługiwać zdarzenia użytkownika z klientów.

[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 Powiązanie obsługuje również wartość zwracaną w scenariuszach synchronizacji, na przykład zdarzenia systemu Connect i użytkownika, gdy serwer może sprawdzać i odrzucać żądanie klienta lub wysyłać komunikaty bezpośrednio do obiektu wywołującego. Connectzdarzenia z uwzględnieniem ConnectEventResponseEventErrorResponse zdarzeń i UserEventResponse, oraz zdarzeń użytkownika i EventErrorResponse, typy rest nie pasujące do bieżącego scenariusza są ignorowane.

[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 Powiązanie obsługuje również wartość zwracaną w scenariuszach synchronizacji, na przykład zdarzenia systemu Connect i użytkownika, gdy serwer może sprawdzić i odrzucić żądanie klienta lub wysłać wiadomość bezpośrednio do klienta żądania. W języku JavaScript w słabym typie jest to deserializowane w odniesieniu do kluczy obiektów. I EventErrorResponse ma najwyższy priorytet w porównaniu z obiektami rest, że jeśli code jest w zwracaniu, to jest analizowany na EventErrorResponse.

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

Uwaga

Kompletne przykłady dla tego języka są oczekujące.

Uwaga

Rozszerzenia Web PubSub dla języka Java nie są jeszcze obsługiwane.

Konfigurowanie

W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione w pliku function.json .

właściwość function.json Właściwość atrybutu opis
typ nie dotyczy Wymagane — musi być ustawiona na webPubSubTriggerwartość .
kierunek nie dotyczy Wymagane — musi być ustawiona na inwartość .
nazwa nie dotyczy Required — nazwa zmiennej używana w kodzie funkcji dla parametru, który odbiera dane zdarzenia.
koncentrator Piasta Wymagane — wartość musi być ustawiona na nazwę centrum Web PubSub, aby funkcja została wyzwolona. Obsługujemy ustawianie wartości w atrybucie jako wyższy priorytet lub można ją ustawić w ustawieniach aplikacji jako wartość globalną.
typ zdarzenia WebPubSubEventType Wymagane — wartość musi być ustawiona jako typ zdarzenia komunikatów, które mają być wyzwalane przez funkcję. Wartość powinna mieć wartość user lub system.
eventName Nazwa wydarzenia Wymagane — wartość musi być ustawiona jako zdarzenie komunikatów, które mają być wyzwalane przez funkcję.

W przypadku system typu zdarzenia nazwa zdarzenia powinna mieć connectwartość , connected, disconnected.

W przypadku podprotocol zdefiniowanych przez użytkownika nazwa zdarzenia to message.

W przypadku podprotocol json.webpubsub.azure.v1.obsługiwanego przez system nazwa zdarzenia to nazwa zdarzenia zdefiniowanego przez użytkownika.
clientProtocols Kolumny ClientProtocols Opcjonalne — określa, który protokół klienta może wyzwalać funkcje wyzwalacza Web PubSub.

Następujące wartości bez uwzględniania wielkości liter są prawidłowe:
all: akceptuje wszystkie protokoły klienta. Wartość domyślna.
webPubSub: akceptuje tylko protokoły Web PubSub.
mqtt: akceptuje tylko protokoły MQTT.
połączenie Połączenie Opcjonalnie — nazwa ustawień aplikacji lub kolekcji ustawień, która określa nadrzędną usługę Azure Web PubSub. Wartość jest używana do walidacji podpisu. A wartość jest automatycznie rozpoznawana za pomocą ustawień WebPubSubConnectionString aplikacji domyślnie. Oznacza to null , że weryfikacja nie jest potrzebna i zawsze kończy się powodzeniem.

Ważne

Aby zapewnić optymalne zabezpieczenia, aplikacja funkcji powinna używać tożsamości zarządzanych podczas nawiązywania połączenia z usługą Web PubSub zamiast używać parametrów połączenia, które zawierają wspólny klucz tajny. Aby uzyskać więcej informacji, zobacz Autoryzowanie żądania tożsamości zarządzanej przy użyciu identyfikatora Entra firmy Microsoft.

Zwyczaje

W języku C# WebPubSubEventRequest jest typem rozpoznany parametr powiązania, parametry rest są powiązane przez nazwę parametru. Zapoznaj się z poniższą tabelą pod kątem dostępnych parametrów i typów.

W słabo wpisanym języku, na przykład JavaScript, name w function.json jest używany do powiązania obiektu wyzwalacza dotyczącego poniższej tabeli mapowania. I uwzględnianie dataType w function.json celu odpowiedniego przekonwertowania komunikatu, gdy name jest ustawiony data jako obiekt powiązania dla danych wejściowych wyzwalacza. Wszystkie parametry można odczytać i context.bindingData.<BindingName> przekonwertować JObject .

Nazwa powiązania Typ powiązania opis Właściwości
żądanie WebPubSubEventRequest Opisuje żądanie nadrzędne Właściwość różni się w zależności od różnych typów zdarzeń, w tym klas pochodnych ConnectEventRequest, MqttConnectEventRequest, ConnectedEventRequest, MqttConnectedEventRequest, UserEventRequest, DisconnectedEventRequest, i MqttDisconnectedEventRequest.
kontekst połączenia WebPubSubConnectionContext Typowe informacje o żądaniu Typ zdarzenia, Nazwa zdarzenia, Hub, ConnectionId, UserId, Nagłówki, Origin, Podpis, Stany
dane BinaryData,string,Stream,byte[] Żądanie danych komunikatów od klienta w zdarzeniu użytkownika message -
Datatype WebPubSubDataType Request message dataType, który obsługuje binary, , textjson -
oświadczenia IDictionary<string, string[]> Oświadczenia użytkownika w żądaniu systemowym connect -
zapytanie IDictionary<string, string[]> Zapytanie użytkownika w żądaniu systemowym connect -
subprotokoły IList<string> Dostępne podprotocols w żądaniu systemowym connect -
certyfikaty klientów IList<ClientCertificate> Lista odcisków palca certyfikatu od klientów w żądaniu systemowym connect -
powód string Przyczyna żądania systemowego disconnected -

Ważne

W języku C#, wiele typów obsługiwanych parametrów MUSI być umieszczonych w pierwszym, tj. request lub data innym niż domyślny BinaryData typ, aby powiązanie funkcji było poprawne.

Zwracana odpowiedź

WebPubSubTrigger szanuje, że klient zwrócił odpowiedź na zdarzenia synchroniczne zdarzenia connect i zdarzenia użytkownika. Tylko dopasowana odpowiedź jest wysyłana z powrotem do usługi, w przeciwnym razie jest ignorowana. WebPubSubTrigger Poza tym obiekt return obsługuje użytkowników w celu SetState() zarządzania metadanymi połączenia i ClearStates() zarządzania nimi. Rozszerzenie scala wyniki z wartości zwracanej z oryginalnymi z żądania WebPubSubConnectionContext.States. Wartość w istniejącym kluczu jest zastępowana, a wartość w nowym kluczu jest dodawana.

Zwracany typ opis Właściwości
ConnectEventResponse Odpowiedź na connect zdarzenie Grupy, role, UserId, Subprotocol
UserEventResponse Odpowiedź na zdarzenie użytkownika TypDanych, Dane
EventErrorResponse Odpowiedź na błąd zdarzenia synchronizacji Kod, ErrorMessage
*WebPubSubEventResponse Podstawowy typ odpowiedzi obsługiwanych używanych w przypadku niepewnych przypadków powrotu -