Condividi tramite


Trigger di Azure Web PubSub e binding per Funzioni di Azure

Questo riferimento illustra come gestire gli eventi Web PubSub in Funzioni di Azure.

Web PubSub è un servizio gestito di Azure che consente agli sviluppatori di creare facilmente applicazioni Web con funzionalità in tempo reale e criteri di tipo pubblicazione-sottoscrizione.

Azione Type
Eseguire una funzione quando i messaggi provengono dal servizio Associazione di trigger
Associare la richiesta all'oggetto di destinazione in Trigger HTTP per le richieste di negoziazione e upstream Associazione di input
Richiamare le azioni del servizio Associazione di output

Codice sorgente | Pacchetto | Documentazione di riferimento dell'API | Documentazione del prodotto | Esempi

Aggiungere all'app Funzioni

Per usare i trigger e le associazioni è necessario fare riferimento al pacchetto appropriato. Il pacchetto NuGet viene usato per le librerie di classi .NET mentre il bundle di estensione viene usato per tutti gli altri tipi di applicazione.

Lingua Aggiungi da... Osservazioni:
C# Installazione del pacchetto NuGet, versione non definitiva
Script C#, JavaScript, Python, PowerShell Installare in modo esplicito le estensioni, Usare bundle di estensioni È consigliabile usare l’estensione Strumenti di Azure con Visual Studio Code.
Script C# (solo online nel portale di Azure) Aggiunta di un'associazione Per aggiornare le estensioni delle associazioni esistenti senza dover ripubblicare l'app per le funzioni, vedere Aggiornare le estensioni.

Concetti chiave

Diagramma che mostra il flusso di lavoro del servizio Web PubSub di Azure che usa le app per le funzioni.

(1)-(2) associazione di input WebPubSubConnection con HttpTrigger per generare la connessione client.

(3)-(4) associazione di trigger WebPubSubTrigger oWebPubSubContext associazione di input con HttpTrigger per gestire la richiesta di servizio.

(5)-(6) associazione di output WebPubSub per richiedere il servizio eseguire un'operazione.

Associazione di trigger

Usare il trigger di funzione per gestire le richieste dal servizio Web PubSub di Azure.

WebPubSubTrigger viene usato quando è necessario gestire le richieste dal lato servizio. Il modello di endpoint trigger sarà simile al seguente, che deve essere impostato sul lato servizio Web PubSub (Portale: impostazioni -> gestore eventi -> Modello URL). Nel modello di endpoint, la parte code=<API_KEY> di query è OBBLIGATORIA quando si usa l'app per le funzioni di Azure per motivi di sicurezza. La chiave è disponibile nel portale di Azure. Trovare la risorsa dell'app per le funzioni e passare a Funzioni ->Chiavi app ->Chiavi di sistema ->webpubsub_extension dopo aver distribuito l'app per le funzioni in Azure. Tuttavia, questa chiave non è necessaria quando si lavora con le funzioni locali.

<Function_App_Url>/runtime/webhooks/webpubsub?code=<API_KEY>

Screenshot delle chiavi di sistema get function.

Esempio

[FunctionName("WebPubSubTrigger")]
public static void Run(
    [WebPubSubTrigger("<hub>", WebPubSubEventType.User, "message")] UserEventRequest request, ILogger log)
{
    log.LogInformation($"Request from: {request.ConnectionContext.UserId}");
    log.LogInformation($"Request message data: {request.Data}");
    log.LogInformation($"Request message dataType: {request.DataType}");
}

L'associazione WebPubSubTrigger supporta anche il valore restituito negli scenari di sincronizzazione, ad esempio eventi Connect di sistema e utente, quando il server può controllare e negare la richiesta client o inviare messaggi direttamente al chiamante. L'evento Connect rispetta ConnectEventResponse e EventErrorResponse, e l’evento utente rispetta UserEventResponse e EventErrorResponse, i tipi rest che non corrispondono a uno scenario corrente vengono ignorati. Se viene restituito EventErrorResponse, il servizio elimina la connessione client.

[FunctionName("WebPubSubTriggerReturnValueFunction")]
public static UserEventResponse Run(
    [WebPubSubTrigger("hub", WebPubSubEventType.User, "message")] UserEventRequest request)
{
    return request.CreateResponse(BinaryData.FromString("ack"), WebPubSubDataType.Text);
}

Attributi e annotazioni

