Condividi tramite


Usare Servizio Azure SignalR

Questo articolo illustra come usare l'SDK sul lato server dell'app per connettersi a Servizio SignalR quando si usa SignalR nel server app.

Importante

Le stringa di connessione non elaborate vengono visualizzate in questo articolo solo a scopo dimostrativo.

Un stringa di connessione include le informazioni di autorizzazione necessarie per consentire all'applicazione di accedere alle Servizio Azure SignalR. La chiave di accesso all'interno della stringa di connessione è simile a una password radice per il servizio. Negli ambienti di produzione proteggere sempre le chiavi di accesso. Usare Azure Key Vault per gestire e ruotare le chiavi in modo sicuro e proteggere i stringa di connessione usando Microsoft Entra ID e autorizzare l'accesso con Microsoft Entra ID.

Evitare di distribuire le chiavi di accesso ad altri utenti, impostarle come hardcoded o salvarle in un file di testo normale accessibile ad altri. Ruotare le chiavi se si ritiene che siano state compromesse.

Creare un'istanza del servizio Azure SignalR

Seguire Avvio rapido: Usare un modello di Resource Manager per distribuire Azure SignalR per creare un'istanza del servizio SignalR.

Per ASP.NET Core SignalR

Installazione dell'SDK

Eseguire il comando per installare Servizio SignalR SDK nel progetto ASP.NET Core.

dotnet add package Microsoft.Azure.SignalR

Startup Nella classe usare Servizio SignalR SDK come frammento di codice seguente.

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR()
            .AddAzureSignalR();
}

public void Configure(IApplicationBuilder app)
{
    app.UseEndpoints(routes =>
    {
        routes.MapHub<YourHubClass>("/path_for_your_hub");
    });
}

Configurare la stringa di connessione

Le stringa di connessione non elaborate vengono visualizzate in questo articolo solo a scopo dimostrativo. Negli ambienti di produzione proteggere sempre le chiavi di accesso. Usare Azure Key Vault per gestire e ruotare le chiavi in modo sicuro e proteggere i stringa di connessione usando Microsoft Entra ID e autorizzare l'accesso con Microsoft Entra ID.

Esistono due approcci per configurare le stringa di connessione di Servizio SignalR nell'applicazione.

  • Impostare una variabile di ambiente con nome Azure:SignalR:ConnectionString o Azure__SignalR__ConnectionString.

    • In app Azure Servizio inserirlo nelle impostazioni dell'applicazione.
  • Passare il stringa di connessione come parametro di AddAzureSignalR().

    services.AddSignalR()
            .AddAzureSignalR("<replace with your connection string>");
    

    or

    services.AddSignalR()
            .AddAzureSignalR(options => options.ConnectionString = "<replace with your connection string>");
    

Configurare le opzioni

Sono disponibili alcune opzioni che è possibile personalizzare quando si usa Servizio Azure SignalR SDK.

ConnectionString

  • Il valore predefinito è o Azure:SignalR:ConnectionString connectionString appSetting nel web.config file.
  • Può essere riconfigurato, ma assicurarsi che il valore non sia hardcoded.

InitialHubServerConnectionCount

  • Il valore predefinito è 5.
  • Questa opzione controlla il numero iniziale di connessioni per hub tra server applicazioni e Servizio Azure SignalR. In genere, mantenerlo come valore predefinito è sufficiente. Durante il runtime, l'SDK potrebbe avviare nuove connessioni server per l'ottimizzazione delle prestazioni o il bilanciamento del carico. Quando si dispone di un numero elevato di client, è possibile assegnargli un numero maggiore per una maggiore velocità effettiva. Ad esempio, se si dispone di 100.000 client in totale, il numero di connessioni può essere aumentato a 10 o 15.

