Scale-out di SignalR con il bus di servizio di AzureSignalR Scaleout with Azure Service Bus

di Mike Wasson, Patrick Fletcherby Mike Wasson, Patrick Fletcher

Warning

Questa documentazione non è destinata alla versione più recente di SignalR.This documentation isn't for the latest version of SignalR. Esaminare ASP.NET Core SignalR.Take a look at ASP.NET Core SignalR.

In questa esercitazione verrà distribuita un'applicazione SignalR a un ruolo Web di Windows Azure, usando il backplane del bus di servizio per distribuire i messaggi a ogni istanza del ruolo.In this tutorial, you will deploy a SignalR application to a Windows Azure Web Role, using the Service Bus backplane to distribute messages to each role instance. È anche possibile usare il backplane del bus di servizio con app Web nel servizio app Azure.(You can also use the Service Bus backplane with web apps in Azure App Service.)

Prerequisiti:Prerequisites:

Il backplane del bus di servizio è compatibile anche con il bus di servizio per Windows Server, versione 1,1.The service bus backplane is also compatible with Service Bus for Windows Server, version 1.1. Tuttavia, non è compatibile con la versione 1,0 del bus di servizio per Windows Server.However, it is not compatible with version 1.0 of Service Bus for Windows Server.

PrezziPricing

Il backplane del bus di servizio usa gli argomenti per inviare i messaggi.The Service Bus backplane uses topics to send messages. Per le informazioni più aggiornate sui prezzi, vedere Service Bus.For the latest pricing information, see Service Bus. Al momento della stesura di questo articolo, è possibile inviare 1 milione messaggi al mese per meno di $1.At the time of this writing, you can send 1,000,000 messages per month for less than $1. Il backplane Invia un messaggio del bus di servizio per ogni chiamata di un metodo dell'hub SignalR.The backplane sends a service bus message for each invocation of a SignalR hub method. Sono inoltre presenti alcuni messaggi di controllo per le connessioni, le disconnessioni, il join o la uscita dei gruppi e così via.There are also some control messages for connections, disconnections, joining or leaving groups, and so forth. Nella maggior parte delle applicazioni, la maggior parte del traffico dei messaggi sarà chiamata al metodo dell'hub.In most applications, the majority of the message traffic will be hub method invocations.

PanoramicaOverview

Prima di arrivare all'esercitazione dettagliata, di seguito viene illustrata una rapida panoramica delle operazioni che si intende eseguire.Before we get to the detailed tutorial, here is a quick overview of what you will do.

  1. Usare il portale di Azure di Windows per creare un nuovo spazio dei nomi del bus di servizio.Use the Windows Azure portal to create a new Service Bus namespace.

  2. Aggiungere i pacchetti NuGet all'applicazione:Add these NuGet packages to your application:

  3. Creare un'applicazione SignalR.Create a SignalR application.

  4. Per configurare il backplane, aggiungere il codice seguente a Startup.cs:Add the following code to Startup.cs to configure the 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.This code configures the backplane with the default values for TopicCount and MaxQueueLength. Per informazioni sulla modifica di questi valori, vedere prestazioni di SignalR: metriche di scalabilità orizzontale.For information on changing these values, see SignalR Performance: Scaleout Metrics.

Per ogni applicazione, selezionare un valore diverso per "YourAppName".For each application, pick a different value for "YourAppName". Non usare lo stesso valore tra più applicazioni.Do not use the same value across multiple applications.

Creare i servizi di AzureCreate the Azure Services

Creare un servizio cloud, come descritto in come creare e distribuire un servizio cloud.Create a Cloud Service, as described in How to Create and Deploy a Cloud Service. Seguire i passaggi nella sezione "procedura: creare un servizio cloud usando creazione rapida".Follow the steps in the section "How to: Create a cloud service using Quick Create". Per questa esercitazione non è necessario caricare un certificato.For this tutorial, you do not need to upload a certificate.

Creare un nuovo spazio dei nomi del bus di servizio, come descritto in come usare gli argomenti/sottoscrizioni del bus di servizio.Create a new Service Bus namespace, as described in How to Use Service Bus Topics/Subscriptions. Seguire i passaggi nella sezione "creare uno spazio dei nomi del servizio".Follow the steps in the section "Create a Service Namespace".

Note

Assicurarsi di selezionare la stessa area per il servizio cloud e lo spazio dei nomi del bus di servizio.Make sure to select the same region for the cloud service and the Service Bus namespace.

Creare il progetto di Visual StudioCreate the Visual Studio Project

Avviare Visual Studio.Start Visual Studio. Scegliere Nuovo progetto dal menu File.From the File menu, click New Project.

Nella finestra di dialogo nuovo progetto espandere oggetto visivo C# .In the New Project dialog box, expand Visual C#. In modelli installatiselezionare cloud , quindi selezionare servizio cloud di Microsoft Azure.Under Installed Templates, select Cloud and then select Windows Azure Cloud Service. Mantieni il valore predefinito .NET Framework 4,5.Keep the default .NET Framework 4.5. Assegnare all'applicazione il nome ChatService e fare clic su OK.Name the application ChatService and click OK.

Nella finestra di dialogo nuovo servizio cloud di Microsoft Azure selezionare ruolo Web ASP.NET.In the New Windows Azure Cloud Service dialog, select ASP.NET Web Role. Fare clic sul pulsante freccia destra ( > ) per aggiungere il ruolo alla soluzione.Click the right-arrow button (>) to add the role to your solution.

Posizionare il puntatore del mouse sul nuovo ruolo, in modo che sia visibile l'icona della matita.Hover the mouse over the new role, so the pencil icon visible. Fare clic su questa icona per rinominare il ruolo.Click this icon to rename the role. Assegnare al ruolo il nome "SignalRChat" e fare clic su OK.Name the role "SignalRChat" and click OK.

