associazione di trigger Servizio SignalR per Funzioni di Azure
Usare l'associazione di trigger SignalR per rispondere ai messaggi inviati da Servizio Azure SignalR. Quando viene attivata la funzione, i messaggi passati alla funzione vengono analizzati come oggetto json.
In Servizio SignalR modalità serverless, Servizio SignalR usa la funzionalità Upstream per inviare messaggi dal client all'app per le funzioni. E l'app per le funzioni usa Servizio SignalR'associazione di trigger per gestire questi messaggi. L'architettura generale è illustrata di seguito:
Per informazioni sui dettagli di impostazione e configurazione, vedere la panoramica.
Esempio
È possibile creare una funzione C# usando una delle modalità C# seguenti:
- Modello di lavoro isolato: funzione C# compilata eseguita in un processo di lavoro isolato dal runtime. Il processo di lavoro isolato è necessario per supportare le funzioni C# in esecuzione in LTS e versioni non LTS .NET e .NET Framework.
- Modello in-process: funzione C# compilata eseguita nello stesso processo del runtime di Funzioni.
- Script C#: usato principalmente quando si creano funzioni C# nel portale di Azure.
Importante
Il supporto terminerà per il modello in-process il 10 novembre 2026. È consigliabile eseguire la migrazione delle app al modello di lavoro isolato per il supporto completo.
L'esempio seguente mostra una funzione C# che riceve un evento di messaggio dai client e registra il contenuto del messaggio.
[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);
}
Importante
Il modello basato su classi delle associazioni Servizio SignalR in un ruolo di lavoro isolato C# non ottimizza il modo in cui si scrivono trigger SignalR a causa della limitazione del modello di lavoro C#. Per altre informazioni sul modello basato su classi, vedere Modello basato su classi.
Il trigger SignalR non è attualmente supportato per Java.
Ecco i dati di associazione nel file function.json:
{
"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}.`)
}
})
Gli esempi completi di PowerShell sono in sospeso.
Ecco il codice Python:
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']))
Attributi
Sia le librerie C# in-process che il processo di lavoro isolato usano l'attributo SignalRTrigger
per definire la funzione. Lo script C# usa invece un file di configurazione function.json.
Nella tabella seguente vengono illustrate le proprietà dell'attributo SignalRTrigger
.
Proprietà dell'attributo | Descrizione |
---|---|
HubName | Questo valore deve essere impostato sul nome dell'hub SignalR per attivare la funzione. |
Categoria | Questo valore deve essere impostato come categoria di messaggi per l'attivazione della funzione. La categoria può essere uno dei valori seguenti:
|
Evento | Questo valore deve essere impostato come evento dei messaggi per l'attivazione della funzione. Per la categoria di messaggi , l'evento è la destinazione nel messaggio di chiamata inviato dai client. Per la categoria di connessioni viene usata solo la connessione e la disconnessione . |
ParameterNames | (Facoltativo) Elenco di nomi associati ai parametri. |
ConnectionStringSetting | Nome dell'impostazione dell'app che contiene il Servizio SignalR stringa di connessione, che per impostazione predefinita è AzureSignalRConnectionString . |
Annotazioni
Attualmente non esiste un'annotazione Java supportata per un trigger SignalR.
Impostazione
Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json.
Proprietà di function.json | Descrizione |
---|---|
type | Deve essere impostato su SignalRTrigger . |
direction | Deve essere impostato su in . |
name | Nome della variabile usato nel codice della funzione per l'oggetto contesto di chiamata del trigger. |
hubName | Questo valore deve essere impostato sul nome dell'hub SignalR per attivare la funzione. |
category | Questo valore deve essere impostato come categoria di messaggi per l'attivazione della funzione. La categoria può essere uno dei valori seguenti:
|
event | Questo valore deve essere impostato come evento dei messaggi per l'attivazione della funzione. Per la categoria di messaggi , l'evento è la destinazione nel messaggio di chiamata inviato dai client. Per la categoria di connessioni viene usata solo la connessione e la disconnessione . |
parameterNames | (Facoltativo) Elenco di nomi associati ai parametri. |
connectionStringSetting | Nome dell'impostazione dell'app che contiene il Servizio SignalR stringa di connessione, che per impostazione predefinita è AzureSignalRConnectionString . |
Per esempi completi, vedere la sezione di esempio.
Utilizzo
Payload
Il tipo di input del trigger viene dichiarato come InvocationContext
o come tipo personalizzato. Se si sceglie InvocationContext
, si ottiene l'accesso completo al contenuto della richiesta. Per un tipo personalizzato, il runtime cerca di analizzare il corpo della richiesta JSON per impostare le proprietà dell'oggetto.
InvocationContext
InvocationContext
contiene tutto il contenuto del messaggio inviato da un servizio SignalR, che include le proprietà seguenti:
Proprietà | Descrizione |
---|---|
Argomenti | Disponibile per la categoria di messaggi . Contiene argomenti nel messaggio di chiamata |
Error | Disponibile per l'evento disconnesso . Può essere Vuoto se la connessione è chiusa senza errori o contiene i messaggi di errore. |
Hub | Nome dell'hub a cui appartiene il messaggio. |
Categoria | Categoria del messaggio. |
Event | Evento del messaggio. |
ID connessione | ID connessione del client che invia il messaggio. |
ID utente | Identità utente del client che invia il messaggio. |
Intestazioni | Intestazioni della richiesta. |
Query | Query della richiesta quando i client si connettono al servizio. |
Richieste | Attestazioni del client. |
uso di ParameterNames
La proprietà ParameterNames
in SignalRTrigger
consente di associare argomenti di messaggi di chiamata ai parametri delle funzioni. È possibile usare il nome definito come parte delle espressioni di associazione in altre associazioni o come parametri nel codice. In questo modo è possibile accedere agli argomenti di InvocationContext
.
Si supponga di avere un client JavaScript SignalR che tenta di richiamare il metodo broadcast
nella funzione di Azure con due argomenti message1
, message2
.
await connection.invoke("broadcast", message1, message2);
Dopo aver impostato parameterNames
, i nomi definiti corrispondono agli argomenti inviati sul lato client.
[SignalRTrigger(parameterNames: new string[] {"arg1, arg2"})]
Contiene quindi arg1
il contenuto di message1
e arg2
contiene il contenuto di message2
.
ParameterNames
Considerazioni
Per l'associazione di parametri, l'ordine è importante. Se si usa ParameterNames
, l'ordine in ParameterNames
corrisponde all'ordine degli argomenti richiamati nel client. Se si usa l'attributo [SignalRParameter]
in C#, l'ordine degli argomenti nei metodi di Funzione di Azure corrisponde all'ordine degli argomenti nei client.
ParameterNames
Non è possibile usare l'attributo [SignalRParameter]
e contemporaneamente oppure si otterrà un'eccezione.
integrazione di Servizio SignalR
Servizio SignalR richiede un URL per accedere all'app per le funzioni quando si usa Servizio SignalR'associazione di trigger. L'URL deve essere configurato in Impostazioni upstream sul lato Servizio SignalR.
Quando si usa Servizio SignalR trigger, l'URL può essere semplice e formattato come segue:
<Function_App_URL>/runtime/webhooks/signalr?code=<API_KEY>
L'elemento Function_App_URL
è disponibile nella pagina Panoramica dell'app per le funzioni e viene API_KEY
generato dalla funzione di Azure. È possibile ottenere da API_KEY
signalr_extension
nel pannello Chiavi app dell'app per le funzioni.
Se si vuole usare più app per le funzioni insieme a una Servizio SignalR, upstream può supportare anche regole di routing complesse. Per altre informazioni, vedere Impostazioni Upstream.
Esempio dettagliato
È possibile seguire l'esempio in GitHub per distribuire una chat room nell'app per le funzioni con Servizio SignalR l'associazione di trigger e la funzionalità upstream: Esempio di chat room bidirezionale