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ó:
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.
Fontos
A folyamaton belüli modell támogatása 2026. november 10-én megszűnik. Erősen javasoljuk, hogy az alkalmazásokat az elkülönített feldolgozói modellbe migrálja a teljes támogatás érdekében.
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:
|
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 |
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 SignalRTrigger következőnek kell lennie: . |
direction | A beállításnak a in kö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:
|
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:
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 message1
message2
próbál metódust meghívni broadcast
az Azure-függvényben.
await connection.invoke("broadcast", message1, message2);
A beállítás parameterNames
utá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 message1
arg2
é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 a felsőbb réteg beállításai között kell konfigurálni.
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.
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