Freigeben über


Horizontale Skalierung in SignalR mit SQL Server (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 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 des S Q L-Servers und seiner Beziehung zwischen V Ms, Computern, Senden von Abfragen und Updates an den 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 global.asax den folgenden Code hinzu, um die Backplane zu konfigurieren:

    protected void Application_Start()
    {
        string sqlConnectionString = "Connecton string to your SQL DB";
        GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

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 fensters

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

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 Global.asax. Fügen Sie der Application_Start-Methode den folgenden Code hinzu:

protected void Application_Start()
{
    string sqlConnectionString = "<add your SQL connection string here>";
    GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);

    RouteTable.Routes.MapHubs();
}

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 des Bildschirms

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

Screenshot des Bildschirms

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: Bildschirm des Webplattforminstallationsprogramms 4 Punkt 5 mit Suchergebnissen mit hervorgehobener Option

Ü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 des Browserfensters

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

Screenshot des bildschirms

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