SignalR-Skalierung 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 geben Sie Feedback dazu, wie Ihnen dieses Tutorial gefallen hat, und was wir verbessern könnten, in die Kommentare unten auf der Seite zu schreiben. Wenn Sie Fragen haben, die nicht direkt mit dem Lernprogramm zusammenhängen, können Sie sie im ASP.NET SignalR-Forum oder StackOverflow.com posten.

In diesem Lernprogramm verwenden Sie SQL Server, um Nachrichten über eine SignalR-Anwendung zu verteilen, die in zwei separaten IIS-Instanzen bereitgestellt wird. Sie können dieses Lernprogramm auch auf einem einzigen 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 SQL Server auch auf einem der Server oder auf einem separaten dedizierten Server installieren. Eine weitere Option besteht darin, das Lernprogramm 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. Das Backplane unterstützt sowohl Desktop- als auch Servereditionen von SQL Server. Sql Server Compact Edition oder Azure SQL-Datenbank werden nicht unterstützt. (Wenn Ihre Anwendung in Azure gehostet wird, sollten Sie stattdessen das Service Bus Backplane in Betracht ziehen.)

Übersicht

Bevor wir zum detaillierten Lernprogramm gelangen, finden Sie hier einen schnellen Überblick über das, was Sie tun werden.

  1. Erstellen Sie eine neue leere Datenbank. Der 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 dem Startup.cs den folgenden Code hinzu, um das 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 den Backplane mit den Standardwerten für TableCount und MaxQueueLength. Informationen zum Ändern dieser Werte finden Sie unter SignalR Performance: Scaleout Metrics.

Konfigurieren der Datenbank

Entscheiden Sie, ob die Anwendung die 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 Erstellen von Tabellen verfügt.

Erstellen Sie eine neue Datenbank für die zu verwendende Backplane. Sie können der Datenbank einen beliebigen Namen geben. Sie müssen keine Tabellen in der Datenbank erstellen. der Backplane erstellt die erforderlichen Tabellen.

Screenshot des Dialogfelds

Aktivieren des Dienstbrokers

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

Um zu überprüfen, ob der Dienstbroker aktiviert ist, fragen Sie die is_broker_enabled Spalte in der Sys.databases-Katalogansicht ab.

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

Screenshot eines Fensters, in dem die Katalogansicht der Sys Dot-Datenbanken angezeigt wird.

Verwenden Sie zum Aktivieren des Dienstbrokers die folgende SQL-Abfrage:

ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER

Hinweis

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

Wenn Sie die Ablaufverfolgung aktiviert haben, zeigt die Ablaufverfolgung auch an, ob der Service Broker aktiviert ist.

Erstellen einer SignalR-Anwendung

Erstellen Sie eine SignalR-Anwendung, indem Sie einer der folgenden Lernprogramme folgen:

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

Install-Package Microsoft.AspNet.SignalR.SqlServer

Öffnen Sie als Nächstes die Startup.cs Datei. 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 auf die Bereitstellung der SignalR-Anwendung vor.

Fügen Sie die IIS-Rolle hinzu. Schließen Sie "Anwendungsentwicklungsfeatures" ein, einschließlich des WebSocket-Protokolls.

Screenshot des Dialogfelds

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

Screenshot des Dialogfelds

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

Screenshot mit Web Deploy 3.0, das in den Suchergebnissen ausgewählt ist.

Überprüfen Sie, ob der Webverwaltungsdienst ausgeführt wird. Wenn nicht, starten Sie den Dienst. (Wenn der Webdienst in der Liste der Windows-Dienste nicht angezeigt wird, stellen Sie sicher, dass Sie den Verwaltungsdienst installiert haben, wenn 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 vom Entwicklungscomputer auf dem Server bereitstellen. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Lösung und klicken Sie auf "Veröffentlichen".

Ausführlichere Dokumentation zur Webbereitstellung finden Sie unter Web Deployment Content Map für Visual Studio und ASP.NET.

Wenn Sie die Anwendung auf zwei Servern bereitstellen, können Sie jede Instanz in einem separaten Browserfenster öffnen und sehen, dass sie jeweils SignalR-Nachrichten von der anderen empfangen. (Natürlich würden die beiden Server in einer Produktionsumgebung hinter einem Lastenausgleich sitzen.)

Screenshot von zwei geöffneten Browserfenstern 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 wird, löschen Sie keine Zeilen, ändern Sie die Tabelle usw.