Vazba triggeru služby SignalR pro Azure Functions
Pomocí vazby triggeru SignalR můžete reagovat na zprávy odeslané ze služby Azure SignalR. Při aktivaci funkce se zprávy předané funkci parsují jako objekt JSON.
V bezserverovém režimu služby SignalR Používá služba SignalR funkci Upstream k odesílání zpráv z klienta do aplikace funkcí. Aplikace funkcí používá k zpracování těchto zpráv vazbu triggeru služby SignalR Service. Obecná architektura je znázorněná níže:
Informace o nastavení a konfiguraci najdete v přehledu.
Příklad
Funkci jazyka C# je možné vytvořit pomocí jednoho z následujících režimů jazyka C#:
- Izolovaný model pracovního procesu: Kompilovaná funkce jazyka C#, která běží v pracovním procesu, který je izolovaný od modulu runtime. Izolovaný pracovní proces je nutný pro podporu funkcí C# spuštěných na LTS a jiných verzích než LTS .NET a rozhraní .NET Framework.
- Model v procesu: Zkompilovaná funkce jazyka C#, která běží ve stejném procesu jako modul runtime služby Functions.
- Skript jazyka C#: Používá se především při vytváření funkcí jazyka C# na webu Azure Portal.
Důležité
Podpora modelu v procesu skončí 10. listopadu 2026. Důrazně doporučujeme migrovat aplikace do izolovaného modelu pracovního procesu pro plnou podporu.
Následující ukázka ukazuje funkci jazyka C#, která přijímá událost zprávy od klientů a protokoluje obsah zprávy.
[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);
}
Důležité
Model založený na třídách vazeb služby SignalR v izolovaném pracovním procesu jazyka C# neoptimalizuje způsob psaní triggerů SignalR kvůli omezení modelu pracovního procesu jazyka C#. Další informace o modelu založeném na třídách najdete v tématu Model založený na třídách.
Trigger SignalR se v současné době nepodporuje pro Javu.
Tady jsou data vazby v souboru 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}.`)
}
})
Dokončené příklady PowerShellu čekají na vyřízení.
Tady je kód Pythonu:
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']))
Atributy
Knihovny C# v procesu i izolovaného pracovního procesu používají SignalRTrigger
atribut k definování funkce. Skript jazyka C# místo toho používá konfigurační soubor function.json.
Následující tabulka vysvětluje vlastnosti atributu SignalRTrigger
.
Vlastnost atributu | Popis |
---|---|
HubName | Tato hodnota musí být nastavena na název centra SignalR, aby se funkce aktivovala. |
Kategorie | Tato hodnota musí být nastavena jako kategorie zpráv, aby se funkce aktivovala. Kategorie může být jedna z následujících hodnot:
|
Událost | Tato hodnota musí být nastavena jako událost zpráv, aby se funkce aktivovala. U kategorií zpráv je událost cílem vyvolání zprávy , kterou klienti odesílají. Pro kategorii připojení se používá pouze připojená a odpojená . |
ParameterNames | (Volitelné) Seznam názvů, které se sváže s parametry. |
ConnectionStringSetting | Název nastavení aplikace, které obsahuje službu SignalR Service připojovací řetězec, což je výchozí hodnota AzureSignalRConnectionString . |
Poznámky
V současné době není podporovaná poznámka Java pro trigger SignalR.
Konfigurace
Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v souboru function.json .
vlastnost function.json | Popis |
---|---|
type | Musí být nastavena na SignalRTrigger hodnotu . |
direction | Musí být nastavena na in hodnotu . |
Jméno | Název proměnné použitý v kódu funkce pro objekt kontextu vyvolání triggeru. |
hubName | Tato hodnota musí být nastavena na název centra SignalR, aby se funkce aktivovala. |
kategorie | Tato hodnota musí být nastavena jako kategorie zpráv, aby se funkce aktivovala. Kategorie může být jedna z následujících hodnot:
|
event | Tato hodnota musí být nastavena jako událost zpráv, aby se funkce aktivovala. U kategorií zpráv je událost cílem vyvolání zprávy , kterou klienti odesílají. Pro kategorii připojení se používá pouze připojená a odpojená . |
parameterNames | (Volitelné) Seznam názvů, které se sváže s parametry. |
connectionStringSetting | Název nastavení aplikace, které obsahuje službu SignalR Service připojovací řetězec, což je výchozí hodnota AzureSignalRConnectionString . |
Kompletní příklady najdete v části Příklad.
Využití
Náklad
Vstupní typ triggeru je deklarován jako vlastní InvocationContext
typ nebo jako vlastní typ. Pokud zvolíte InvocationContext
, získáte úplný přístup k obsahu žádosti. U vlastního typu se modul runtime pokusí analyzovat tělo požadavku JSON a nastavit vlastnosti objektu.
InvocationContext
InvocationContext
obsahuje veškerý obsah zprávy odeslané ze služby SignalR, která obsahuje následující vlastnosti:
Vlastnost | Popis |
---|---|
Argumenty | K dispozici pro kategorii zpráv . Obsahuje argumenty ve zprávě o vyvolání. |
Chyba | K dispozici pro odpojenou událost. Může být prázdný, pokud se připojení ukončilo bez chyby nebo obsahuje chybové zprávy. |
Centrum | Název centra, do kterého zpráva patří. |
Kategorie | Kategorie zprávy. |
Událost | Událost zprávy. |
ConnectionId | ID připojení klienta, který zprávu odešle. |
ID uživatele | Identita uživatele klienta, který zprávu odešle. |
Hlavičky | Hlavičky požadavku. |
Dotaz | Dotaz požadavku, když se klienti připojují ke službě. |
Žádosti | Deklarace identity klienta. |
Používání akce ParameterNames
Vlastnost ParameterNames
umožňuje SignalRTrigger
svázat argumenty volání zpráv s parametry funkcí. Název, který jste definovali jako součást vazeb výrazů v jiné vazbě nebo jako parametry v kódu, můžete použít. To vám dává pohodlnější způsob, jak získat přístup k argumentům InvocationContext
.
Řekněme, že máte klienta JavaScript SignalR, který se pokouší vyvolat metodu broadcast
ve funkci Azure Functions se dvěma argumenty message1
, message2
.
await connection.invoke("broadcast", message1, message2);
Po nastavení parameterNames
názvy, které jste definovali, odpovídají argumentům odeslaných na straně klienta.
[SignalRTrigger(parameterNames: new string[] {"arg1, arg2"})]
arg1
Pak obsahuje obsah message1
, a arg2
obsahuje obsah message2
.
ParameterNames
úvahy
U vazby parametrů záleží na pořadí. Pokud používáte ParameterNames
, pořadí odpovídá ParameterNames
pořadí argumentů, které v klientovi vyvoláte. Pokud používáte atribut [SignalRParameter]
v jazyce C#, pořadí argumentů v metodách funkce Azure odpovídá pořadí argumentů v klientech.
ParameterNames
a atribut [SignalRParameter]
nelze použít ve stejnou dobu nebo dojde k výjimce.
Integrace služby SignalR
Služba SignalR potřebuje adresu URL pro přístup k aplikaci funkcí, když používáte vazbu triggeru služby SignalR. Adresa URL by měla být nakonfigurovaná v upstreamovém nastavení na straně služby SignalR.
Při použití triggeru služby SignalR může být adresa URL jednoduchá a formátovaná následujícím způsobem:
<Function_App_URL>/runtime/webhooks/signalr?code=<API_KEY>
Najdete ji Function_App_URL
na stránce Přehled aplikace funkcí a vygeneruje ji API_KEY
funkce Azure. Tuto možnost API_KEY
signalr_extension
můžete získat v okně Klíče aplikace funkcí.
Pokud chcete použít více než jednu aplikaci funkcí společně s jednou službou SignalR, může upstream také podporovat složitá pravidla směrování. Další podrobnosti najdete v nastavení upstreamu.
Podrobná ukázka
Podle ukázky na GitHubu můžete nasadit chatovací místnost v aplikaci funkcí pomocí vazby triggeru služby SignalR Service a upstreamové funkce: Ukázka obousměrné chatovací místnosti