Scale-out de SignalR avec Azure Service Bus

par Patrick Fletcher

Avertissement

Cette documentation ne concerne pas la dernière version de SignalR. Consultez ASP.NET Core SignalR.

Dans ce tutoriel, vous allez déployer une application SignalR sur un rôle Web Windows Azure, à l’aide du backplane Service Bus pour distribuer des messages à chaque rôle instance. (Vous pouvez également utiliser le fond de panier Service Bus avec des applications web dans Azure App Service.)

Diagramme montrant les flèches de la rubrique vers les rôles web vers les ordinateurs. Une flèche étiquetée publier commence dans Rôles web et accède à Rubrique.

Configuration requise :

Le fond de panier Service Bus est également compatible avec Service Bus pour Windows Server, version 1.1. Toutefois, il n’est pas compatible avec la version 1.0 de Service Bus pour Windows Server.

Tarifs

Le fond de panier Service Bus utilise des rubriques pour envoyer des messages. Pour obtenir les informations tarifaires les plus récentes, consultez Service Bus. Au moment de la rédaction du présent article, vous pouvez envoyer 1 000 000 messages par mois pour moins de 1 $. Le backplane envoie un message Service Bus pour chaque appel d’une méthode de hub SignalR. Il existe également des messages de contrôle pour les connexions, les déconnexions, la jonction ou la sortie de groupes, etc. Dans la plupart des applications, la majorité du trafic de messages sera des appels de méthode hub.

Vue d’ensemble

Avant d’accéder au tutoriel détaillé, voici une vue d’ensemble rapide de ce que vous allez faire.

  1. Utilisez le Portail Azure Windows pour créer un espace de noms Service Bus.

  2. Ajoutez ces packages NuGet à votre application :

  3. Créez une application SignalR.

  4. Ajoutez le code suivant à Startup.cs pour configurer le backplane :

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

Ce code configure le backplane avec les valeurs par défaut pour TopicCount et MaxQueueLength. Pour plus d’informations sur la modification de ces valeurs, consultez Performances de SignalR : Scaleout Metrics.

Pour chaque application, choisissez une valeur différente pour « YourAppName ». N’utilisez pas la même valeur dans plusieurs applications.

Créer les services Azure

Créez un service cloud, comme décrit dans Création et déploiement d’un service cloud. Suivez les étapes de la section « Procédure : créer un service cloud à l’aide de la création rapide ». Pour ce tutoriel, vous n’avez pas besoin de charger un certificat.

Capture d’écran de l’option Service cloud cerclé en rouge.

Créez un espace de noms Service Bus, comme décrit dans Rubriques/abonnements Service Bus. Suivez les étapes de la section « Créer un espace de noms de service ».

Capture d’écran de la fenêtre intitulée Ajouter un nouvel espace de noms avec les options ci-dessous.

Notes

Veillez à sélectionner la même région pour le service cloud et l’espace de noms Service Bus.

Créer le projet Visual Studio

Démarrez Visual Studio. Dans le menu Fichier, cliquez sur Nouveau projet.

Dans la boîte de dialogue Nouveau projet , développez Visual C#. Sous Modèles installés, sélectionnez Cloud , puis Windows Azure Cloud Service. Conservez le .NET Framework 4.5 par défaut. Nommez l’application ChatService et cliquez sur OK.

Capture d’écran montrant la boîte de dialogue Nouveau projet. Le cloud est sélectionné dans le dossier Point de partage Office. Le service de conversation se trouve dans le champ Nom.

Dans la boîte de dialogue Nouveau service cloud Azure Windows , sélectionnez ASP.NET rôle web. Cliquez sur le bouton flèche droite (>) pour ajouter le rôle à votre solution.

Pointez la souris sur le nouveau rôle, afin que l’icône de crayon soit visible. Cliquez sur cette icône pour renommer le rôle. Nommez le rôle « SignalRChat », puis cliquez sur OK.

Capture d’écran montrant la boîte de dialogue Nouveau service cloud Azure Windows. Signal R Conversation est tapé au-dessus d’un rôle web point NET S P.

Dans la boîte de dialogue Nouveau projet ASP.NET , sélectionnez MVC, puis cliquez sur OK.

Capture d’écran montrant la boîte de dialogue New A S P P dot NET Project. M V C est le modèle sélectionné.

