SignalR Service-eseményindító kötése az Azure Functionshez

A SignalR-eseményindító kötésével válaszolhat az Azure SignalR Service-ből küldött üzenetekre. A függvény aktiválásakor a függvénynek átadott üzenetek json-objektumként lesznek elemezve.

A SignalR Szolgáltatás kiszolgáló nélküli módban a SignalR Szolgáltatás az Upstream funkcióval küld üzeneteket az ügyfélről a függvényalkalmazásba. A függvényalkalmazás pedig SignalR Service-eseményindító kötést használ az üzenetek kezeléséhez. Az általános architektúra az alábbiakban látható:

SignalR Trigger architektúra

A beállítással és a konfigurációval kapcsolatos információkért tekintse meg az áttekintést.

Példa

A C#-függvények a következő C#-módok egyikével hozhatók létre:

  • Izolált feldolgozómodell: Lefordított C# függvény, amely a futtatókörnyezettől elkülönített feldolgozói folyamatban fut. Izolált feldolgozói folyamat szükséges az LTS- és nem LTS-verziókon futó C#-függvények támogatásához .NET és .NET-keretrendszer.
  • Folyamaton belüli modell: Lefordított C# függvény, amely ugyanabban a folyamatban fut, mint a Functions-futtatókörnyezet.
  • C#-szkript: Elsősorban C#-függvények Azure Portalon való létrehozásakor használatos.

Az alábbi minta egy C# függvényt mutat be, amely üzeneteseményt fogad az ügyfelektől, és naplózza az üzenet tartalmát.

[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);
}

Fontos

A SignalR szolgáltatás kötéseinek osztályalapú modellje a C# izolált feldolgozóban nem optimalizálja a SignalR-eseményindítók írási módját a C# feldolgozómodell korlátozása miatt. Az osztályalapú modellről további információt az Osztályalapú modell című témakörben talál.

A SignalR-eseményindító jelenleg nem támogatott a Java esetében.

Az alábbi kötési adatok a function.json fájlban:

{
    "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}.`)
        }
    })

A Teljes PowerShell-példák függőben vannak.

A Python-kód a következő:

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']))

Attribútumok

A függvény definiálásához a folyamaton belüli és az izolált feldolgozói folyamat C# kódtárai is az SignalRTrigger attribútumot használják. A C#-szkript ehelyett function.json konfigurációs fájlt használ.

Az alábbi táblázat az attribútum tulajdonságait SignalRTrigger ismerteti.

Attribútumtulajdonság Leírás
HubName Ezt az értéket a SignalR hub nevére kell állítani a aktiválandó függvényhez.
Kategória Ezt az értéket a aktiválni kívánt függvény üzenetkategóriájaként kell beállítani. A kategória a következő értékek egyike lehet:
  • kapcsolatok: A csatlakoztatott és a leválasztott eseményeket is beleértve
  • üzenetek: Az összes többi eseményt is beleértve, kivéve a kapcsolatok kategóriát
Esemény Ezt az értéket a aktiválni kívánt függvény üzeneteinek eseményeként kell beállítani. Az üzenetek kategóriája esetén az esemény az ügyfelek által küldött meghívási üzenet célja. A kapcsolatok kategóriához csak a csatlakoztatott és a leválasztott kapcsolat használható.
ParameterNames (Nem kötelező) A paraméterekhez kötődő nevek listája.
Csatlakozás ionStringSetting A SignalR service kapcsolati sztring-t tartalmazó alkalmazásbeállítás neve, amely alapértelmezés szerint a következő.AzureSignalRConnectionString

Jegyzetek

A SignalR-eseményindítókhoz jelenleg nincs támogatott Java-széljegyzet.

Konfiguráció

Az alábbi táblázat a function.json fájlban beállított kötéskonfigurációs tulajdonságokat ismerteti.

function.json tulajdonság Leírás
type A beállításnak a SignalRTriggerkövetkezőnek kell lennie: .
direction A beállításnak a inkövetkezőnek kell lennie: .
név A függvénykódban a triggerhívás környezeti objektumához használt változónév.
hubName Ezt az értéket a SignalR hub nevére kell állítani a aktiválandó függvényhez.
Kategória Ezt az értéket a aktiválni kívánt függvény üzenetkategóriájaként kell beállítani. A kategória a következő értékek egyike lehet:
  • kapcsolatok: A csatlakoztatott és a leválasztott eseményeket is beleértve
  • üzenetek: Az összes többi eseményt is beleértve, kivéve a kapcsolatok kategóriát
