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ę:
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:
|
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 kolekcji ustawień lub ustawień aplikacji, która 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:
|
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 kolekcji ustawień lub ustawień aplikacji, która 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
Połączenia oparte na tożsamościach zarządzanych
W celu zapewnienia optymalnego bezpieczeństwa aplikacja funkcji powinna używać zarządzanych tożsamości podczas nawiązywania połączenia z usługą Azure SignalR, a nie przy użyciu parametry połączenia, która zawiera wspólny klucz tajny. Aby uzyskać więcej informacji, zobacz Autoryzowanie żądań do zasobów usługi Azure SignalR Service za pomocą tożsamości zarządzanych firmy Microsoft Entra.
Ł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 parameterNames
nazwy, które zdefiniowano, odpowiadają argumentom wysyłanym po stronie klienta.
[SignalRTrigger(parameterNames: new string[] {"arg1, arg2"})]
Następnie element arg1
zawiera zawartość message1
elementu i arg2
zawiera zawartość elementu message2
.
ParameterNames
Zagadnienia dotyczące
W przypadku powiązania parametru kolejność ma znaczenie. Jeśli używasz ParameterNames
metody , 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.
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.
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