SignalR Service-utlösarbindning för Azure Functions
Använd SignalR-utlösarbindningen för att svara på meddelanden som skickas från Azure SignalR Service. När funktionen utlöses parsas meddelanden som skickas till funktionen som ett json-objekt.
I serverlöst läge i SignalR Service använder SignalR Service funktionen Upstream för att skicka meddelanden från klienten till funktionsappen. Och Funktionsappen använder SignalR Service-utlösarbindning för att hantera dessa meddelanden. Den allmänna arkitekturen visas nedan:
Information om konfiguration och konfigurationsinformation finns i översikten.
Exempel
En C#-funktion kan skapas med något av följande C#-lägen:
- Isolerad arbetsmodell: Kompilerad C#-funktion som körs i en arbetsprocess som är isolerad från körningen. Isolerad arbetsprocess krävs för att stödja C#-funktioner som körs på LTS- och icke-LTS-versioner .NET och .NET Framework.
- Processmodell: Kompilerad C#-funktion som körs i samma process som Functions-körningen.
- C#-skript: Används främst när du skapar C#-funktioner i Azure-portalen.
Viktigt!
Supporten upphör för den pågående modellen den 10 november 2026. Vi rekommenderar starkt att du migrerar dina appar till den isolerade arbetsmodellen för fullt stöd.
Följande exempel visar en C#-funktion som tar emot en meddelandehändelse från klienter och loggar meddelandeinnehållet.
[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);
}
Viktigt!
Klassbaserad modell av SignalR Service-bindningar i C#-isolerad arbetare optimerar inte hur du skriver SignalR-utlösare på grund av begränsningen i C#-arbetsmodellen. Mer information om klassbaserad modell finns i Klassbaserad modell.
SignalR-utlösare stöds för närvarande inte för Java.
Här är bindningsdata i filen 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}.`)
}
})
Slutför PowerShell-exempel väntar.
Här är Python-koden:
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']))
Attribut
C#-bibliotek för både process- och isolerad arbetsprocess använder attributet för att definiera SignalRTrigger
funktionen. C#-skriptet använder i stället en function.json konfigurationsfil.
I följande tabell förklaras egenskaperna för attributet SignalRTrigger
.
Kommentarer
Det finns för närvarande ingen Java-anteckning som stöds för en SignalR-utlösare.
Konfiguration
I följande tabell förklaras de bindningskonfigurationsegenskaper som du anger i filen function.json .
Se avsnittet Exempel för fullständiga exempel.
Användning
Nyttolaster
Indatatypen för utlösaren deklareras som antingen InvocationContext
eller en anpassad typ. Om du väljer InvocationContext
får du fullständig åtkomst till begärandeinnehållet. För en anpassad typ försöker körningen parsa JSON-begärandetexten för att ange objektegenskaperna.
AnropContext
InvocationContext
innehåller allt innehåll i meddelandet som skickas från en SignalR-tjänst, vilket innehåller följande egenskaper:
Property | beskrivning |
---|---|
Argument | Tillgänglig för meddelandekategori . Innehåller argument i anropsmeddelande |
Fel | Tillgänglig för frånkopplad händelse. Den kan vara tom om anslutningen stängdes utan fel eller innehåller felmeddelandena. |
Hubb | Hubbens namn som meddelandet tillhör. |
Kategori | Kategorin för meddelandet. |
Event | Händelsen för meddelandet. |
ConnectionId | Anslutnings-ID för klienten som skickar meddelandet. |
AnvändarID | Användaridentiteten för klienten som skickar meddelandet. |
Sidhuvuden | Sidhuvudena för begäran. |
Fråga | Frågan för begäran när klienter ansluter till tjänsten. |
Anspråk | Klientens anspråk. |
Använda ParameterNames
Med egenskapen ParameterNames
i SignalRTrigger
kan du binda argument för anropsmeddelanden till funktionsparametrarna. Du kan använda det namn som du definierade som en del av bindningsuttryck i andra bindningar eller som parametrar i koden. Det ger dig ett bekvämare sätt att komma åt argument för InvocationContext
.
Anta att du har en JavaScript SignalR-klient som försöker anropa metoden broadcast
i Azure Function med två argument message1
, message2
.
await connection.invoke("broadcast", message1, message2);
När du har angett parameterNames
motsvarar de namn som du har definierat argumenten som skickas på klientsidan.
[SignalRTrigger(parameterNames: new string[] {"arg1, arg2"})]
arg1
Innehåller sedan innehållet message1
i och arg2
innehåller innehållet message2
i .
ParameterNames
Överväganden
För parameterbindningen är ordningen viktig. Om du använder ParameterNames
matchar ordningen i ParameterNames
ordningen för argumenten som du anropar i klienten. Om du använder attributet [SignalRParameter]
i C# matchar argumentordningen i Azure Function-metoder argumentordningen i klienter.
ParameterNames
och attributet [SignalRParameter]
kan inte användas samtidigt, eller så får du ett undantag.
SignalR Service-integrering
SignalR Service behöver en URL för att få åtkomst till funktionsappen när du använder SignalR Service-utlösarbindning. URL:en ska konfigureras i Uppströmsinställningar på SignalR Service-sidan.
När du använder SignalR Service-utlösare kan URL:en vara enkel och formaterad på följande sätt:
<Function_App_URL>/runtime/webhooks/signalr?code=<API_KEY>
Finns Function_App_URL
på funktionsappens översiktssida och API_KEY
genereras av Azure Function. Du kan hämta API_KEY
från signalr_extension
på bladet Appnycklar i Funktionsapp.
Om du vill använda mer än en funktionsapp tillsammans med en SignalR Service kan uppströms också stödja komplexa routningsregler. Mer information finns i Uppströmsinställningar.
Steg för steg-exempel
Du kan följa exemplet i GitHub för att distribuera ett chattrum i funktionsappen med SignalR Service-utlösarbindning och uppströmsfunktion: Dubbelriktad chattrumsexempel