Nelle librerie di classi C# usare l'attributo WebPubSubTrigger.

Di seguito è mostrato un attributo WebPubSubTrigger in una firma del metodo:

[FunctionName("WebPubSubTrigger")]
public static void Run([WebPubSubTrigger("<hub>", <WebPubSubEventType>, "<event-name>")] 
    WebPubSubConnectionContext context, ILogger log)
{
    ...
}

Per un esempio completo, vedere l'esempio in C#.

Impostazione

Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json.

Proprietà di function.json Proprietà dell'attributo Descrizione
type n/d Obbligatoria. Deve essere impostata su webPubSubTrigger.
direction n/d Obbligatoria. Deve essere impostata su in.
name n/d Obbligatoria: nome della variabile usato nel codice della funzione per il parametro che riceve i dati dell'evento.
hub Hub Obbligatorio: il valore deve essere impostato sul nome dell'hub Web PubSub per attivare la funzione. È supportato impostare il valore nell'attributo come priorità più alta oppure può essere impostato nelle impostazioni dell'app come valore globale.
eventType WebPubSubEventType Obbligatorio: il valore deve essere impostato come tipo di evento di messaggi per la funzione da attivare. Il valore deve essere user o system.
eventName EventName Obbligatorio: il valore deve essere impostato come evento dei messaggi per l'attivazione della funzione.
Per il tipo di evento system, il nome dell'evento deve essere in connect, connected, disconnected.
Per i sottoprotocoli definiti dall'utente, il nome dell'evento è message.
Per il sottoprotocollo json.webpubsub.azure.v1. supportato dal sistema, il nome dell'evento è il nome dell'evento definito dall'utente.
connection Connessione Facoltativo: il nome di una raccolta di impostazioni o impostazioni dell'app che specifica il servizio Web PubSub di Azure upstream. Il valore viene utilizzato per la convalida della firma. Il valore viene risolto automaticamente con le impostazioni dell'app "WebPubSubConnectionString" per impostazione predefinita. E null significa che la convalida non è necessaria e ha sempre esito positivo.

Usi

In C#, WebPubSubEventRequest è un parametro di associazione riconosciuto dal tipo, i parametri rest sono associati in base al nome del parametro. Controllare la tabella seguente dei parametri e dei tipi disponibili.

In un linguaggio tipizzato debole come JavaScript, name in function.json viene usato per associare l'oggetto trigger relativo alla tabella di mapping seguente. E rispettare dataType in function.json per convertire il messaggio di conseguenza quando name è impostato su data come oggetto di associazione per l'input del trigger. Tutti i parametri possono essere letti da context.bindingData.<BindingName> ed è JObject convertito.

Nome associazione Tipo di associazione Descrizione Proprietà
request WebPubSubEventRequest Descrive la richiesta upstream La proprietà è diversa dai diversi tipi di evento, incluse le classi derivate ConnectEventRequest, ConnectedEventRequest, UserEventRequest e DisconnectedEventRequest
connectionContext WebPubSubConnectionContext Informazioni comuni sulle richieste EventType, EventName, Hub, ConnectionId, UserId, Headers, Origin, Signature, States
data BinaryData,string,Stream,byte[] Richiedere i dati dei messaggi dal client nell'evento utente message -
dataType WebPubSubDataType Richiedere dataType del messaggio, che supporta binary, text, json -
claims IDictionary<string, string[]> Attestazioni utente nella richiesta di sistema connect -
query IDictionary<string, string[]> Query utente nella richiesta di sistema connect -
sottoprotocolli IList<string> Sottoprotocolli disponibili nella richiesta di sistema connect -
clientCertificates IList<ClientCertificate> Elenco dell'identificazione personale del certificato dai client nella richiesta di sistema connect -
reason string Motivo nella richiesta di sistema disconnected -

Importante

In C#, il parametro supportato da più tipi DEVE essere inserito nel primo, ovvero request o data diverso dal tipo predefinito BinaryData per rendere corretta l'associazione della funzione.

Restituire la risposta

WebPubSubTrigger rispetta la risposta restituita dal cliente per gli eventi sincroni di connect e l'evento utente. Solo la risposta corrispondente viene inviata al servizio. In caso contrario, viene ignorata. Inoltre, l'oggetto restituito WebPubSubTrigger supporta gli utenti a SetState() e ClearStates() per gestire i metadati per la connessione. L'estensione unisce i risultati del valore restituito con quelli originali dalla richiesta WebPubSubConnectionContext.States. Il valore nella chiave esistente è sovrascritto e viene aggiunto il valore nella nuova chiave.

