Udostępnij za pośrednictwem


Powiązanie wyzwalacza usługi SignalR Service dla usługi Azure Functions

Użyj powiązania wyzwalacza SignalR, aby reagować na komunikaty wysyłane z usługi Azure SignalR Service. Po wyzwoleniu funkcji komunikaty przekazywane do funkcji są analizowane jako obiekt json.

W trybie bezserwerowym usługi SignalR Service usługa SignalR Service używa funkcji nadrzędnej do wysyłania komunikatów z klienta do aplikacji funkcji. Aplikacja funkcji używa powiązania wyzwalacza usługi SignalR Service do obsługi tych komunikatów. Poniżej przedstawiono ogólną architekturę:

Architektura wyzwalacza signalr

Aby uzyskać informacje na temat konfiguracji i konfiguracji, zobacz omówienie.

Przykład

Funkcję języka C# można utworzyć przy użyciu jednego z następujących trybów języka C#:

  • Model izolowanego procesu roboczego: skompilowana funkcja języka C#, która jest uruchamiana w procesie roboczym izolowanym od środowiska uruchomieniowego. Proces izolowanego procesu roboczego jest wymagany do obsługi funkcji języka C# uruchomionych w wersjach LTS i innych niż LTS platformy .NET oraz programu .NET Framework.
  • Model przetwarzania: skompilowana funkcja języka C#, która działa w tym samym procesie co środowisko uruchomieniowe usługi Functions.
  • Skrypt języka C#: używany głównie podczas tworzenia funkcji języka C# w witrynie Azure Portal.

Ważne

Wsparcie zostanie zakończone dla modelu procesu 10 listopada 2026 r. Zdecydowanie zalecamy przeprowadzenie migracji aplikacji do izolowanego modelu procesu roboczego w celu uzyskania pełnej obsługi.

Poniższy przykład przedstawia funkcję języka C#, która odbiera zdarzenie komunikatu od klientów i rejestruje zawartość komunikatu.

[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);
}

Ważne

Model oparty na klasach powiązań usługi SignalR Service w izolowanym procesu roboczego języka C# nie optymalizuje sposobu pisania wyzwalaczy usługi SignalR z powodu ograniczenia modelu roboczego języka C#. Aby uzyskać więcej informacji na temat modelu opartego na klasach, zobacz Model oparty na klasach.

Wyzwalacz signalR nie jest obecnie obsługiwany dla języka Java.

