Scale-out di SignalR con il bus di servizio di Azure

di Patrick Fletcher

Avviso

Questa documentazione non è per la versione più recente di SignalR. Esaminare ASP.NET Core SignalR.

In questa esercitazione si distribuirà un'applicazione SignalR in un ruolo Web di Windows Azure usando il backplane del bus di servizio per distribuire i messaggi a ogni istanza del ruolo. È anche possibile usare il backplane del bus di servizio con le app Web in Servizio app di Azure.

Diagramma che mostra le frecce da Argomento a Ruoli Web ai computer. La pubblicazione con etichetta freccia inizia da Ruoli Web e passa a Argomento.

Prerequisiti:

Il backplane del bus di servizio è compatibile anche con il bus di servizio per Windows Server versione 1.1. Tuttavia, non è compatibile con la versione 1.0 del bus di servizio per Windows Server.

Prezzi

Il backplane del bus di servizio usa argomenti per inviare messaggi. Per informazioni sui prezzi più recenti, vedere Bus di servizio. Al momento della stesura di questo articolo, è possibile inviare 1.000.000 messaggi al mese per meno di $1. Il backplane invia un messaggio del bus di servizio per ogni chiamata di un metodo hub SignalR. Esistono anche alcuni messaggi di controllo per connessioni, disconnessioni, join o uscita da gruppi e così via. Nella maggior parte delle applicazioni, la maggior parte del traffico dei messaggi sarà chiamate al metodo hub.

Panoramica

Prima di passare all'esercitazione dettagliata, ecco una rapida panoramica delle operazioni che verranno eseguite.

  1. Usare windows portale di Azure per creare un nuovo spazio dei nomi del bus di servizio.

  2. Aggiungere questi pacchetti NuGet all'applicazione:

  3. Creare un'applicazione SignalR.

  4. Aggiungere il codice seguente a Startup.cs per configurare il backplane:

    public void Configuration(IAppBuilder app)
    {
        string connectionString = "Service Bus connection string";
        GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName");
    
        app.MapSignalR();
        // ...
    }
    

Questo codice configura il backplane con i valori predefiniti per TopicCount e MaxQueueLength. Per informazioni sulla modifica di questi valori, vedere SignalR Performance: Scaleout Metrics.For information on changing these values, see SignalR Performance: Scaleout Metrics.

Per ogni applicazione, selezionare un valore diverso per "NomeApp". Non usare lo stesso valore in più applicazioni.

Creare i servizi di Azure

Creare un servizio cloud, come descritto in Come creare e distribuire un servizio cloud. Seguire la procedura descritta nella sezione "Procedura: Creare un servizio cloud con Creazione rapida". Per questa esercitazione non è necessario caricare un certificato.

Screenshot dell'opzione Servizio cloud in rosso.

Creare un nuovo spazio dei nomi del bus di servizio, come descritto in Come usare argomenti/sottoscrizioni del bus di servizio. Seguire la procedura descritta nella sezione "Creare uno spazio dei nomi del servizio".

Screenshot della finestra intitolata Aggiungere un nuovo spazio dei nomi con le opzioni seguenti.

Nota

Assicurarsi di selezionare la stessa area per il servizio cloud e lo spazio dei nomi del bus di servizio.

Creare il progetto di Visual Studio

Avviare Visual Studio. Scegliere Nuovo progetto dal menu File.

Nella finestra di dialogo Nuovo progetto espandere Visual C#. In Modelli installati selezionare Cloud e quindi servizio cloud di Windows Azure. Mantenere .NET Framework 4.5 predefinito. Assegnare all'applicazione il nome ChatService e fare clic su OK.

Screenshot che mostra la finestra di dialogo Nuovo progetto. Il cloud è selezionato nella cartella Punto di condivisione di Office. Il servizio chat si trova nel campo Nome.

Nella finestra di dialogo Nuovo servizio cloud di Windows Azure selezionare ASP.NET ruolo Web. Fare clic sul pulsante freccia destra (>) per aggiungere il ruolo alla soluzione.

Posizionare il puntatore del mouse sul nuovo ruolo, in modo che l'icona a forma di matita sia visibile. Fare clic su questa icona per rinominare il ruolo. Assegnare al ruolo il nome "SignalRChat" e fare clic su OK.

Screenshot che mostra la finestra di dialogo Nuovo servizio cloud di Windows Azure. Signal R Chat viene digitato sopra un ruolo Web S P dot NET.

Nella finestra di dialogo Nuovo progetto ASP.NET selezionare MVC e fare clic su OK.

Screenshot che mostra la finestra di dialogo Nuovo progetto P dot NET. M V C è il modello selezionato.

