Horizontale Skalierung in SignalR mit Azure Service Bus (SignalR 1.x)

von Patrick Fletcher

Warnung

Diese Dokumentation ist nicht für die neueste Version von SignalR vorgesehen. Sehen Sie sich ASP.NET Core SignalR an.

In diesem Tutorial stellen Sie eine SignalR-Anwendung in einer Windows Azure-Webrolle bereit, indem Sie die Service Bus-Backplane verwenden, um Nachrichten an jede Rolle instance zu verteilen.

Diagramm, das die Beziehung zwischen dem Service Bus-Namespacethema, Webrollen und verfügbaren Computern und Konten veranschaulicht.

Voraussetzungen:

Die Service Bus-Backplane ist auch mit Service Bus für Windows Server, Version 1.1, kompatibel. Es ist jedoch nicht mit Version 1.0 von Service Bus für Windows Server kompatibel.

Preise

Die Service Bus-Backplane verwendet Themen zum Senden von Nachrichten. Die neuesten Preisinformationen finden Sie unter Service Bus. Zum Zeitpunkt dieses Schreibens können Sie 1.000.000 Nachrichten pro Monat für weniger als 1 US-Dollar senden. Die Backplane sendet eine Service Bus-Nachricht für jeden Aufruf einer SignalR-Hubmethode. Es gibt auch einige Kontrollmeldungen für Verbindungen, Trennungen, Das Beitreten oder Verlassen von Gruppen usw. In den meisten Anwendungen ist der Großteil des Nachrichtendatenverkehrs Hubmethodenaufrufe.

Übersicht