MaxHubServerConnectionCount

  • Il valore predefinito è null.
  • Questa opzione controlla il numero massimo di connessioni consentite per hub tra il server applicazioni e Servizio Azure SignalR. Durante il runtime, l'SDK potrebbe avviare nuove connessioni server per l'ottimizzazione delle prestazioni o il bilanciamento del carico. Per impostazione predefinita, viene avviata una nuova connessione server ogni volta che è necessario. Quando è configurato il numero massimo di connessioni server consentite, l'SDK non avvia nuove connessioni quando il numero di connessioni server raggiunge il limite.

ApplicationName

  • Il valore predefinito è null.
  • Questa opzione può essere utile quando si vuole condividere la stessa istanza di Azure SignalR per server app diversi contenenti gli stessi nomi di hub. Se non impostato, tutti i server app connessi vengono considerati istanze della stessa applicazione.

ClaimsProvider

  • Il valore predefinito è null.
  • Questa opzione controlla le attestazioni da associare alla connessione client. Viene usato quando Service SDK genera il token di accesso per il client nella richiesta negoziata del client. Per impostazione predefinita, tutte le attestazioni HttpContext.User della richiesta negoziata sono riservate. È possibile accedervi all'indirizzo Hub.Context.User.
  • In genere è consigliabile lasciare questa opzione così come è. Assicurarsi di comprendere cosa accade prima di personalizzarlo.

AccessTokenLifetime

  • Il valore predefinito è 1 hour.
  • Questa opzione controlla la durata valida del token di accesso, che Service SDK genera per ogni client. Il token di accesso viene restituito nella risposta alla richiesta negoziata del client.
  • Quando ServerSentEvent o LongPolling viene usato come trasporto, la connessione client verrà chiusa a causa di un errore di autenticazione dopo la scadenza. È possibile aumentare questo valore per evitare la disconnessione del client.

AccessTokenAlgorithm

  • Il valore predefinito è HS256.
  • Questa opzione consente di scegliere quando si genera il token di SecurityAlgorithms accesso. Ora i valori facoltativi supportati sono HS256 e HS512. Si noti che HS512 è più sicuro, ma il token generato è relativamente più lungo di quello che usa HS256.

ServerStickyMode

  • Il valore predefinito è Disabled.
  • Questa opzione specifica la modalità per il server sticky. Quando il client viene indirizzato al server con cui negozia per la prima volta, viene chiamato server sticky.
  • Negli scenari distribuiti è possibile connettere più server app a un'istanza di Azure SignalR. Come spiegano gli elementi interni delle connessioni client, il client negozia prima con il server app e quindi reindirizza ad Azure SignalR per stabilire la connessione permanente. Azure SignalR trova quindi un server app per gestire il client, come spiega Transport Data between client and server (Dati di trasporto tra client e server ).
    • Quando Disabled, il client instrada a un server app casuale. In generale, i server app hanno connessioni client bilanciate con questa modalità. Se gli scenari vengono trasmessi o inviati da gruppi, usare questa opzione predefinita.
    • Quando Preferred, Azure SignalR tenta di trovare il server app con cui il client negozia per la prima volta in modo che non sia necessario alcun altro costo o routing globale. Questo può essere utile quando lo scenario viene inviato alla connessione*. L'invio alla connessione può avere prestazioni migliori e una latenza inferiore quando il mittente e il ricevitore vengono instradati allo stesso server app.
    • Quando Required, Azure SignalR tenta sempre di trovare il server app con cui il client negozia per la prima volta. Questa opzione può essere utile quando un contesto client viene recuperato dal negotiate passaggio e archiviato in memoria e quindi da usare all'interno Hubdi s. Tuttavia, questa opzione potrebbe avere svantaggi delle prestazioni perché richiede azure SignalR di intraprendere altre attività per trovare questo particolare server app a livello globale e per mantenere il routing globale dei traffici tra client e server.

GracefulShutdown

