SignalR-szolgáltatás bemeneti kötése az Azure Functionshez
Mielőtt egy ügyfél csatlakozni tud az Azure SignalR szolgáltatáshoz, le kell kérnie a szolgáltatásvégpont URL-címét és egy érvényes hozzáférési jogkivonatot. A SignalRConnectionInfo bemeneti kötés létrehozza a SignalR szolgáltatás végpontJÁNAK URL-címét és egy érvényes jogkivonatot, amely a szolgáltatáshoz való csatlakozáshoz használatos. A jogkivonat időkorlátos, és egy adott felhasználó hitelesítésére használható egy kapcsolathoz. Ezért nem szabad gyorsítótárba helyeznie a jogkivonatot, és nem szabad megosztania az ügyfelek között. A SignalRConnectionInfo-t általában HTTP-eseményindítóval használja az ügyfelek számára a kapcsolati adatok lekéréséhez.
Ha többet szeretne tudni arról, hogy hogyan használhatja ezt a kötést egy SignalR-ügyfél SDK-val kompatibilis "egyeztetési" függvény létrehozásához, tekintse meg az Azure Functions fejlesztésével és az Azure SignalR Szolgáltatással való konfigurálásáról szóló cikket. 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 példa egy C# függvényt mutat be, amely a bemeneti kötéssel szerzi be a SignalR kapcsolati adatait, és HTTP-n keresztül adja vissza.
[Function(nameof(Negotiate))]
public static string Negotiate([HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequestData req,
[SignalRConnectionInfoInput(HubName = "serverless")] string connectionInfo)
{
// The serialization of the connection info object is done by the framework. It should be camel case. The SignalR client respects the camel case response only.
return connectionInfo;
}
Az alábbi példa egy SignalR kapcsolatinformációs bemeneti kötést mutat be egy function.json fájlban, és egy függvényt, amely a kötést használja a kapcsolati adatok visszaadásához.
Az alábbi kötési adatok a function.json fájlban lévő példához:
{
"type": "signalRConnectionInfo",
"name": "connectionInfo",
"hubName": "hubName1",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "in"
}
A JavaScript-kód a következő:
const { app, input } = require('@azure/functions');
const inputSignalR = input.generic({
type: 'signalRConnectionInfo',
name: 'connectionInfo',
hubName: 'hubName1',
connectionStringSetting: 'AzureSignalRConnectionString',
});
app.post('negotiate', {
authLevel: 'function',
handler: (request, context) => {
return { body: JSON.stringify(context.extraInputs.get(inputSignalR)) }
},
route: 'negotiate',
extraInputs: [inputSignalR],
});
A Teljes PowerShell-példák függőben vannak.
Az alábbi példa egy SignalR-kapcsolatadatok bemeneti kötését mutatja be egy function.json fájlban, valamint egy Python-függvényt , amely a kötést használja a kapcsolati adatok visszaadásához.
A Python-kód a következő:
def main(req: func.HttpRequest, connectionInfoJson: str) -> func.HttpResponse:
return func.HttpResponse(
connectionInfoJson,
status_code=200,
headers={
'Content-type': 'application/json'
}
)
Az alábbi példa egy Java-függvényt mutat be, amely a bemeneti kötés használatával szerzi be a SignalR kapcsolati adatait, és HTTP-en keresztül adja vissza.
@FunctionName("negotiate")
public SignalRConnectionInfo negotiate(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> req,
@SignalRConnectionInfoInput(
name = "connectionInfo",
HubName = "hubName1") SignalRConnectionInfo connectionInfo) {
return connectionInfo;
}
Használat
Hitelesített jogkivonatok
Amikor egy hitelesített ügyfél aktiválja a függvényt, hozzáadhat egy felhasználói azonosító jogcímet a létrehozott jogkivonathoz. Az App Service-hitelesítéssel egyszerűen hozzáadhat hitelesítést egy függvényalkalmazáshoz.
Az App Service-hitelesítés beállítja a http-fejléceket, x-ms-client-principal-id
amelyek x-ms-client-principal-name
tartalmazzák a hitelesített felhasználó ügyfélnév-azonosítóját és nevét.
A kötés tulajdonságát a fejlécből származó értékre állíthatja UserId
egy kötési kifejezéssel: {headers.x-ms-client-principal-id}
vagy {headers.x-ms-client-principal-name}
.
[Function("Negotiate")]
public static string Negotiate([HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequestData req,
[SignalRConnectionInfoInput(HubName = "hubName1", UserId = "{headers.x-ms-client-principal-id}")] string connectionInfo)
{
// The serialization of the connection info object is done by the framework. It should be camel case. The SignalR client respects the camel case response only.
return connectionInfo;
}
@FunctionName("negotiate")
public SignalRConnectionInfo negotiate(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST, HttpMethod.GET },
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> req,
@SignalRConnectionInfoInput(name = "connectionInfo", hubName = "hubName1", userId = "{headers.x-ms-signalr-userid}") SignalRConnectionInfo connectionInfo) {
return connectionInfo;
}
Az alábbi kötési adatok a function.json fájlban:
{
"type": "signalRConnectionInfo",
"name": "connectionInfo",
"hubName": "hubName1",
"userId": "{headers.x-ms-client-principal-id}",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "in"
}
A JavaScript-kód a következő:
const { app, input } = require('@azure/functions');
const inputSignalR = input.generic({
type: 'signalRConnectionInfo',
name: 'connectionInfo',
hubName: 'hubName1',
connectionStringSetting: 'AzureSignalRConnectionString',
userId: '{headers.x-ms-client-principal-id}',
});
app.post('negotiate', {
authLevel: 'function',
handler: (request, context) => {
return { body: JSON.stringify(context.extraInputs.get(inputSignalR)) }
},
route: 'negotiate',
extraInputs: [inputSignalR],
});
A Teljes PowerShell-példák függőben vannak.
A Python-kód a következő:
def main(req: func.HttpRequest, connectionInfo: str) -> func.HttpResponse:
# connectionInfo contains an access key token with a name identifier
# claim set to the authenticated user
return func.HttpResponse(
connectionInfo,
status_code=200,
headers={
'Content-type': 'application/json'
}
)
@FunctionName("negotiate")
public SignalRConnectionInfo negotiate(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> req,
@SignalRConnectionInfoInput(
name = "connectionInfo",
HubName = "hubName1",
userId = "{headers.x-ms-client-principal-id}") SignalRConnectionInfo connectionInfo) {
return connectionInfo;
}
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 SignalRConnectionInfoInput
ismerteti:
Attribútumtulajdonság | Leírás |
---|---|
HubName | Szükséges. A központ neve. |
ConnectionStringSetting | A SignalR service kapcsolati sztring-t tartalmazó alkalmazásbeállítás neve, amely alapértelmezés szerint a következő.AzureSignalRConnectionString |
UserId | Opcionális. A SignalR-kapcsolat felhasználói azonosítója. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
IdToken | Opcionális. Egy JWT-jogkivonat, amelynek jogcímei hozzá lesznek adva a felhasználói jogcímhez. A Jogcímtípuslistával együtt kell használni. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
ClaimTypeList | Opcionális. A jogcímtípusok listája, amely az IdTokenben szűri a jogcímeket. |
Jegyzetek
Az alábbi táblázat a széljegyzet támogatott beállításait SignalRConnectionInfoInput
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 | Szükséges. A központ neve. |
connectionStringSetting | A SignalR service kapcsolati sztring-t tartalmazó alkalmazásbeállítás neve, amely alapértelmezés szerint a következő.AzureSignalRConnectionString |
userId | Opcionális. A SignalR-kapcsolat felhasználói azonosítója. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
idToken | Opcionális. Egy JWT-jogkivonat, amelynek jogcímei hozzá lesznek adva a felhasználói jogcímhez. A jogcímtípuslistával együtt kell használni. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
claimTypeList | Opcionális. A jogcímtípusok listája, amely az idTokenben szűri a jogcímeket. |
Jegyzetek
Az alábbi táblázat a széljegyzet támogatott beállításait SignalRConnectionInfoInput
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 | Szükséges. A központ neve. |
connectionStringSetting | A SignalR service kapcsolati sztring-t tartalmazó alkalmazásbeállítás neve, amely alapértelmezés szerint a következő.AzureSignalRConnectionString |
userId | Opcionális. A SignalR-kapcsolat felhasználói azonosítója. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
idToken | Opcionális. Egy JWT-jogkivonat, amelynek jogcímei hozzá lesznek adva a felhasználói jogcímhez. A jogcímtípuslistával együtt kell használni. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
claimTypeList | Opcionális. A jogcímtípusok listája, amely az idTokenben szűri a jogcímeket. |
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 signalRConnectionInfo következőnek kell lennie: . |
direction | A beállításnak a in következőnek kell lennie: . |
hubName | Szükséges. A központ neve. |
connectionStringSetting | A SignalR service kapcsolati sztring-t tartalmazó alkalmazásbeállítás neve, amely alapértelmezés szerint a következő.AzureSignalRConnectionString |
userId | Opcionális. A SignalR-kapcsolat felhasználói azonosítója. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
idToken | Opcionális. Egy JWT-jogkivonat, amelynek jogcímei hozzá lesznek adva a felhasználói jogcímhez. A jogcímtípuslistával együtt kell használni. Egy kötési kifejezéssel egy HTTP-kérelemfejléchez vagy -lekérdezéshez kötheti az értéket. |
claimTypeList | Opcionális. A jogcímtípusok listája, amely az idTokenben szűri a jogcímeket. |
Kötési kifejezések HTTP-eseményindítóhoz
Gyakori forgatókönyv, hogy a SignalR bemeneti kötés egyes attribútumainak értékei HTTP-kérésekből származnak. Ezért bemutatjuk, hogyan köthet értékeket HTTP-kérésekből a SignalR bemeneti kötési attribútumaihoz kötési kifejezéssel.
HTTP-metaadatok típusa | Kötési kifejezés formátuma | Leírás | Példa |
---|---|---|---|
HTTP-kérelem lekérdezése | {query.QUERY_PARAMETER_NAME} |
A megfelelő lekérdezési paraméter értékét attribútumhoz köti | {query.userName} |
HTTP-kérelem fejléce | {headers.HEADER_NAME} |
Egy fejléc értékét attribútumhoz köti | {headers.token} |