L’Assistant Projet crée deux projets :

  • ChatService : ce projet est l’application Windows Azure. Il définit les rôles Azure et d’autres options de configuration.
  • SignalRChat : ce projet est votre ASP.NET projet MVC 5.

Créer l’application SignalR Chat

Pour créer l’application de conversation, suivez les étapes du tutoriel Prise en main avec SignalR et MVC 5.

Utilisez NuGet pour installer les bibliothèques requises. Dans le menu Outils , sélectionnez Gestionnaire de package NuGet, puis console du gestionnaire de package. Dans la fenêtre Console du Gestionnaire de package, entrez les commandes suivantes :

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

Utilisez l’option -ProjectName pour installer les packages sur le ASP.NET projet MVC, plutôt que sur le projet Azure Windows.

Configurer le backplane

Dans le fichier Startup.cs de votre application, ajoutez le code suivant :

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();
}

Vous devez maintenant obtenir votre chaîne de connexion Service Bus. Dans le Portail Azure, sélectionnez l’espace de noms Service Bus que vous avez créé, puis cliquez sur l’icône Clé d’accès.

Capture d’écran montrant un signe plus intitulé Créer, une clé étiquetée Clé d’accès et une corbeille étiquetée Supprimer.

Copiez la chaîne de connexion dans le Presse-papiers, puis collez-la dans la variable connectionString .

Capture d’écran montrant la boîte de dialogue Connexion de la clé d’accès à votre espace de noms.

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

Déployer sur Azure

Dans Explorateur de solutions, développez le dossier Rôles à l’intérieur du projet ChatService.

Capture d’écran montrant un dossier ouvert intitulé Rôles. Signal R Chat est sélectionné.

Cliquez avec le bouton droit sur le rôle SignalRChat et sélectionnez Propriétés. Sélectionnez l’onglet Configuration . Sous Instances, sélectionnez 2. Vous pouvez également définir la taille de la machine virtuelle sur Extra Small.

Capture d’écran montrant instances. Le nombre d’instances est défini sur 2 et la taille V M est définie sur Extra small.

Enregistrez les modifications.

Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet ChatService. Sélectionnez Publier.

Capture d’écran montrant Explorateur de solutions. Publier est sélectionné dans le menu contextuel du service de conversation.

S’il s’agit de votre première publication dans Windows Azure, vous devez télécharger vos informations d’identification. Dans l’Assistant Publication , cliquez sur « Se connecter pour télécharger les informations d’identification ». Cela vous invite à vous connecter au Portail Azure Windows et à télécharger un fichier de paramètres de publication.

Capture d’écran montrant la boîte de dialogue Publier Azure Application Windows. La connexion pour télécharger les informations d’identification est cerclée en rouge.

Cliquez sur Importer et sélectionnez le fichier de paramètres de publication que vous avez téléchargé.

Cliquez sur Suivant. Dans la boîte de dialogue Paramètres de publication, sous Service cloud, sélectionnez le service cloud que vous avez créé précédemment.

Capture d’écran montrant la page Paramètres de publication Windows Azure.

Cliquez sur Publier. Le déploiement de l’application et le démarrage des machines virtuelles peuvent prendre quelques minutes.

Maintenant, lorsque vous exécutez l’application de conversation, les instances de rôle communiquent via Azure Service Bus, à l’aide d’une rubrique Service Bus. Une rubrique est une file d’attente de messages qui autorise plusieurs abonnés.

Le fond de panier crée automatiquement la rubrique et les abonnements. Pour afficher les abonnements et l’activité des messages, ouvrez le Portail Azure, sélectionnez l’espace de noms Service Bus, puis cliquez sur « Rubriques ».

Capture d’écran du menu de navigation avec les rubriques sélectionnées.

L’affichage de l’activité de message dans le tableau de bord prend quelques minutes.

Capture d’écran montrant un graphique de l’activité d’abonnement et de message sur un chronologie.

SignalR gère la durée de vie de la rubrique. Tant que votre application est déployée, n’essayez pas de supprimer manuellement des rubriques ou de modifier les paramètres de la rubrique.

Dépannage

System.InvalidOperationException « Le seul IsolationLevel pris en charge est 'IsolationLevel.Serializable'. »

Cette erreur peut se produire si le niveau de transaction d’une opération est défini sur autre chose que Serializable. Vérifiez qu’aucune opération n’est effectuée avec d’autres niveaux de transaction.