Bevor wir mit dem ausführlichen Tutorial beginnen, finden Sie hier eine kurze Übersicht über ihre Aufgaben.

  1. Verwenden Sie die Windows-Azure-Portal, um einen neuen Service Bus-Namespace zu erstellen.

  2. Fügen Sie Ihrer Anwendung die folgenden NuGet-Pakete hinzu:

  3. Erstellen Sie eine SignalR-Anwendung.

  4. Fügen Sie global.asax den folgenden Code hinzu, um die Backplane zu konfigurieren:

    protected void Application_Start()
    {
        string connectionString = "Service Bus connection string";
        GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName");
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

Wählen Sie für jede Anwendung einen anderen Wert für "YourAppName" aus. Verwenden Sie nicht denselben Wert für mehrere Anwendungen.

Erstellen der Azure-Dienste

Erstellen Sie einen Clouddienst, wie unter Erstellen und Bereitstellen eines Clouddiensts beschrieben. Führen Sie die Schritte im Abschnitt "Vorgehensweise: Erstellen eines Clouddiensts mithilfe der Schnellerstellung" aus. Für dieses Tutorial müssen Sie kein Zertifikat hochladen.

Screenshot des Bereichs

Erstellen Sie einen neuen Service Bus-Namespace, wie unter Verwenden von Service Bus-Themen/Abonnements beschrieben. Führen Sie die Schritte im Abschnitt "Erstellen eines Dienstnamespace" aus.

Screenshot des Bildschirms

Hinweis

Stellen Sie sicher, dass Sie dieselbe Region für den Clouddienst und den Service Bus-Namespace auswählen.

Erstellen des Visual Studio-Projekts

Starten Sie Visual Studio. Klicken Sie im Menü Datei auf Neues Projekt.

Erweitern Sie im Dialogfeld Neues Projekt den Eintrag Visual C#. Wählen Sie unter Installierte Vorlagendie Option Cloud und dann Windows Azure Cloud Service aus. Behalten Sie die Standardeinstellung .NET Framework 4.5 bei. Nennen Sie die Anwendung ChatService, und klicken Sie auf OK.

Screenshot des Bildschirms

Wählen Sie im Dialogfeld Neuer Windows Azure-Clouddienst ASP.NET MVC 4-Webrolle aus. Klicken Sie auf die Nach-rechts-Taste (>), um der Lösung die Rolle hinzuzufügen.

Zeigen Sie mit der Maus auf die neue Rolle, damit das Stiftsymbol sichtbar ist. Klicken Sie auf dieses Symbol, um die Rolle umzubenennen. Nennen Sie die Rolle "SignalRChat", und klicken Sie auf OK.

Screenshot des Bildschirms

Wählen Sie im Assistenten Neue ASP.NET MVC 4-Projektdie Option Internetanwendung aus. Klicken Sie auf OK. Der Projekt-Assistent erstellt zwei Projekte:

  • ChatService: Dieses Projekt ist die Windows Azure-Anwendung. Sie definiert die Azure-Rollen und andere Konfigurationsoptionen.
  • SignalRChat: Dieses Projekt ist Ihr ASP.NET MVC 4-Projekt.

Erstellen der SignalR Chat-Anwendung

Führen Sie zum Erstellen der Chatanwendung die Schritte im Tutorial Erste Schritte mit SignalR und MVC 4 aus.

Verwenden Sie NuGet, um die erforderlichen Bibliotheken zu installieren. Wählen Sie im Menü Extras die Option NuGet-Paket-Manager und dann Paket-Manager-Konsole aus. Geben Sie im Fenster Paket-Manager-Konsole die folgenden Befehle ein:

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

Verwenden Sie die -ProjectName Option, um die Pakete im ASP.NET MVC-Projekt anstelle des Windows Azure-Projekts zu installieren.

Konfigurieren der Backplane

Fügen Sie in der Datei Global.asax Ihrer Anwendung den folgenden Code hinzu:

protected void Application_Start()
{
    string connectionString = "";
    GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");  

    RouteTable.Routes.MapHubs();
}

Jetzt müssen Sie ihre Service Bus-Verbindungszeichenfolge abrufen. Wählen Sie im Azure-Portal den von Ihnen erstellten Service Bus-Namespace aus, und klicken Sie auf das Symbol Zugriffsschlüssel.

Screenshot der Optionen und Symbole

Kopieren Sie die Verbindungszeichenfolge in die Zwischenablage, und fügen Sie sie dann in die connectionString-Variable ein.

Screenshot des Bildschirms

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

In Azure bereitstellen

Erweitern Sie in Projektmappen-Explorer den Ordner Rollen im ChatService-Projekt.

Screenshot der Projektmappen-Explorer Struktur mit der Option Signal R Chat im Ordner

Klicken Sie mit der rechten Maustaste auf die Rolle SignalRChat, und wählen Sie Eigenschaften aus. Wählen Sie die Registerkarte Konfiguration aus. Wählen Sie unter Instanzen die Option 2 aus. Sie können die VM-Größe auch auf Extra Small festlegen.

Screenshot des Abschnitts

Speichern Sie die Änderungen.

Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt ChatService. Wählen Sie Veröffentlichen.

Screenshot des Chatdienstprojekts des Projektmappen-Explorer-Bildschirms mit einem Dropdownmenü mit der rechten Maustaste, das veröffentlichen... Option.

Wenn Sie zum ersten Mal in Windows Azure veröffentlichen, müssen Sie Ihre Anmeldeinformationen herunterladen. Klicken Sie im Veröffentlichungs-Assistenten auf "Anmeldeinformationen herunterladen". Dadurch werden Sie aufgefordert, sich beim Windows-Azure-Portal anzumelden und eine Veröffentlichungseinstellungsdatei herunterzuladen.

Screenshot des Bildschirms

Klicken Sie auf Importieren , und wählen Sie die datei mit den Veröffentlichungseinstellungen aus, die Sie heruntergeladen haben.

Klicken Sie auf Weiter. Wählen Sie im Dialogfeld Veröffentlichungseinstellungen unter Clouddienst den zuvor erstellten Clouddienst aus.

Screenshot der Registerkarte

Klicken Sie auf Veröffentlichen. Es kann einige Minuten dauern, bis die Anwendung bereitgestellt und die VMs gestartet werden.

Wenn Sie nun die Chatanwendung ausführen, kommunizieren die Rolleninstanzen mithilfe eines Service Bus-Themas über Azure Service Bus. Ein Thema ist eine Nachrichtenwarteschlange, die mehrere Abonnenten zulässt.

Die Backplane erstellt automatisch das Thema und die Abonnements. Um die Abonnement- und Nachrichtenaktivität anzuzeigen, öffnen Sie die Azure-Portal, wählen Sie den Service Bus-Namespace aus, und klicken Sie auf "Themen".

Screenshot des ausgewählten Clouddienstfelds, das jetzt im Azure-Portal aufgefüllt wird, wobei das Feld

Es dauert einige Minuten, bis die Nachrichtenaktivität im Dashboard angezeigt wird.

Screenshot des Azure-Portal Dashboard, der die Nachrichtenaktivität Zeitleiste zeigt und eine blaue und violette Linie zeigt, um verschiedene Nachrichtenverläufe anzuzeigen.

SignalR verwaltet die Lebensdauer des Themas. Versuchen Sie nicht, Themen manuell zu löschen oder Einstellungen für das Thema zu ändern, solange Ihre Anwendung bereitgestellt wird.