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:

Architektura triggeru SignalR

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.

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:
  • připojení: Zahrnutí připojených a odpojených událostí
  • zprávy: Zahrnutí všech ostatních událostí kromě událostí v kategorii připojení
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 SignalRTriggerhodnotu .
direction Musí být nastavena na inhodnotu .
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:
  • připojení: Zahrnutí připojených a odpojených událostí
  • zprávy: Zahrnutí všech ostatních událostí kromě událostí v kategorii připojení
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í parameterNamesná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.

Upstreamový portál

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í. Klíč rozhraní API

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

Další kroky