Tipo restituito Descrizione Proprietà
ConnectEventResponse Risposta per l'evento connect Gruppi, Ruoli, UserId, Sottoprotocollo
UserEventResponse Risposta per l'evento utente DataType, Dati
EventErrorResponse Risposta di errore per l'evento di sincronizzazione Codice, ErrorMessage
*WebPubSubEventResponse Tipo di risposta di base di quelli supportati usati per i casi di restituzione incerti -

Associazione di input

L'estensione fornisce due associazioni di input destinate a esigenze diverse.

  • WebPubSubConnection

    Per consentire a un client di connettersi al servizio Web PubSub di Azure, deve conoscere l'URL dell'endpoint del servizio e un token di accesso valido. L'associazione di input WebPubSubConnection produce informazioni necessarie, quindi il client non deve gestire questa generazione di token. Poiché il token è limitato al tempo e può essere usato per autenticare un utente specifico a una connessione, non memorizzare nella cache il token o condividerlo tra i client. Un trigger HTTP che usa questa associazione di input può essere usato per i client per recuperare le informazioni di connessione.

  • WebPubSubContext

    Quando si usa app Web statiche, HttpTrigger è l'unico trigger supportato e, in uno scenario Web PubSub, viene fornita l'associazione di input WebPubSubContext che consente agli utenti di deserializzare la richiesta HTTP upstream dal lato servizio nei protocolli Web PubSub. I clienti possono quindi ottenere risultati simili rispetto a WebPubSubTrigger per gestire facilmente le funzioni. Vedere gli esempi riportati di seguito. Se usato con HttpTrigger, il cliente deve configurare di conseguenza l'URL esposto httpTrigger nel gestore eventi.

Esempio - WebPubSubConnection

L'esempio seguente illustra una funzione C# che acquisisce le informazioni di connessione Web PubSub usando l'associazione di input e la restituisce su HTTP. Nell'esempio seguente, il UserId viene passato tramite la parte di query della richiesta client, ad esempio ?userid={User-A}.

[FunctionName("WebPubSubConnectionInputBinding")]
public static WebPubSubConnection Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
    [WebPubSubConnection(Hub = "<hub>", UserId = "{query.userid}")] WebPubSubConnection connection)
{
    return connection;
}

Token autenticati

Se la funzione viene attivata da un client autenticato, è possibile aggiungere un'attestazione ID utente al token generato. È possibile aggiungere facilmente l'autenticazione a un'app per le funzioni usando l'autenticazione del servizio app.

Autenticazione servizio App imposta le intestazioni HTTP denominate x-ms-client-principal-id e x-ms-client-principal-name contenenti rispettivamente l'ID e il nome dell'entità client dell'utente autenticato.

È possibile impostare la proprietà UserId dell'associazione sul valore da un'intestazione usando un'espressione di associazione: {headers.x-ms-client-principal-id} o {headers.x-ms-client-principal-name}.

[FunctionName("WebPubSubConnectionInputBinding")]
public static WebPubSubConnection Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
    [WebPubSubConnection(Hub = "<hub>", UserId = "{headers.x-ms-client-principal-name}")] WebPubSubConnection connection)
{
    return connection;
}

Nota

Limitato ai tipi di parametri di associazione non supportano un modo per passare l'elenco né la matrice, il WebPubSubConnection non è completamente supportato con tutti i parametri SDK del server, in particolare roles, e include anche groups e expiresAfter. Nel caso in cui il cliente debba aggiungere ruoli o ritardare la compilazione del token di accesso nella funzione, è consigliabile usare server SDK per C#.

[FunctionName("WebPubSubConnectionCustomRoles")]
public static async Task<Uri> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req)
{
    var serviceClient = new WebPubSubServiceClient(new Uri(endpoint), "<hub>", "<web-pubsub-connection-string>");
    var userId = req.Query["userid"].FirstOrDefault();
    // your method to get custom roles.
    var roles = GetRoles(userId);
    return await serviceClient.GetClientAccessUriAsync(TimeSpan.FromMinutes(5), userId, roles);
}

Esempio - WebPubSubContext