Esemény Ezt az értéket a aktiválni kívánt függvény üzeneteinek eseményeként kell beállítani. Az üzenetek kategóriája esetén az esemény az ügyfelek által küldött meghívási üzenet célja. A kapcsolatok kategóriához csak a csatlakoztatott és a leválasztott kapcsolat használható.
parameterNames (Nem kötelező) A paraméterekhez kötődő nevek listája.
connectionStringSetting A SignalR service kapcsolati sztring-t tartalmazó alkalmazásbeállítás neve, amely alapértelmezés szerint a következő.AzureSignalRConnectionString

A teljes példákért tekintse meg a Példa szakaszt .

Használat

Hasznos adatok

Az eseményindító bemeneti típusa vagy egyéni típusként InvocationContext van deklarálva. Ha úgy dönt InvocationContext, teljes hozzáférést kap a kérés tartalmához. Egyéni típus esetén a futtatókörnyezet megpróbálja elemezni a JSON-kérelem törzsét az objektumtulajdonságok beállításához.

InvocationContext

InvocationContext a SignalR szolgáltatásból küldött üzenet összes tartalmát tartalmazza, amely a következő tulajdonságokat tartalmazza:

Tulajdonság Leírás
Argumentumok Üzenetkategória esetén érhető el. Argumentumokat tartalmaz a meghívási üzenetben
Hiba Kapcsolat nélküli eseményhez érhető el. Üres lehet, ha a kapcsolat hiba nélkül bezárult, vagy a hibaüzeneteket tartalmazza.
Hub Az üzenet központi neve.
Kategória Az üzenet kategóriája.
Esemény Az üzenet eseménye.
Csatlakozás ionId Az üzenetet küldő ügyfél kapcsolatazonosítója.
UserId Az üzenetet küldő ügyfél felhasználói identitása.
Fejlécek A kérés fejlécei.
Lekérdezés A kérés lekérdezése, amikor az ügyfelek csatlakoznak a szolgáltatáshoz.
Igénylések Az ügyfél jogcímei.

Az ParameterNames használata

A tulajdonság ParameterNames lehetővé SignalRTrigger teszi, hogy a meghívási üzenetek argumentumait a függvények paramétereihez kösse. Használhatja a kötési kifejezések részeként definiált nevet más kötésekben vagy paraméterekként a kódban. Így kényelmesebben érheti el az argumentumokat InvocationContext.

Tegyük fel, hogy egy JavaScript SignalR-ügyfél két argumentummal message1message2próbál metódust meghívni broadcast az Azure-függvényben.

await connection.invoke("broadcast", message1, message2);

A beállítás parameterNamesután a megadott nevek megfelelnek az ügyféloldalon küldött argumentumoknak.

[SignalRTrigger(parameterNames: new string[] {"arg1, arg2"})]

Ezután a arg1 fájl tartalma message1arg2 és tartalmamessage2.

ParameterNames Megfontolások

A paraméterkötésnél a sorrend számít. Ha használja ParameterNames, a sorrend ParameterNames megegyezik az ügyfélben meghívott argumentumok sorrendjével. Ha C#-ban használ attribútumot [SignalRParameter] , az Azure-függvény metódusaiban az argumentumok sorrendje megegyezik az ügyfelek argumentumainak sorrendjével.

ParameterNames és az attribútum [SignalRParameter]nem használható egyszerre, vagy kivételt fog kapni.

SignalR-szolgáltatás integrációja

A SignalR szolgáltatásnak url-címre van szüksége a függvényalkalmazás eléréséhez a SignalR Service eseményindító kötésének használatakor. Az URL-címet a SignalR szolgáltatás oldalán kell konfigurálni az upstream Gépház.

Felsőbb rétegbeli portál

A SignalR szolgáltatás eseményindítójának használata esetén az URL-cím az alábbiak szerint lehet egyszerű és formázható:

<Function_App_URL>/runtime/webhooks/signalr?code=<API_KEY>

Ez Function_App_URL a függvényalkalmazás áttekintési oldalán található, és az API_KEY Azure-függvény hozza létre. A függvényalkalmazás Alkalmazásbillentyűk paneljén kaphatja signalr_extension meg a API_KEY lehetőséget. API-azonosító

Ha egynél több függvényalkalmazást szeretne használni egy SignalR-szolgáltatással együtt, a felsőbb réteg is támogathatja az összetett útválasztási szabályokat. További részletekért tekintse meg a felsőbb réteg beállításait.

Részletes minta

A GitHubon található mintát követve üzembe helyezhet egy csevegőszobát a Függvényalkalmazásban a SignalR Service triggerkötési és felsőbb rétegbeli funkciójával: Kétirányú csevegőszoba-minta

Következő lépések