GracefulShutdown.Mode
  • Il valore predefinito è Off.
  • Questa opzione specifica il comportamento dopo che il server app riceve un SIGINT (CTRL+C).
  • Se impostato su WaitForClientsClose, anziché arrestare immediatamente il server, viene rimosso dal Servizio Azure SignalR per impedire l'assegnazione di nuove connessioni client a questo server.
  • Se impostato su MigrateClients, si tenta inoltre di eseguire la migrazione delle connessioni client a un altro server valido. La migrazione verrà attivata solo dopo il recapito di un messaggio.
    • OnConnected e OnDisconnected vengono attivati quando viene eseguita la migrazione delle connessioni in/out.
    • IConnectionMigrationFeature consente di identificare se la connessione viene migrata in/out.
    • Per informazioni dettagliate sull'utilizzo, vedere i codici di esempio.
GracefulShutdown.Timeout
  • Il valore predefinito è 30 seconds.
  • Questa opzione specifica il tempo più lungo in attesa della chiusura/migrazione dei client.

ServiceScaleTimeout

  • Il valore predefinito è 5 minutes.
  • Questa opzione specifica il tempo più lungo in attesa di endpoint del servizio di ridimensionamento dinamico, che influiscono almeno sui client online. In genere, la scalabilità dinamica tra un singolo server app e un endpoint di servizio può essere completata in pochi secondi, considerando anche se sono presenti più server app e più endpoint di servizio con jitter di rete e si vuole garantire la stabilità del client, è possibile configurare questo valore di conseguenza.

MaxPollIntervalInSeconds

  • Il valore predefinito è 5.
  • Questa opzione definisce l'intervallo massimo di polling consentito per LongPolling le connessioni in Servizio Azure SignalR. Se la richiesta di polling successiva non entra in MaxPollIntervalInSeconds, Servizio Azure SignalR pulisce la connessione client.
  • Il valore è limitato a [1, 300].

TransportTypeDetector

  • Valore predefinito: tutti i trasporti sono abilitati.
  • Questa opzione definisce una funzione per personalizzare i trasporti che i client possono usare per inviare richieste HTTP.
  • Utilizzare queste opzioni anziché HttpConnectionDispatcherOptions.Transports per configurare i trasporti.

AllowStatefulReconnects

  • Il valore predefinito è null.
  • Questa opzione abilita o disabilita le riconnessioni con stato per tutti gli hub.
  • Se null, SDK leggerà le impostazioni dell'hub.
  • Se true, Servizio Azure SignalR abiliterà le riconnessioni con stato in tutti gli hub dichiarati. E i client devono abilitare le riconnessioni con stato sul lato client.
  • Se false, Servizio Azure SignalR disabiliterà le riconnessioni con stato in tutti gli hub dichiarati.

Esempio

È possibile configurare le opzioni precedenti come il codice di esempio seguente.

services.AddSignalR()
        .AddAzureSignalR(options =>
            {
                options.InitialHubServerConnectionCount = 10;
                options.AccessTokenLifetime = TimeSpan.FromDays(1);
                options.ClaimsProvider = context => context.User.Claims;

                options.GracefulShutdown.Mode = GracefulShutdownMode.WaitForClientsClose;
                options.GracefulShutdown.Timeout = TimeSpan.FromSeconds(10);
                options.TransportTypeDetector = httpContext => AspNetCore.Http.Connections.HttpTransportType.WebSockets | AspNetCore.Http.Connections.HttpTransportType.LongPolling;
            });

Per l'ASP.NET Legacy SignalR

Nota

Se è la prima volta che si prova SignalR, è consigliabile usare il ASP.NET Core SignalR, è più semplice, affidabile e più facile da usare.

Installazione dell'SDK

Installare Servizio SignalR SDK nel progetto di ASP.NET con Gestione pacchetti Console:

Install-Package Microsoft.Azure.SignalR.AspNet

Startup Nella classe usare Servizio SignalR SDK come frammento di codice seguente, sostituire MapSignalR() con MapAzureSignalR({your_applicationName}). Sostituire {YourApplicationName} con il nome dell'applicazione, ovvero il nome univoco per distinguere questa applicazione con le altre applicazioni. È possibile usare this.GetType().FullName come valore.

