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

dal Mike Wasson, Patrick Fletcherby Mike Wasson, Patrick Fletcher

Note

Questo articolo si riferisce a ASP.NET SignalR.This article refers to ASP.NET SignalR. Se si sta valutando l'uso di SignalR per abilitare scenari in tempo reale con Java, Node. js, o in uno scenario senza server, dare un'occhiata ASP.NET Core SignalR.If you're thinking about using SignalR to enable real-time scenarios with Java, Node.js, or in a serverless scenario, take a look at ASP.NET Core SignalR. Se è già stato usato ASP.NET SignalR, esaminiamo il differenze tra le versioni pagina per comprendere le differenze nelle versioni e i miglioramenti di ASP.NET Core SignalR.If you've already used ASP.NET SignalR, take a look at the version differences page to understand the differences in the versions and the improvements in ASP.NET Core SignalR. Infine, se si conosce a cui verrà eseguita l'App in tempo reale in Microsoft Azure, esaminiamo il servizio Azure SignalR, offrendo scalabilità basata sul cloud dopo che l'App necessaria.Finally, if you know you'll be running your real-time apps in Microsoft Azure, take a look at the Azure SignalR Service, as it provides cloud-based scale-out once your apps need it.

In questa esercitazione si distribuirà un'applicazione di SignalR per un ruolo Web di Azure di Windows, utilizzando il backplane del Bus di servizio per distribuire i messaggi per 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 di Azure.)(You can also use the Service Bus backplane with web apps in Azure App Service.)

Prerequisiti:Prerequisites:

È anche compatibile con il backplane del bus di servizio Service Bus 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 di Service Bus per Windows Server.However, it is not compatible with version 1.0 of Service Bus for Windows Server.

PricingPricing

Backplane del Bus di servizio Usa gli argomenti per inviare messaggi.The Service Bus backplane uses topics to send messages. Per informazioni più aggiornate sui prezzi, vedere del Bus di servizio.For the latest pricing information, see Service Bus. Al momento della stesura di questo articolo, è possibile inviare 1.000.000 di 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. 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. Esistono anche alcuni messaggi di controllo per le connessioni, disconnessioni, unita tramite join o uscire da 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 di messaggi sarà chiamate del metodo dell'hub.In most applications, the majority of the message traffic will be hub method invocations.

PanoramicaOverview

Prima di passare all'esercitazione dettagliata, ecco una rapida panoramica delle azioni da eseguire.Before we get to the detailed tutorial, here is a quick overview of what you will do.

  1. Usare il portale di Azure 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 per l'applicazione:Add these NuGet packages to your application:

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

  4. Aggiungere il codice seguente per configurare backplane 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 consente di configurare con i valori predefiniti per il backplane 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: La metrica 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 utilizzare 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 con creazione rapida".Follow the steps in the section "How to: Create a cloud service using Quick Create". Per questa esercitazione, non occorre 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 procedura per usare Service Bus argomenti/sottoscrizioni.Create a new Service Bus namespace, as described in How to Use Service Bus Topics/Subscriptions. Seguire i passaggi nella sezione "Creare un servizio Namespace".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. Dal File menu, fare clic su nuovo progetto.From the File menu, click New Project.

Nel nuovo progetto finestra di dialogo espandere Visual c#.In the New Project dialog box, expand Visual C#. Sotto modelli installati, selezionare Cloud e quindi selezionare servizio Cloud Azure.Under Installed Templates, select Cloud and then select Windows Azure Cloud Service. Mantenere il valore predefinito di .NET Framework 4.5.Keep the default .NET Framework 4.5. Denominare l'applicazione ChatService e fare clic su OK.Name the application ChatService and click OK.

Nel nuovo servizio Cloud Azure finestra di dialogo, selezionare un 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 mouse sul nuovo ruolo, quindi sull'icona della matita visibile.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. Nome del ruolo "SignalRChat", quindi scegliere OK.Name the role "SignalRChat" and click OK.

Nel nuovo progetto ASP.NET finestra di dialogo, seleziona MVC, 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 di 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 di SignalRCreate the SignalR Chat Application

Per creare l'applicazione di chat, seguire i passaggi nell'esercitazione Introduzione a 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 degli strumenti dal menu Gestione pacchetti NuGet, quindi selezionare Package Manager Console.From the Tools menu, select NuGet Package Manager, then select Package Manager Console. Nel Console di gestione pacchetti finestra, 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 il -ProjectName opzione per installare i pacchetti per il progetto ASP.NET MVC, piuttosto che il progetto 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. Nel portale di Azure, selezionare lo spazio dei nomi del bus di servizio è stato creato e fare clic sull'icona di tasto di scelta rapida.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 incollarlo nella connectionString variabile.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 ruoli cartella all'interno del progetto ChatService.In Solution Explorer, expand the Roles folder inside the ChatService project.

Il ruolo SignalRChat e scegliere proprietà.Right-click the SignalRChat role and select Properties. Scegliere la scheda Configurazione. Sotto istanze selezionare 2.Select the Configuration tab. Under Instances select 2. È anche possibile impostare le dimensioni VM su molto piccola.You can also set the VM size to Extra Small.

Salvare le modifiche.Save the changes.

In Esplora soluzioni fare clic sul progetto le ChatService.In Solution Explorer, right-click the ChatService project. Selezionare Pubblica.Select Publish.

Se questa è la prima pubblicazione ora Windows Azure, è necessario scaricare le credenziali.If this is your first time publishing to Windows Azure, you must download your credentials. Nel pubblica procedura guidata, fare clic su "Accedi scaricare le credenziali".In the Publish wizard, click "Sign in to download credentials". Verrà chiesto di accedere al portale di Azure e 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 importazione e selezionare il file di impostazioni di pubblicazione scaricato.Click Import and select the publish settings file that you downloaded.

Scegliere Avanti.Click Next. Nel impostazioni di pubblicazione finestra di dialogo, sotto 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. Possono volerci alcuni minuti per distribuire l'applicazione e avviare le macchine virtuali.It can take a few minutes to deploy the application and start the VMs.

A questo punto quando si esegue l'applicazione di chat, istanze del ruolo di 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 a più sottoscrittori.A topic is a message queue that allows multiple subscribers.

Backplane crea automaticamente gli argomenti e sottoscrizioni.The backplane automatically creates the topic and the subscriptions. Per visualizzare le sottoscrizioni e 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".

Rende necessari alcuni minuti per l'attività del messaggio da visualizzare nel dashboard.It make take a few minutes for the message activity to show up in the dashboard.

SignalR gestisce la durata di argomento.SignalR manages the topic lifetime. Fino a quando l'applicazione viene distribuita, non tentare di eliminare gli argomenti manualmente o modificare le impostazioni per l'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 è 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 nessuna operazione sono viene eseguita con altri livelli delle transazioni.Verify that no operations are being performed with other transaction levels.