L'esempio seguente illustra una funzione C# che acquisisce informazioni sulla richiesta upstream Web PubSub usando l'associazione di input nel tipo di evento connect e la restituisce su HTTP.

[FunctionName("WebPubSubContextInputBinding")]
public static object Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
    [WebPubSubContext] WebPubSubContext wpsContext)
{
    // in the case request is a preflight or invalid, directly return prebuild response by extension.
    if (wpsContext.IsPreflight || wpsContext.HasError)
    {
        return wpsContext.Response;
    }
    var request = wpsContext.Request as ConnectEventRequest;
    var response = new ConnectEventResponse
    {
        UserId = wpsContext.Request.ConnectionContext.UserId
    };
    return response;
}

Impostazione

WebPubSubConnection

Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json e nell'attributo WebPubSubConnection.

Proprietà di function.json Proprietà dell'attributo Descrizione
type n/d Deve essere impostato su webPubSubConnection
direction n/d Deve essere impostato su in
name n/d Nome della variabile usato nel codice della funzione per l'oggetto di associazione di connessione di input.
hub Hub Obbligatorio: il valore deve essere impostato sul nome dell'hub Web PubSub per attivare la funzione. È supportato impostare il valore nell'attributo come priorità più alta oppure può essere impostato nelle impostazioni dell'app come valore globale.
userId ID utente Facoltativo: valore dell'attestazione dell'identificatore utente da impostare nel token della chiave di accesso.
connection Connessione Obbligatorio: nome dell'impostazione dell'app che contiene la stringa di connessione del servizio Web PubSub (il valore predefinito è "WebPubSubConnectionString").

WebPubSubContext

Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json e nell'attributo WebPubSubContext.

Proprietà di function.json Proprietà dell'attributo Descrizione
type n/d Deve essere impostato su webPubSubContext.
direction n/d Deve essere impostato su in.
name n/d Nome della variabile usato nel codice della funzione per la richiesta Web PubSub di input.
connection Connessione Facoltativo: il nome di una raccolta di impostazioni o impostazioni dell'app che specifica il servizio Web PubSub di Azure upstream. Il valore viene usato per la convalida della protezione da abusi e della firma. Il valore viene risolto automaticamente con "WebPubSubConnectionString" per impostazione predefinita. E null significa che la convalida non è necessaria e ha sempre esito positivo.

Utilizzo

WebPubSubConnection

WebPubSubConnection fornisce le proprietà seguenti.

Nome associazione Tipo di associazione Descrizione
BaseUri URI URI connessione client PubSub Web.
URI URI L'URI assoluto della connessione Web PubSub contiene la base generata AccessToken sulla richiesta.
AccessToken string Generato AccessToken in base alle informazioni relative a UserId e al servizio richieste.

WebPubSubContext

WebPubSubContext fornisce le proprietà seguenti.

Nome associazione Tipo di associazione Descrizione Proprietà
request WebPubSubEventRequest Per informazioni dettagliate, vedere la tabella seguente. WebPubSubConnectionContext dall'intestazione della richiesta e da altre proprietà deserializzate dal corpo della richiesta, ad esempio Reason per DisconnectedEventRequest.
Risposta HttpResponseMessage L'estensione compila principalmente la risposta per AbuseProtection e i casi di errore. -
errorMessage string Descrivere i dettagli dell'errore durante l'elaborazione della richiesta upstream. -
hasError bool Flag per indicare se si tratta di una richiesta upstream web PubSub valida. -
isPreflight bool Flag per indicare se si tratta di una richiesta preliminare di AbuseProtection. -

Per WebPubSubEventRequest, viene deserializzato in classi diverse che forniscono informazioni diverse sullo scenario di richiesta. Per PreflightRequest o casi non validi, l'utente può controllare i flag IsPreflight e HasError da conoscere. È consigliabile restituire direttamente la risposta alla compilazione del sistema WebPubSubContext.Response oppure il cliente può registrare errori su richiesta. In scenari diversi, il cliente può leggere le proprietà della richiesta come indicato di seguito.

Classe derivata Descrizione Proprietà
PreflightRequest Usato in AbuseProtection quando IsPreflight è true -
ConnectEventRequest Usato nel tipo di evento di sistema Connect Claims, Query, Subprotocols, ClientCertificates
ConnectedEventRequest Usato nel tipo di evento di sistema Connected -
UserEventRequest Usato nel tipo di evento utente Data, DataType
DisconnectedEventRequest Usato nel tipo di evento di sistema Disconnected Motivo

