Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
Du kan skapa en C#-funktion 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. En isolerad arbetsprocess krävs för att stödja C#-funktioner som körs på långsiktig support (LTS) och icke-LTS-versioner för .NET och .NET Framework.
- Processmodell: Kompilerad C#-funktion som körs i samma process som Azure Functions-körningen.
- C#-skript: Används främst när du skapar C#-funktioner i Azure Portal.
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 ${triggerInput.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.
Förbrukning
Connections
Egenskapen connectionStringSetting sätts till en nyckel i applikationsinställningarna som returnerar ett värde som används av Functions-runtime för att ansluta till Azure SignalR Service-instansen som används av tillägget. Värdet på denna anslutningsegenskapsinställning beror på typen av anslutning:
-
Managed identity-anslutning: Egenskapen
connectionStringSetting<CONNECTION_NAME_PREFIX>delas av en grupp inställningar som tillsammans definierar en identitetsbaserad anslutning till tjänsteändpunkten. För mer information, se Definiera identitetskopplingar. -
Key Vault-referens: Egendomsinställningen
connectionStringSettingreturnerar en Azure Key Vault-referens till platsen där reťazec pripojenia underhålls centralt. För mer information, se Definiera Key Vault-anslutningar. -
App Configuration Reference: Egenskapsinställningen
connectionStringSettingreturnerar en Azure App Configuration-referens som returnerar en reťazec pripojenia eller en Key Vault-referens. För mer information, se Azure App Configuration i artikeln om anslutningar. -
Connection string: Egenskapsinställningen
connectionStringSettingreturnerar den faktiska SignalR-service-reťazec pripojenia. Eftersom reťazec pripojenia innehåller delade hemliga nycklar bör du överväga att använda en managed identity-anslutning när det är möjligt. För mer information, se Definiera kopplingar.
För att lära dig mer om bindningsanslutningar, se Hantera anslutning i Azure Functions. För att få en reťazec pripojenia, följ stegen som visas under How to get reťazec pripojenias.
Functions-värden letar efter en nyckel eller ett nyckelprefix som heter AzureSignalRConnectionString när den ansluter till din SignalR-tjänst. Annars använder den nyckelvärdet som satts i connectionStringSetting för att erhålla den nödvändiga anslutningsinformationen.
Nyttolaster
Indatatypen för utlösaren deklareras som antingen InvocationContext eller en anpassad typ. Om du väljer InvocationContextfå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:
| Fastighet | 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. |
| Evenemang | 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 parameterNamesmotsvarar de namn som du har definierat argumenten som skickas på klientsidan.
[SignalRTrigger(parameterNames: new string[] {"arg1, arg2"})]
arg1 Innehåller sedan innehållet message1i och arg2 innehåller innehållet message2i .
ParameterNames Överväganden
För parameterbindningen är ordningen viktig. Om du använder ParameterNamesmatchar 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