public void Configuration(IAppBuilder app)
{
    app.MapAzureSignalR(this.GetType().FullName);
}

Configurare la stringa di connessione

Impostare il stringa di connessione nel web.config file sulla connectionStrings sezione :

<configuration>
    <connectionStrings>
        <add name="Azure:SignalR:ConnectionString" connectionString="Endpoint=...;AccessKey=..."/>
    </connectionStrings>
    ...
</configuration>

Configurare le opzioni

Sono disponibili alcune opzioni che è possibile personalizzare quando si usa Servizio Azure SignalR SDK.

ConnectionString

  • Il valore predefinito è o Azure:SignalR:ConnectionString connectionString appSetting nel web.config file.
  • Può essere riconfigurato, ma assicurarsi che il valore non sia hardcoded.

InitialHubServerConnectionCount

  • Il valore predefinito è 5.
  • Questa opzione controlla il numero iniziale di connessioni per hub tra server applicazioni e Servizio Azure SignalR. In genere, mantenerlo come valore predefinito è sufficiente. Durante il runtime, l'SDK potrebbe avviare nuove connessioni server per l'ottimizzazione delle prestazioni o il bilanciamento del carico. Quando si dispone di un numero elevato di client, è possibile assegnargli un numero maggiore per una maggiore velocità effettiva. Ad esempio, se si dispone di 100.000 client in totale, il numero di connessioni può essere aumentato a 10 o 15.

MaxHubServerConnectionCount

  • Il valore predefinito è null.
  • Questa opzione controlla il numero massimo di connessioni consentite per hub tra il server applicazioni e Servizio Azure SignalR. Durante il runtime, l'SDK potrebbe avviare nuove connessioni server per l'ottimizzazione delle prestazioni o il bilanciamento del carico. Per impostazione predefinita, viene avviata una nuova connessione server ogni volta che è necessario. Quando è configurato il numero massimo di connessioni server consentite, l'SDK non avvia nuove connessioni quando il numero di connessioni server raggiunge il limite.

ApplicationName

  • Il valore predefinito è null.
  • Questa opzione può essere utile quando si vuole condividere la stessa istanza di Azure SignalR per server app diversi contenenti gli stessi nomi di hub. Se non impostato, tutti i server app connessi vengono considerati istanze della stessa applicazione.

ClaimProvider

  • Il valore predefinito è null.
  • Questa opzione controlla le attestazioni da associare alla connessione client. Viene usato quando Service SDK genera il token di accesso per il client nella richiesta negoziata del client. Per impostazione predefinita, tutte le attestazioni IOwinContext.Authentication.User della richiesta negoziata sono riservate.
  • In genere è consigliabile lasciare questa opzione così come è. Assicurarsi di comprendere cosa accade prima di personalizzarlo.

AccessTokenLifetime

  • Il valore predefinito è 1 hour.
  • Questa opzione controlla la durata valida del token di accesso, generato da Service SDK per ogni client. Il token di accesso viene restituito nella risposta alla richiesta negoziata del client.
  • Quando ServerSentEvent o LongPolling viene usato come trasporto, la connessione client verrà chiusa a causa di un errore di autenticazione dopo la scadenza. È possibile aumentare questo valore per evitare la disconnessione del client.

AccessTokenAlgorithm

  • Il valore predefinito è HS256.
  • Questa opzione consente di scegliere quando si genera il token di SecurityAlgorithms accesso. Ora i valori facoltativi supportati sono HS256 e HS512. Si noti che HS512 è più sicuro, ma il token generato è relativamente più lungo di quello che usa HS256.