Oto dane powiązania w pliku 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 ${context.Arguments[0]} from ${triggerInput.ConnectionId}.`)
        }
    })

Kompletne przykłady programu PowerShell są oczekujące.

Oto kod języka 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']))

Atrybuty

Biblioteki języka C# procesu roboczego zarówno w procesie przetwarzania procesowego, jak i izolowanego, używają atrybutu SignalRTrigger do zdefiniowania funkcji. Zamiast tego skrypt języka C# używa pliku konfiguracji function.json.

W poniższej tabeli opisano właściwości atrybutu SignalRTrigger .

Właściwość atrybutu opis
Nazwa centrum Ta wartość musi być ustawiona na nazwę centrum SignalR, aby funkcja została wyzwolona.
Kategoria Tę wartość należy ustawić jako kategorię komunikatów, aby funkcja została wyzwolona. Kategoria może być jedną z następujących wartości:
  • połączenia: dołączanie zdarzeń połączonych i rozłączonych
  • komunikaty: uwzględnianie wszystkich innych zdarzeń z wyjątkiem tych w kategorii połączeń
Zdarzenie Ta wartość musi być ustawiona jako zdarzenie komunikatów, które mają być wyzwalane przez funkcję. W przypadku kategorii wiadomości zdarzenie jest docelowym komunikatem wywołania wysyłanym przez klientów. W przypadku kategorii połączeń używane są tylko połączenia i rozłączenia .
Nazwa parametrów (Opcjonalnie) Lista nazw powiązanych z parametrami.
ConnectionStringSetting Nazwa ustawienia aplikacji, które zawiera parametry połączenia usługi SignalR Service, która jest domyślnie ustawiona na AzureSignalRConnectionString.

Adnotacje

Obecnie nie ma obsługiwanej adnotacji języka Java dla wyzwalacza usługi SignalR.

Konfigurowanie

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

właściwość function.json opis
type Musi być ustawiona wartość SignalRTrigger.
direction Musi być ustawiona wartość in.
name Nazwa zmiennej używana w kodzie funkcji dla obiektu kontekstu wywołania wyzwalacza.
hubName Ta wartość musi być ustawiona na nazwę centrum SignalR, aby funkcja została wyzwolona.
kategoria Tę wartość należy ustawić jako kategorię komunikatów, aby funkcja została wyzwolona. Kategoria może być jedną z następujących wartości:
  • połączenia: dołączanie zdarzeń połączonych i rozłączonych
  • komunikaty: uwzględnianie wszystkich innych zdarzeń z wyjątkiem tych w kategorii połączeń
event Ta wartość musi być ustawiona jako zdarzenie komunikatów, które mają być wyzwalane przez funkcję. W przypadku kategorii wiadomości zdarzenie jest docelowym komunikatem wywołania wysyłanym przez klientów. W przypadku kategorii połączeń używane są tylko połączenia i rozłączenia .
nazwa_parametru (Opcjonalnie) Lista nazw powiązanych z parametrami.
connectionStringSetting Nazwa ustawienia aplikacji, które zawiera parametry połączenia usługi SignalR Service, która jest domyślnie ustawiona na AzureSignalRConnectionString.

Zobacz sekcję Przykład, aby zapoznać się z kompletnymi przykładami.

Użycie

Ładunki

Typ danych wejściowych wyzwalacza jest zadeklarowany jako InvocationContext typ niestandardowy lub niestandardowy. Jeśli wybierzesz opcję InvocationContext, uzyskasz pełny dostęp do zawartości żądania. W przypadku typu niestandardowego środowisko uruchomieniowe próbuje przeanalizować treść żądania JSON w celu ustawienia właściwości obiektu.

InvocationContext

InvocationContext zawiera całą zawartość komunikatu wysyłanego z usługi SignalR, która zawiera następujące właściwości:

Właściwości opis
Argumenty Dostępne dla kategorii wiadomości . Zawiera argumenty w komunikacie wywołania
Błąd Dostępne dla zdarzenia rozłączonego . Może to być puste, jeśli połączenie zostało zamknięte bez błędu lub zawiera komunikaty o błędach.
Piasta Nazwa centrum, do którego należy komunikat.
Kategoria Kategoria wiadomości.
Zdarzenie Zdarzenie wiadomości.
ConnectionId Identyfikator połączenia klienta, który wysyła komunikat.
Identyfikator użytkownika Tożsamość użytkownika klienta, który wysyła komunikat.
Nagłówki Nagłówki żądania.
Query Zapytanie żądania, gdy klienci nawiązują połączenie z usługą.
Roszczenia Oświadczenia klienta.

Korzystanie z akcji ParameterNames

Właściwość ParameterNames w programie SignalRTrigger umożliwia powiązanie argumentów komunikatów wywołania z parametrami funkcji. Możesz użyć nazwy zdefiniowanej jako część wyrażeń powiązań w innych powiązaniach lub jako parametrów w kodzie. Zapewnia to wygodniejszy sposób uzyskiwania dostępu do argumentów .InvocationContext

Załóżmy, że masz klienta SignalR języka JavaScript próbującego wywołać metodę broadcast w funkcji platformy Azure z dwoma argumentami message1: message2.

await connection.invoke("broadcast", message1, message2);

Po ustawieniu parameterNamesnazwy, które zdefiniowano, odpowiadają argumentom wysyłanym po stronie klienta.

[SignalRTrigger(parameterNames: new string[] {"arg1, arg2"})]

Następnie element arg1 zawiera zawartość message1elementu i arg2 zawiera zawartość elementu message2.

ParameterNames Zagadnienia dotyczące

W przypadku powiązania parametru kolejność ma znaczenie. Jeśli używasz ParameterNamesmetody , kolejność w ParameterNames pliku jest zgodna z kolejnością argumentów wywoływanych w kliencie. Jeśli używasz atrybutu [SignalRParameter] w języku C#, kolejność argumentów w metodach funkcji platformy Azure jest zgodna z kolejnością argumentów w klientach.

ParameterNames i atrybut [SignalRParameter] nie może być używany w tym samym czasie lub otrzymasz wyjątek.

Integracja usługi SignalR Service

Usługa SignalR Service wymaga adresu URL, aby uzyskać dostęp do aplikacji funkcji podczas korzystania z powiązania wyzwalacza usługi SignalR Service. Adres URL należy skonfigurować w ustawieniach nadrzędnych po stronie usługi SignalR Service.

Portal nadrzędny

W przypadku korzystania z wyzwalacza usługi SignalR Service adres URL może być prosty i sformatowany w następujący sposób:

<Function_App_URL>/runtime/webhooks/signalr?code=<API_KEY>

Element Function_App_URL można znaleźć na stronie Przegląd aplikacji funkcji i API_KEY jest generowany przez funkcję platformy Azure. Możesz pobrać element API_KEY z signalr_extension w bloku Klucze aplikacji funkcji. Klucz interfejsu API

Jeśli chcesz używać więcej niż jednej aplikacji funkcji razem z jedną usługą SignalR Service, nadrzędna może również obsługiwać złożone reguły routingu. Aby uzyskać więcej informacji, zobacz Ustawienia nadrzędne.

Przykład krok po kroku

Możesz skorzystać z przykładu w usłudze GitHub, aby wdrożyć pokój rozmów w aplikacji funkcji z powiązaniem wyzwalacza usługi SignalR Service i funkcją nadrzędną: Przykład dwukierunkowego pokoju rozmów

Następne kroki