Nella finestra di dialogo nuovo progetto ASP.NET selezionare MVC, quindi fare clic su OK.In the New ASP.NET Project dialog, select MVC, and click OK.

La creazione guidata progetto crea due progetti:The project wizard creates two projects:

  • ChatService: questo progetto è l'applicazione Windows Azure.ChatService: This project is the Windows Azure application. Definisce i ruoli di Azure e altre opzioni di configurazione.It defines the Azure roles and other configuration options.
  • SignalRChat: questo progetto è il progetto ASP.NET MVC 5.SignalRChat: This project is your ASP.NET MVC 5 project.

Creare l'applicazione di chat SignalRCreate the SignalR Chat Application

Per creare l'applicazione di chat, seguire i passaggi descritti nell'esercitazione Introduzione con SignalR e MVC 5.To create the chat application, follow the steps in the tutorial Getting Started with SignalR and MVC 5.

Usare NuGet per installare le librerie necessarie.Use NuGet to install the required libraries. Dal menu strumenti selezionare Gestione pacchetti NuGet, quindi selezionare Console di Gestione pacchetti.From the Tools menu, select NuGet Package Manager, then select Package Manager Console. Nella finestra console di gestione pacchetti immettere i comandi seguenti:In the Package Manager Console window, enter the following commands:

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, invece che nel progetto Windows Azure.Use the -ProjectName option to install the packages to the ASP.NET MVC project, rather than the Windows Azure project.

Configurare il backplaneConfigure the Backplane

Nel file Startup.cs dell'applicazione aggiungere il codice seguente:In your application's Startup.cs file, add the following code:

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 punto è necessario ottenere la stringa di connessione del bus di servizio.Now you need to get your service bus connection string. Nella portale di Azure selezionare lo spazio dei nomi del bus di servizio creato e fare clic sull'icona del tasto di scelta.In the Azure portal, select the service bus namespace that you created and click the Access Key icon.

Copiare la stringa di connessione negli Appunti, quindi incollarla nella variabile ConnectionString .Copy the connection string to the clipboard, then paste it into the connectionString variable.

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

Distribuire in AzureDeploy to Azure

In Esplora soluzioni espandere la cartella ruoli all'interno del progetto ChatService.In Solution Explorer, expand the Roles folder inside the ChatService project.

Fare clic con il pulsante destro del mouse sul ruolo SignalRChat e scegliere Proprietà.Right-click the SignalRChat role and select Properties. Selezionare la scheda configurazione . In istanze selezionare 2.Select the Configuration tab. Under Instances select 2. È anche possibile impostare le dimensioni della macchina virtuale su un numero molto basso.You can also set the VM size to Extra Small.

Salvare le modifiche.Save the changes.

In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto ChatService.In Solution Explorer, right-click the ChatService project. Selezionare Pubblica.Select Publish.

Se è la prima volta che si esegue la pubblicazione in Windows Azure, è necessario scaricare le credenziali.If this is your first time publishing to Windows Azure, you must download your credentials. Nella pubblicazione guidata, fare clic su "Accedi per scaricare le credenziali".In the Publish wizard, click "Sign in to download credentials". Verrà richiesto di accedere al portale di Azure di Windows e di scaricare un file di impostazioni di pubblicazione.This will prompt you to sign into the Windows Azure portal and download a publish settings file.

Fare clic su Importa e selezionare il file di impostazioni di pubblicazione scaricato.Click Import and select the publish settings file that you downloaded.

Fare clic su Avanti.Click Next. Nella finestra di dialogo impostazioni di pubblicazione , in servizio cloud, selezionare il servizio cloud creato in precedenza.In the Publish Settings dialog, under Cloud Service, select the cloud service that you created earlier.

Fare clic su Pubblica.Click Publish. La distribuzione dell'applicazione e l'avvio delle macchine virtuali potrebbero richiedere alcuni minuti.It can take a few minutes to deploy the application and start the VMs.

Ora, quando si esegue l'applicazione di chat, le istanze del ruolo comunicano tramite il bus di servizio di Azure, usando un argomento del bus di servizio.Now when you run the chat application, the role instances communicate through Azure Service Bus, using a Service Bus topic. Un argomento è una coda di messaggi che consente più Sottoscrittori.A topic is a message queue that allows multiple subscribers.

Il backplane crea automaticamente l'argomento e le sottoscrizioni.The backplane automatically creates the topic and the subscriptions. Per visualizzare le sottoscrizioni e l'attività del messaggio, aprire il portale di Azure, selezionare lo spazio dei nomi del bus di servizio e fare clic su "argomenti".To see the subscriptions and message activity, open the Azure portal, select the Service Bus namespace, and click on "Topics".

Per la visualizzazione dell'attività del messaggio nel dashboard sono necessari alcuni minuti.It make take a few minutes for the message activity to show up in the dashboard.

SignalR gestisce la durata dell'argomento.SignalR manages the topic lifetime. Finché l'applicazione viene distribuita, non provare a eliminare manualmente gli argomenti o a modificare le impostazioni dell'argomento.As long as your application is deployed, don't try to manually delete topics or change settings on the topic.

Risoluzione dei problemiTroubleshooting

System. InvalidOperationException "l'unico IsolationLevel supportato è' IsolationLevel. Serializable '".System.InvalidOperationException "The only supported IsolationLevel is 'IsolationLevel.Serializable'."

Questo errore può verificarsi se il livello di transazione per un'operazione viene impostato su un valore diverso da Serializable.This error can occur if the transaction level for an operation is set to something other than Serializable. Verificare che non vengano eseguite operazioni con altri livelli di transazione.Verify that no operations are being performed with other transaction levels.