La creazione guidata progetto crea due progetti:

  • ChatService: questo progetto è l'applicazione Windows Azure. Definisce i ruoli di Azure e altre opzioni di configurazione.
  • SignalRChat: questo progetto è il progetto ASP.NET MVC 5.

Creare l'applicazione SignalR Chat

Per creare l'applicazione di chat, seguire la procedura descritta nell'esercitazione Introduzione con SignalR e MVC 5.

Usare NuGet per installare le librerie necessarie. Dal menu Strumenti selezionare Gestione pacchetti NuGet e quindi console di Gestione pacchetti. Nella finestra Console di Gestione pacchetti immettere i comandi seguenti:

Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus

Usare l'opzione -ProjectName per installare i pacchetti nel progetto MVC ASP.NET anziché nel progetto Windows Azure.

Configurare il backplane

Nel file Startup.cs dell'applicazione aggiungere il codice seguente:

public void Configuration(IAppBuilder app)
{
    // Any connection or hub wire up and configuration should go here
    string connectionString = "";
    GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");  

    app.MapSignalR();
}

A questo momento è necessario ottenere la stringa di connessione del bus di servizio. Nella portale di Azure selezionare lo spazio dei nomi del bus di servizio creato e fare clic sull'icona Chiave di accesso.

Screenshot che mostra un segno più con etichetta Crea, una chiave con etichetta Chiave di accesso e un cestino etichettato Elimina.

Copiare la stringa di connessione negli Appunti, quindi incollarla nella variabile connectionString .

Screenshot che mostra la finestra di dialogo Access Key Connect to your namespace (Connetti chiave di accesso allo spazio dei nomi).

string connectionString = "Endpoint=sb://xxxx.servicebus.windows.net/;
SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX";

Distribuisci in Azure

In Esplora soluzioni espandere la cartella Ruoli all'interno del progetto ChatService.

Screenshot che mostra una cartella aperta denominata Ruoli. Signal R Chat è selezionato.

Fare clic con il pulsante destro del mouse sul ruolo SignalRChat e scegliere Proprietà. Selezionare la scheda Configurazione . In Istanze selezionare 2. È anche possibile impostare le dimensioni della macchina virtuale su Extra Small.

Screenshot che mostra Istanze. Il numero di istanze è impostato su 2 e la dimensione M V è impostata su Extra small.

Salvare le modifiche.

In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto ChatService. Selezionare Pubblica.

Screenshot che mostra Esplora soluzioni. La pubblicazione è selezionata nel menu di scelta rapida del servizio chat.

Se si tratta della prima pubblicazione in Windows Azure, è necessario scaricare le credenziali. Nella procedura guidata Pubblica fare clic su "Accedi per scaricare le credenziali". Verrà richiesto di accedere a Windows portale di Azure e scaricare un file di impostazioni di pubblicazione.

Screenshot che mostra la finestra di dialogo Pubblica windows applicazione Azure. L'accesso per scaricare le credenziali è in rosso.

Fare clic su Importa e selezionare il file delle impostazioni di pubblicazione scaricato.

Fare clic su Avanti. Nella finestra di dialogo Impostazioni di pubblicazione , in Servizio cloud selezionare il servizio cloud creato in precedenza.

Screenshot che mostra la pagina Impostazioni di pubblicazione di Windows Azure.

Fare clic su Pubblica. La distribuzione dell'applicazione e l'avvio delle macchine virtuali possono richiedere alcuni minuti.

Quando si esegue l'applicazione chat, le istanze del ruolo comunicano tramite bus di servizio di Azure usando un argomento del bus di servizio. Un argomento è una coda di messaggi che consente più sottoscrittori.

Il backplane crea automaticamente l'argomento e le sottoscrizioni. Per visualizzare le sottoscrizioni e l'attività dei messaggi, aprire il portale di Azure, selezionare lo spazio dei nomi del bus di servizio e fare clic su "Argomenti".

Screenshot del menu di spostamento con gli argomenti selezionati.

La visualizzazione dell'attività del messaggio nel dashboard richiede alcuni minuti.

Screenshot che mostra un grafico dell'attività di sottoscrizione e messaggio in una sequenza temporale.

SignalR gestisce la durata dell'argomento. Se l'applicazione viene distribuita, non provare a eliminare manualmente gli argomenti o modificare le impostazioni nell'argomento.

Risoluzione dei problemi

System.InvalidOperationException "L'unico isolationLevel supportato è 'IsolationLevel.Serializable'".

Questo errore può verificarsi se il livello di transazione per un'operazione è impostato su un valore diverso da Serializable. Verificare che non vengano eseguite operazioni con altri livelli di transazione.