ServerStickyMode

  • Il valore predefinito è Disabled.
  • Questa opzione specifica la modalità per il server sticky. Quando il client viene indirizzato al server con cui negozia per la prima volta, viene chiamato server sticky.
  • Negli scenari distribuiti è possibile connettere più server app a un'istanza di Azure SignalR. Come spiegano gli elementi interni delle connessioni client, il client negozia prima con il server app e quindi reindirizza ad Azure SignalR per stabilire la connessione permanente. Azure SignalR trova quindi un server app per gestire il client, come spiega Transport Data between client and server (Dati di trasporto tra client e server ).
    • Quando Disabled, il client instrada a un server app casuale. In generale, i server app hanno connessioni client bilanciate con questa modalità. Se gli scenari vengono trasmessi o inviati da gruppi, usare questa opzione predefinita.
    • Quando Preferred, Azure SignalR tenta di trovare il server app con cui il client negozia per la prima volta in modo che non sia necessario alcun altro costo o routing globale. Questo può essere utile quando lo scenario viene inviato alla connessione*. L'invio alla connessione può avere prestazioni migliori e una latenza inferiore quando il mittente e il ricevitore vengono instradati allo stesso server app.
    • Quando Required, Azure SignalR tenta sempre di trovare il server app con cui il client negozia per la prima volta. Questa opzione può essere utile quando un contesto client viene recuperato dal negotiate passaggio e archiviato in memoria e quindi da usare all'interno Hubdi s. Tuttavia, questa opzione potrebbe avere svantaggi delle prestazioni perché richiede azure SignalR di intraprendere altre attività per trovare questo particolare server app a livello globale e per mantenere il routing globale dei traffici tra client e server.

MaxPollIntervalInSeconds

  • Il valore predefinito è 5.
  • Questa opzione definisce il tempo di inattività massimo consentito per le connessioni inattive in Servizio Azure SignalR. In ASP.NET SignalR, si applica al tipo di trasporto di polling lungo o alla riconnessione. Se la richiesta o /poll successiva /reconnect non entra in MaxPollIntervalInSeconds, Servizio Azure SignalR pulisce la connessione client.
  • Il valore è limitato a [1, 300].

Esempio

È possibile configurare le opzioni precedenti come il codice di esempio seguente.

app.Map("/signalr",subApp => subApp.RunAzureSignalR(this.GetType().FullName, new HubConfiguration(), options =>
{
    options.InitialHubServerConnectionCount = 1;
    options.AccessTokenLifetime = TimeSpan.FromDays(1);
    options.ClaimProvider = context => context.Authentication?.User.Claims;
}));

Scalabilità orizzontale del server applicazioni

Con Servizio Azure SignalR, le connessioni permanenti vengono scaricate dal server applicazioni in modo da potersi concentrare sull'implementazione della logica di business nelle classi hub. Tuttavia, è comunque necessario aumentare le prestazioni dei server applicazioni per migliorare le prestazioni quando si gestiscono connessioni client di grandi dimensioni. Di seguito sono riportati alcuni suggerimenti per la scalabilità orizzontale dei server applicazioni.

  • Più server applicazioni possono connettersi alla stessa istanza di Servizio Azure SignalR.
  • Se si vuole condividere la stessa istanza di Azure SignalR per applicazioni diverse contenenti gli stessi nomi di hub, impostarli con un'opzione ApplicationName diversa. Se non impostato, tutti i server app connessi vengono considerati istanze della stessa applicazione.
  • Purché l'opzione ApplicationName e il nome della classe hub corrispondano, le connessioni da server applicazioni diversi vengono raggruppate nello stesso hub.
  • Ogni connessione client viene creata solo in uno dei server applicazioni e i messaggi provenienti da tale client vengono inviati solo allo stesso server applicazioni. Se si desidera accedere alle informazioni client a livello globale (da tutti i server applicazioni), è necessario usare alcune risorse di archiviazione centralizzate per salvare le informazioni client da tutti i server applicazioni.

Passaggi successivi

Questo articolo illustra come usare Servizio SignalR nelle applicazioni. Per altre informazioni sulle Servizio SignalR, vedere gli articoli seguenti.