Nota

Anche se WebPubSubContext è un'associazione di input fornisce un metodo di deserializzazione di richieste in HttpTriggersimile a WebPubSubTrigger, esistono delle limitazioni, ad esempio lo stato della connessione dopo l'unione non è supportato. La risposta restituita viene comunque rispettata dal lato servizio, ma gli utenti devono compilare autonomamente la risposta. Se gli utenti devono impostare la risposta all'evento, è necessario restituire un oggetto HttpResponseMessage contenente ConnectEventResponse o messaggi per l'evento utente come corpo della risposta e impostare lo stato della connessione con la chiave ce-connectionstate nell'intestazione della risposta.

Associazione di output

Usare l'associazione di output Web PubSub per richiamare il servizio PubSub di Azure per eseguire un'operazione. È possibile trasmettere un messaggio a:

  • Tutti i client connessi
  • Client connessi autenticati a un utente specifico
  • Client connessi aggiunti a un gruppo specifico
  • Una connessione client specifica

L'associazione di output consente anche di gestire client e gruppi, nonché di concedere/revocare autorizzazioni destinate a un connectionId specifico con gruppo.

  • Aggiungere una connessione al gruppo
  • Aggiungere utenti al gruppo
  • Rimuovere la connessione da un gruppo
  • Rimuovere l'utente da un gruppo
  • Rimuovere l'utente da tutti i gruppi
  • Chiudere tutte le connessioni client
  • Chiudere una connessione client specifica
  • Chiudere le connessioni in un gruppo
  • Concedere l'autorizzazione di una connessione
  • Revocare l'autorizzazione di una connessione

Per informazioni sui dettagli di impostazione e configurazione, vedere la panoramica.

Esempio

[FunctionName("WebPubSubOutputBinding")]
public static async Task RunAsync(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
    [WebPubSub(Hub = "<hub>")] IAsyncCollector<WebPubSubAction> actions)
{
    await actions.AddAsync(WebPubSubAction.CreateSendToAllAction("Hello Web PubSub!", WebPubSubDataType.Text));
}

WebPubSubAction

WebPubSubAction è il tipo astratto di base delle associazioni di output. I tipi derivati rappresentano il server di azione che desidera richiamare il servizio.

Nel linguaggio C# sono disponibili alcuni metodi statici in WebPubSubAction per individuare le azioni disponibili. Ad esempio, l'utente può creare l'oggetto SendToAllAction chiamando WebPubSubAction.CreateSendToAllAction().

Classe derivata Proprietà
SendToAllAction Dati, DataType, Escluso
SendToGroupAction Gruppo, Dati, DataType, Escluso
SendToUserAction UserId, Dati, DataType
SendToConnectionAction ConnectionId, Dati, DataType
AddUserToGroupAction UserId, Gruppo
RemoveUserFromGroupAction UserId, Gruppo
RemoveUserFromAllGroupsAction ID utente
AddConnectionToGroupAction ConnectionId, Gruppo
RemoveConnectionFromGroupAction ConnectionId, Gruppo
CloseAllConnectionsAction Escluso, Motivo
CloseClientConnectionAction ConnectionId, Motivo
CloseGroupConnectionsAction Gruppo, Escluso, Motivo
GrantPermissionAction ConnectionId, Autorizzazione, TargetName
RevokePermissionAction ConnectionId, Autorizzazione, TargetName

Impostazione

WebPubSub

Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json e nell'attributo WebPubSub.

Proprietà di function.json Proprietà dell'attributo Descrizione
type n/d Deve essere impostato su webPubSub
direction n/d Deve essere impostato su out
name n/d Nome della variabile usato nel codice della funzione per l'oggetto di associazione di output.
hub Hub Il valore deve essere impostato sul nome dell'hub Web PubSub per attivare la funzione. È supportato impostare il valore nell'attributo come priorità più alta oppure può essere impostato nelle impostazioni dell'app come valore globale.
connection Connessione Nome dell'impostazione dell'app che contiene la stringa di connessione del servizio Web PubSub (il valore predefinito è "WebPubSubConnectionString").

Risoluzione dei problemi

Configurazione della registrazione della console

È anche possibile abilitare facilmente la registrazione della console se si vuole approfondire le richieste eseguite con il servizio.

Passaggi successivi

Usare queste risorse per iniziare a compilare un'applicazione personalizzata: