Scale-out di SignalR con il bus di servizio di Azure
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.
Prerequisiti:
- Un account di Windows Azure.
- Windows Azure SDK.
- Visual Studio 2012 o 2013
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.
Usare windows portale di Azure per creare un nuovo spazio dei nomi del bus di servizio.
Aggiungere questi pacchetti NuGet all'applicazione:
Creare un'applicazione SignalR.
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.
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".
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.
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.
Nella finestra di dialogo Nuovo progetto ASP.NET selezionare MVC e fare clic su OK.
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.
Copiare la stringa di connessione negli Appunti, quindi incollarla nella variabile connectionString .
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.
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.
Salvare le modifiche.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto ChatService. Selezionare Pubblica.
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.
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.
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".
La visualizzazione dell'attività del messaggio nel dashboard richiede alcuni minuti.
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.