SignalR-szolgáltatás kimeneti kötése az Azure Functionshez
A SignalR kimeneti kötés használatával küldjön egy vagy több üzenetet az Azure SignalR Service használatával. Üzenetet a következő címzettek számára közvetíthet:
- Minden csatlakoztatott ügyfél
- Csatlakoztatott ügyfelek egy adott csoportban
- Egy adott felhasználóhoz hitelesített csatlakoztatott ügyfelek
A kimeneti kötés lehetővé teszi a csoportok kezelését is, például ügyfél vagy felhasználó hozzáadását egy csoporthoz, és eltávolíthat egy ügyfelet vagy felhasználót egy csoportból.
A beállítással és a konfigurációval kapcsolatos információkért tekintse meg az áttekintést.
Példa
Közvetítés az összes ügyfélnek
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 példa egy függvényt mutat be, amely a kimeneti kötéssel üzenetet küld az összes csatlakoztatott ügyfélnek. A newMessage az egyes ügyfeleken meghívandó metódus neve.
[Function(nameof(BroadcastToAll))]
[SignalROutput(HubName = "chat", ConnectionStringSetting = "SignalRConnection")]
public static SignalRMessageAction BroadcastToAll([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req)
{
using var bodyReader = new StreamReader(req.Body);
return new SignalRMessageAction("newMessage")
{
// broadcast to all the connected clients without specifying any connection, user or group.
Arguments = new[] { bodyReader.ReadToEnd() },
};
}
Az alábbi kötési adatok a function.json fájlban:
Példa function.json:
{
"type": "signalR",
"name": "signalROutput",
"hubName": "hubName1",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "out"
}
const { app, output } = require('@azure/functions');
const signalR = output.generic({
type: 'signalR',
name: 'signalR',
hubName: 'hub',
connectionStringSetting: 'AzureSignalRConnectionString',
});
// You can use any other trigger type instead.
app.http('broadcast', {
methods: ['GET'],
authLevel: 'anonymous',
extraOutputs: [signalR],
handler: (request, context) => {
context.extraOutputs.set(signalR, {
"target": "newMessage",
"arguments": [request.body]
});
}
});
A Teljes PowerShell-példák függőben vannak.
A Python-kód a következő:
def main(req: func.HttpRequest, signalROutput: func.Out[str]) -> func.HttpResponse:
message = req.get_json()
signalROutput.set(json.dumps({
'target': 'newMessage',
'arguments': [ message ]
}))
@FunctionName("sendMessage")
@SignalROutput(name = "$return", HubName = "hubName1")
public SignalRMessage sendMessage(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Object> req) {
SignalRMessage message = new SignalRMessage();
message.target = "newMessage";
message.arguments.add(req.getBody());
return message;
}
Küldés felhasználónak
A SignalR-üzenetben megadott felhasználói azonosító beállításával csak olyan kapcsolatoknak küldhet üzenetet, amelyek hitelesítése megtörtént a felhasználó számára.
[Function(nameof(SendToUser))]
[SignalROutput(HubName = "chat", ConnectionStringSetting = "SignalRConnection")]
public static SignalRMessageAction SendToUser([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req)
{
using var bodyReader = new StreamReader(req.Body);
return new SignalRMessageAction("newMessage")
{
Arguments = new[] { bodyReader.ReadToEnd() },
UserId = "userToSend",
};
}
Az alábbi kötési adatok a function.json fájlban:
Példa function.json:
{
"type": "signalR",
"name": "signalROutput",
"hubName": "hubName1",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "out"
}
A Teljes PowerShell-példák függőben vannak.
A Python-kód a következő:
def main(req: func.HttpRequest, signalROutput: func.Out[str]) -> func.HttpResponse:
message = req.get_json()
signalROutput.set(json.dumps({
#message will only be sent to this user ID
'userId': 'userId1',
'target': 'newMessage',
'arguments': [ message ]
}))
@FunctionName("sendMessage")
@SignalROutput(name = "$return", HubName = "hubName1")
public SignalRMessage sendMessage(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Object> req) {
SignalRMessage message = new SignalRMessage();
message.userId = "userId1";
message.target = "newMessage";
message.arguments.add(req.getBody());
return message;
}
const { app, output } = require('@azure/functions');
const signalR = output.generic({
type: 'signalR',
name: 'signalR',
hubName: 'hub',
connectionStringSetting: 'AzureSignalRConnectionString',
});
app.http('sendToUser', {
methods: ['GET'],
authLevel: 'anonymous',
extraOutputs: [signalR],
handler: (request, context) => {
context.extraOutputs.set(signalR, {
"target": "newMessage",
"arguments": [request.body],
"userId": "userId1",
});
}
});
Küldés csoportnak
Csak a csoporthoz hozzáadott kapcsolatoknak küldhet üzenetet a SignalR üzenetben a csoport nevének beállításával.
[Function(nameof(SendToGroup))]
[SignalROutput(HubName = "chat", ConnectionStringSetting = "SignalRConnection")]
public static SignalRMessageAction SendToGroup([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req)
{
using var bodyReader = new StreamReader(req.Body);
return new SignalRMessageAction("newMessage")
{
Arguments = new[] { bodyReader.ReadToEnd() },
GroupName = "groupToSend"
};
}
Az alábbi kötési adatok a function.json fájlban:
Példa function.json:
{
"type": "signalR",
"name": "signalROutput",
"hubName": "hubName1",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "out"
}
const { app, output } = require('@azure/functions');
const signalR = output.generic({
type: 'signalR',
name: 'signalR',
hubName: 'hub',
connectionStringSetting: 'AzureSignalRConnectionString',
});
app.http('sendToGroup', {
methods: ['GET'],
authLevel: 'anonymous',
extraOutputs: [signalR],
handler: (request, context) => {
context.extraOutputs.set(signalR, {
"target": "newMessage",
"arguments": [request.body],
"groupName": "myGroup",
});
}
});
A Teljes PowerShell-példák függőben vannak.
A Python-kód a következő:
def main(req: func.HttpRequest, signalROutput: func.Out[str]) -> func.HttpResponse:
message = req.get_json()
signalROutput.set(json.dumps({
#message will only be sent to this group
'groupName': 'myGroup',
'target': 'newMessage',
'arguments': [ message ]
}))
@FunctionName("sendMessage")
@SignalROutput(name = "$return", HubName = "hubName1")
public SignalRMessage sendMessage(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Object> req) {
SignalRMessage message = new SignalRMessage();
message.groupName = "myGroup";
message.target = "newMessage";
message.arguments.add(req.getBody());
return message;
}
Csoportkezelés
A SignalR szolgáltatás lehetővé teszi a felhasználók vagy kapcsolatok csoportokhoz való hozzáadását. Ezután üzeneteket küldhet egy csoportnak. A kimeneti kötéssel kezelheti a SignalR
csoportokat.
Tag hozzáadásának vagy eltávolításának megadása SignalRGroupActionType
. Az alábbi példa eltávolít egy felhasználót egy csoportból.
[Function(nameof(RemoveFromGroup))]
[SignalROutput(HubName = "chat", ConnectionStringSetting = "SignalRConnection")]
public static SignalRGroupAction RemoveFromGroup([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req)
{
return new SignalRGroupAction(SignalRGroupActionType.Remove)
{
GroupName = "group1",
UserId = "user1"
};
}
Feljegyzés
A helyes kötés eléréséhez ClaimsPrincipal
konfigurálnia kell a hitelesítési beállításokat az Azure Functionsben.
Az alábbi kötési adatok a function.json fájlban:
Példa function.json:
{
"type": "signalR",
"name": "signalROutput",
"hubName": "hubName1",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "out"
}
const { app, output } = require('@azure/functions');
const signalR = output.generic({
type: 'signalR',
name: 'signalR',
hubName: 'hub',
connectionStringSetting: 'AzureSignalRConnectionString',
});
// The following function adds a user to a group
app.http('addUserToGroup', {
methods: ['POST'],
authLevel: 'anonymous',
extraOutputs: [signalR],
handler: (request, context) => {
context.extraOutputs.set(signalR, {
"userId": req.query.userId,
"groupName": "myGroup",
"action": "add"
});
}
});
// The following function removes a user from a group
app.http('removeUserFromGroup', {
methods: ['POST'],
authLevel: 'anonymous',
extraOutputs: [signalR],
handler: (request, context) => {
context.extraOutputs.set(signalR, {
"userId": req.query.userId,
"groupName": "myGroup",
"action": "remove"
});
}
});
A Teljes PowerShell-példák függőben vannak.
Az alábbi példa egy felhasználót ad hozzá egy csoporthoz.
def main(req: func.HttpRequest, signalROutput: func.Out[str]) -> func.HttpResponse:
signalROutput.set(json.dumps({
'userId': 'userId1',
'groupName': 'myGroup',
'action': 'add'
}))
Az alábbi példa eltávolít egy felhasználót egy csoportból.
def main(req: func.HttpRequest, signalROutput: func.Out[str]) -> func.HttpResponse:
signalROutput.set(json.dumps({
'userId': 'userId1',
'groupName': 'myGroup',
'action': 'remove'
}))
Az alábbi példa egy felhasználót ad hozzá egy csoporthoz.
@FunctionName("addToGroup")
@SignalROutput(name = "$return", HubName = "hubName1")
public SignalRGroupAction addToGroup(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Object> req,
@BindingName("userId") String userId) {
SignalRGroupAction groupAction = new SignalRGroupAction();
groupAction.action = "add";
groupAction.userId = userId;
groupAction.groupName = "myGroup";
return action;
}
Az alábbi példa eltávolít egy felhasználót egy csoportból.
@FunctionName("removeFromGroup")
@SignalROutput(name = "$return", HubName = "hubName1")
public SignalRGroupAction removeFromGroup(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Object> req,
@BindingName("userId") String userId) {
SignalRGroupAction groupAction = new SignalRGroupAction();
groupAction.action = "remove";
groupAction.userId = userId;
groupAction.groupName = "myGroup";
return action;
}
Attribútumok
A folyamaton belüli és az izolált feldolgozói folyamat C#-kódtárai attribútummal határozzák meg a függvényt. A C#-szkript ehelyett function.json konfigurációs fájlt használ.
Az alábbi táblázat az attribútum tulajdonságait SignalROutput
ismerteti.
Attribútumtulajdonság | Leírás |
---|---|
HubName | Ezt az értéket annak a SignalR-központnak a nevére kell állítani, amelyhez a kapcsolati információk létrejönnek. |
ConnectionStringSetting | A SignalR service kapcsolati sztring-t tartalmazó alkalmazásbeállítás neve, amely alapértelmezés szerint a következő.AzureSignalRConnectionString |
Jegyzetek
Az alábbi táblázat a széljegyzet támogatott beállításait SignalROutput
ismerteti.
Beállítás | Leírás |
---|---|
név | A kapcsolati információs objektum függvénykódjában használt változónév. |
hubName | Ezt az értéket annak a SignalR-központnak a nevére kell állítani, amelyhez a kapcsolati információk létrejönnek. |
connectionStringSetting | A SignalR service kapcsolati sztring-t tartalmazó alkalmazásbeállítás neve, amely alapértelmezés szerint a következő.AzureSignalRConnectionString |
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 signalR következőnek kell lennie: . |
direction | A beállításnak a out következőnek kell lennie: . |
név | A kapcsolati információs objektum függvénykódjában használt változónév. |
hubName | Ezt az értéket annak a SignalR-központnak a nevére kell állítani, amelyhez a kapcsolati információk létrejönnek. |
connectionStringSetting | A SignalR service kapcsolati sztring-t tartalmazó alkalmazásbeállítás neve, amely alapértelmezés szerint a következő.AzureSignalRConnectionString |
Helyi fejlesztéskor adja hozzá az alkalmazásbeállításokat a gyűjtemény local.settings.json fájljáhozValues
.