Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Använd SignalR-utdatabindningen för att skicka ett eller flera meddelanden med Hjälp av Azure SignalR Service. Du kan sända ett meddelande till:
- Alla anslutna klienter
- Anslutna klienter i en angiven grupp
- Anslutna klienter autentiserade till en specifik användare
Med utdatabindningen kan du också hantera grupper, till exempel lägga till en klient eller användare i en grupp, ta bort en klient eller användare från en grupp.
Information om konfiguration och konfigurationsinformation finns i översikten.
Exempel
Sänds till alla klienter
Du kan skapa en C#-funktion med något av följande C#-lägen:
- Isolerad arbetsmodell: Kompilerad C#-funktion som körs i en arbetsprocess som är isolerad från körningen. En isolerad arbetsprocess krävs för att stödja C#-funktioner som körs på långsiktig support (LTS) och icke-LTS-versioner för .NET och .NET Framework.
- Processmodell: Kompilerad C#-funktion som körs i samma process som Azure Functions-körningen.
- C#-skript: Används främst när du skapar C#-funktioner i Azure Portal.
Viktigt!
Supporten upphör för den pågående modellen den 10 november 2026. Vi rekommenderar starkt att du migrerar dina appar till den isolerade arbetsmodellen för fullt stöd.
I följande exempel visas en funktion som skickar ett meddelande med utdatabindningen till alla anslutna klienter. NewMessage är namnet på den metod som ska anropas på varje klient.
[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() },
};
}
Här är bindningsdata i filen function.json :
Exempel 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]
});
}
});
Slutför PowerShell-exempel väntar.
Här är Python-koden:
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;
}
Skicka till en användare
Du kan bara skicka ett meddelande till anslutningar som har autentiserats till en användare genom att ange användar-ID :t i SignalR-meddelandet.
[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",
};
}
Här är bindningsdata i filen function.json :
Exempel function.json:
{
"type": "signalR",
"name": "signalROutput",
"hubName": "hubName1",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "out"
}
Slutför PowerShell-exempel väntar.
Här är Python-koden:
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",
});
}
});
Skicka till en grupp
Du kan bara skicka ett meddelande till anslutningar som har lagts till i en grupp genom att ange gruppnamnet i SignalR-meddelandet.
[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"
};
}
Här är bindningsdata i filen function.json :
Exempel 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",
});
}
});
Slutför PowerShell-exempel väntar.
Här är Python-koden:
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;
}
Grupphantering
SignalR Service tillåter att användare eller anslutningar läggs till i grupper. Meddelanden kan sedan skickas till en grupp. Du kan använda utdatabindningen SignalR för att hantera grupper.
Ange SignalRGroupActionType om du vill lägga till eller ta bort en medlem. I följande exempel tar du bort en användare från en grupp.
[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"
};
}
Kommentar
För att få rätt bindning ClaimsPrincipal måste du ha konfigurerat autentiseringsinställningarna i Azure Functions.
Här är bindningsdata i filen function.json :
Exempel 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"
});
}
});
Slutför PowerShell-exempel väntar.
I följande exempel läggs en användare till i en grupp.
def main(req: func.HttpRequest, signalROutput: func.Out[str]) -> func.HttpResponse:
signalROutput.set(json.dumps({
'userId': 'userId1',
'groupName': 'myGroup',
'action': 'add'
}))
I följande exempel tar du bort en användare från en grupp.
def main(req: func.HttpRequest, signalROutput: func.Out[str]) -> func.HttpResponse:
signalROutput.set(json.dumps({
'userId': 'userId1',
'groupName': 'myGroup',
'action': 'remove'
}))
I följande exempel läggs en användare till i en grupp.
@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;
}
I följande exempel tar du bort en användare från en grupp.
@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;
}
Attribut
C#-bibliotek för både process- och isolerad arbetsprocess använder attribut för att definiera funktionen. C#-skriptet använder i stället en function.json konfigurationsfil.
I följande tabell förklaras egenskaperna för attributet SignalROutput .
| Attributegenskap | beskrivning |
|---|---|
| HubName | Det här värdet måste anges till namnet på signalR-hubben som anslutningsinformationen genereras för. |
| ConnectionStringSetting | Namnet på appinställningen eller inställningssamlingen som innehåller SignalR Service-anslutningssträng, som standard är AzureSignalRConnectionString. |
Kommentarer
I följande tabell förklaras de inställningar som stöds för anteckningen SignalROutput .
| Inställning | beskrivning |
|---|---|
| Namn | Variabelnamn som används i funktionskoden för anslutningsinformationsobjekt. |
| hubName | Det här värdet måste anges till namnet på signalR-hubben som anslutningsinformationen genereras för. |
| connectionStringSetting | Namnet på appinställningen eller inställningssamlingen som innehåller SignalR Service-anslutningssträng, som standard är AzureSignalRConnectionString. |
Konfiguration
I följande tabell förklaras de bindningskonfigurationsegenskaper som du anger i filen function.json .
| function.json egenskap | beskrivning |
|---|---|
| typ | Måste anges till signalR. |
| riktning | Måste anges till out. |
| Namn | Variabelnamn som används i funktionskoden för anslutningsinformationsobjekt. |
| hubName | Det här värdet måste anges till namnet på signalR-hubben som anslutningsinformationen genereras för. |
| connectionStringSetting | Namnet på appinställningen eller inställningssamlingen som innehåller SignalR Service-anslutningssträng, som standard är AzureSignalRConnectionString. |
När du utvecklar lokalt lägger du till dina programinställningar i den local.settings.json filen i Values samlingen.
Förbrukning
Connections
Egenskapen connectionStringSetting sätts till en nyckel i applikationsinställningarna som returnerar ett värde som används av Functions-runtime för att ansluta till Azure SignalR Service-instansen som används av tillägget. Värdet på denna anslutningsegenskapsinställning beror på typen av anslutning:
-
Managed identity-anslutning: Egenskapen
connectionStringSetting<CONNECTION_NAME_PREFIX>delas av en grupp inställningar som tillsammans definierar en identitetsbaserad anslutning till tjänsteändpunkten. För mer information, se Definiera identitetskopplingar. -
Key Vault-referens: Egendomsinställningen
connectionStringSettingreturnerar en Azure Key Vault-referens till platsen där reťazec pripojenia underhålls centralt. För mer information, se Definiera Key Vault-anslutningar. -
App Configuration Reference: Egenskapsinställningen
connectionStringSettingreturnerar en Azure App Configuration-referens som returnerar en reťazec pripojenia eller en Key Vault-referens. För mer information, se Azure App Configuration i artikeln om anslutningar. -
Connection string: Egenskapsinställningen
connectionStringSettingreturnerar den faktiska SignalR-service-reťazec pripojenia. Eftersom reťazec pripojenia innehåller delade hemliga nycklar bör du överväga att använda en managed identity-anslutning när det är möjligt. För mer information, se Definiera kopplingar.
För att lära dig mer om bindningsanslutningar, se Hantera anslutning i Azure Functions. För att få en reťazec pripojenia, följ stegen som visas under How to get reťazec pripojenias.
Functions-värden letar efter en nyckel eller ett nyckelprefix som heter AzureSignalRConnectionString när den ansluter till din SignalR-tjänst. Annars använder den nyckelvärdet som satts i connectionStringSetting för att erhålla den nödvändiga anslutningsinformationen.