Freigeben über


Horizontale Skalierung in SignalR mit SQL Server

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 Thema verwendete Softwareversionen

Frühere Versionen dieses Themas

Informationen zu früheren Versionen von SignalR finden Sie unter Ältere Versionen von SignalR.

Fragen und Kommentare

Bitte hinterlassen Sie Feedback darüber, wie Ihnen dieses Tutorial gefallen hat und was wir in den Kommentaren unten auf der Seite verbessern könnten. Wenn Sie Fragen haben, die sich nicht direkt auf das Tutorial beziehen, können Sie diese im ASP.NET SignalR-Forum oder im StackOverflow.com posten.

In diesem Tutorial verwenden Sie SQL Server, um Nachrichten auf eine SignalR-Anwendung zu verteilen, die in zwei separaten IIS-Instanzen bereitgestellt wird. Sie können dieses Tutorial auch auf einem einzelnen Testcomputer ausführen, aber um den vollen Effekt zu erzielen, müssen Sie die SignalR-Anwendung auf zwei oder mehr Servern bereitstellen. Sie müssen auch SQL Server auf einem der Server oder auf einem separaten dedizierten Server installieren. Eine weitere Möglichkeit besteht darin, das Tutorial mithilfe von VMs in Azure auszuführen.

Diagramm, das Pfeile zeigt, die von S Q L Server zu V M zu Computern wechseln. Ein Pfeil mit der Bezeichnung Update beginnt bei V M und wechselt zu S Q L Server.

Voraussetzungen

Microsoft SQL Server 2005 oder höher. Die Backplane unterstützt sowohl Desktop- als auch Servereditionen von SQL Server. SQL Server Compact Edition oder Azure SQL-Datenbank wird nicht unterstützt. (Wenn Ihre Anwendung in Azure gehostet wird, sollten Sie stattdessen die Service Bus-Backplane in Betracht ziehen.)

Übersicht

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

  1. Erstellen Sie eine neue leere Datenbank. Die Backplane erstellt die erforderlichen Tabellen in dieser Datenbank.

  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 class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            string sqlConnectionString = "Connecton string to your SQL DB";
            GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
            app.MapSignalR();
        }
    }
    

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

Konfigurieren der Datenbank

Entscheiden Sie, ob die Anwendung Windows-Authentifizierung oder SQL Server Authentifizierung für den Zugriff auf die Datenbank verwendet. Stellen Sie unabhängig davon sicher, dass der Datenbankbenutzer über Berechtigungen zum Anmelden, Erstellen von Schemas und Zum Erstellen von Tabellen verfügt.

Erstellen Sie eine neue Datenbank, die von der Backplane verwendet werden kann. Sie können der Datenbank einen beliebigen Namen geben. Sie müssen keine Tabellen in der Datenbank erstellen. die Backplane erstellt die erforderlichen Tabellen.

Screenshot des Dialogfelds

Aktivieren von Service Broker

Es wird empfohlen, Service Broker für die Backplane-Datenbank zu aktivieren. Service Broker bietet native Unterstützung für Messaging und Warteschlangen in SQL Server, wodurch die Backplane Updates effizienter empfangen kann. (Die Backplane funktioniert jedoch auch ohne Service Broker.)

Um zu überprüfen, ob Service Broker aktiviert ist, fragen Sie die spalte is_broker_enabled in der sys.databases-Katalogsicht ab.

SELECT [name], [service_broker_guid], [is_broker_enabled]
FROM [master].[sys].[databases]

Screenshot eines Fensters mit der Sys dot databases-Katalogsicht.

Verwenden Sie die folgende SQL-Abfrage, um Service Broker zu aktivieren:

ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER

Hinweis

Wenn diese Abfrage als Deadlock angezeigt wird, stellen Sie sicher, dass keine Anwendungen mit der Datenbank verbunden sind.

Wenn Sie die Ablaufverfolgung aktiviert haben, zeigen die Ablaufverfolgungen auch an, ob Service Broker aktiviert ist.

Erstellen einer SignalR-Anwendung

Erstellen Sie eine SignalR-Anwendung, indem Sie eines der folgenden Tutorials ausführen:

Als Nächstes ändern wir die Chatanwendung so, dass horizontale Skalierung mit SQL Server unterstützt wird. Fügen Sie zunächst dem Projekt das NuGet-Paket SignalR.SqlServer hinzu. Wählen Sie in Visual Studio im Menü Extras die Option NuGet-Paket-Manager und dann Paket-Manager-Konsole aus. Geben Sie im Fenster Paket-Manager-Konsole den folgenden Befehl ein:

Install-Package Microsoft.AspNet.SignalR.SqlServer

Öffnen Sie als Nächstes die Datei Startup.cs. Fügen Sie der Configure-Methode den folgenden Code hinzu:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        string sqlConnectionString = "Connecton string to your SQL DB";
        GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
        app.MapSignalR();
    }
}

Bereitstellen und Ausführen der Anwendung

Bereiten Sie Ihre Windows Server-Instanzen für die Bereitstellung der SignalR-Anwendung vor.

Fügen Sie die IIS-Rolle hinzu. Schließen Sie Features für die Anwendungsentwicklung ein, einschließlich des WebSocket-Protokolls.

Screenshot: Dialogfeld

Schließen Sie auch den Verwaltungsdienst (aufgeführt unter "Verwaltungstools") ein.

Screenshot: Dialogfeld

Installieren Sie Web Deploy 3.0. Wenn Sie IIS-Manager ausführen, werden Sie aufgefordert, Microsoft-Webplattform zu installieren, oder Sie können das Installationsprogramm herunterladen. Suchen Sie im Plattforminstallationsprogramm nach Web Deploy, und installieren Sie Web Deploy 3.0.

Screenshot, in dem web deploy 3 Punkt 0 in den Suchergebnissen ausgewählt ist.

Überprüfen Sie, ob der Webverwaltungsdienst ausgeführt wird. Wenn nicht, starten Sie den Dienst. (Wenn der Webverwaltungsdienst in der Liste der Windows-Dienste nicht angezeigt wird, stellen Sie sicher, dass Sie den Verwaltungsdienst installiert haben, als Sie die IIS-Rolle hinzugefügt haben.)

Öffnen Sie schließlich Port 8172 für TCP. Dies ist der Port, den das Web Deploy-Tool verwendet.

Jetzt können Sie das Visual Studio-Projekt von Ihrem Entwicklungscomputer auf dem Server bereitstellen. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe, und klicken Sie dann auf Veröffentlichen.

Eine ausführlichere Dokumentation zur Webbereitstellung finden Sie unter Inhaltszuordnung der Webbereitstellung für Visual Studio und ASP.NET.

Wenn Sie die Anwendung auf zwei Servern bereitstellen, können Sie jede instance in einem separaten Browserfenster öffnen und sehen, dass sie jeweils SignalR-Nachrichten vom anderen empfangen. (In einer Produktionsumgebung würden sich die beiden Server natürlich hinter einem Lastenausgleich befinden.)

Screenshot: Geöffnete Browserfenster mit der auf zwei Servern bereitgestellten Anwendung.

Nachdem Sie die Anwendung ausgeführt haben, können Sie sehen, dass SignalR automatisch Tabellen in der Datenbank erstellt hat:

Screenshot des Dialogfelds

SignalR verwaltet die Tabellen. Solange Ihre Anwendung bereitgestellt ist, löschen Sie keine Zeilen, ändern Sie die Tabelle usw.