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 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:
|
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 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