Share via


Horizontale Skalierung in SignalR mit Azure Service Bus

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. (Sie können die Service Bus-Backplane auch mit Web-Apps in Azure App Service verwenden.)

Diagramm, das Pfeile von Themen- zu Webrollen auf Computern zeigt. Ein Pfeil mit der Bezeichnung Veröffentlichen beginnt bei Webrollen und wechselt zu Thema.

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 startup.cs den folgenden Code hinzu, um die Backplane zu konfigurieren:

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

Dieser Code konfiguriert die Backplane mit den Standardwerten für TopicCount und MaxQueueLength. Informationen zum Ändern dieser Werte finden Sie unter SignalR-Leistung: Skalierungsmetriken.

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 der Option

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 Fensters

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: Dialogfeld

Wählen Sie im Dialogfeld Neuer Windows Azure-Clouddienst die Option ASP.NET 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: Dialogfeld

Wählen Sie im Dialogfeld Neues ASP.NET Projektdie Option MVC aus, und klicken Sie auf OK.

Screenshot: Dialogfeld

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 5-Projekt.

Erstellen der SignalR Chat-Anwendung

Führen Sie zum Erstellen der Chatanwendung die Schritte im Tutorial Erste Schritte mit SignalR und MVC 5 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 Startup.cs Ihrer Anwendung den folgenden Code hinzu:

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

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: Pluszeichen mit der Bezeichnung

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

Screenshot: Dialogfeld

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 einen geöffneten Ordner mit dem Titel Rollen zeigt. Signal R Chat ist ausgewählt.

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: Instanzen. Die Anzahl der Instanzen ist auf 2 und die V M-Größe auf Extra small festgelegt.

Speichern Sie die Änderungen.

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

Screenshot: Projektmappen-Explorer Veröffentlichen ist im Kontextmenü des Chatdiensts ausgewählt.

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: Dialogfeld

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: Seite

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 Navigationsmenüs mit ausgewählten Themen.

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

Screenshot: Diagramm der Abonnement- und Nachrichtenaktivität auf einem Zeitleiste

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.

Problembehandlung

System.InvalidOperationException "Der einzige unterstützte IsolationLevel ist 'IsolationLevel.Serializable'."

Dieser Fehler kann auftreten, wenn die Transaktionsebene für einen Vorgang auf etwas anderes als Serializablefestgelegt ist. Stellen Sie sicher, dass keine Vorgänge mit anderen Transaktionsebenen ausgeführt werden.