SignalR Scaleout met SQL Server

door Patrick Fletcher

Waarschuwing

Deze documentatie is niet voor de nieuwste versie van SignalR. Bekijk ASP.NET Core SignalR.

Softwareversies die in dit onderwerp worden gebruikt

Vorige versies van dit onderwerp

Zie SignalR Oudere versies voor meer informatie over eerdere versies van SignalR.

Vragen en opmerkingen

Geef feedback over hoe u deze zelfstudie leuk vond en wat we konden verbeteren in de opmerkingen onder aan de pagina. Als u vragen hebt die niet rechtstreeks zijn gerelateerd aan de zelfstudie, kunt u deze posten op het ASP.NET SignalR-forum of StackOverflow.com.

In deze zelfstudie gebruikt u SQL Server om berichten te distribueren over een SignalR-toepassing die is geïmplementeerd in twee afzonderlijke IIS-exemplaren. U kunt deze zelfstudie ook uitvoeren op één testcomputer, maar om het volledige effect te krijgen, moet u de SignalR-toepassing implementeren op twee of meer servers. U moet SQL Server ook installeren op een van de servers of op een afzonderlijke toegewezen server. Een andere optie is om de zelfstudie uit te voeren met behulp van VM's in Azure.

Diagram met pijlen van S Q L Server naar V M naar computers. Eén pijl met het label Update begint bij V M en gaat naar S Q L Server.

Vereiste voorwaarden

Microsoft SQL Server 2005 of hoger. Het backplane ondersteunt zowel desktop- als serverversies van SQL Server. Het biedt geen ondersteuning voor SQL Server Compact Edition of Azure SQL Database. (Als uw toepassing wordt gehost in Azure, kunt u in plaats daarvan het Service Bus-backplane overwegen.)

Overzicht

Voordat we naar de gedetailleerde zelfstudie gaan, vindt u hier een kort overzicht van wat u gaat doen.

  1. Maak een nieuwe lege database. De backplane maakt de benodigde tabellen in deze database.

  2. Voeg deze NuGet-pakketten toe aan uw toepassing:

  3. Maak een SignalR-toepassing.

  4. Voeg de volgende code toe aan Startup.cs om het backplane te configureren:

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

    Met deze code configureert u het backplane met de standaardwaarden voor TableCount en MaxQueueLength. Zie SignalR Performance: Scaleout Metrics voor informatie over het wijzigen van deze waarden.

De database configureren

Bepaal of de toepassing Gebruikmaakt van Windows-verificatie of SQL Server-verificatie voor toegang tot de database. Zorg er ook voor dat de databasegebruiker machtigingen heeft om zich aan te melden, schema's te maken en tabellen te maken.

Maak een nieuwe database voor de backplane om te gebruiken. U kunt de database elke naam geven. U hoeft geen tabellen in de database te maken; de backplane maakt de benodigde tabellen.

Schermopname van het dialoogvenster Objectverkenner. De map met het label Databases is geselecteerd.

Service Broker inschakelen

U wordt aangeraden Service Broker in te schakelen voor de backplane-database. Service Broker biedt systeemeigen ondersteuning voor berichten en wachtrijen in SQL Server, waardoor het backplane updates efficiënter kan ontvangen. (Hoewel de backplane ook zonder Service Broker werkt.)

Als u wilt controleren of Service Broker is ingeschakeld, voert u een query uit op de kolom is_broker_enabled in de catalogusweergave sys.databases .

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

Schermopname van een venster met de catalogusweergave sys dot-databases.

Gebruik de volgende SQL-query om Service Broker in te schakelen:

ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER

Opmerking

Als deze query lijkt te zijn vastgelopen, moet u ervoor zorgen dat er geen toepassingen zijn verbonden met de database.

Als u tracering hebt ingeschakeld, geven de traceringen ook aan of de Service Broker is ingeschakeld.

Een SignalR-toepassing maken

Maak een SignalR-toepassing door een van deze zelfstudies te volgen:

Vervolgens wijzigen we de chattoepassing ter ondersteuning van scaleout met SQL Server. Voeg eerst het NuGet-pakket SignalR.SqlServer toe aan uw project. Selecteer NuGet Package Manager in Visual Studio in het menu Extra en selecteer vervolgens Package Manager Console. Voer in het venster Package Manager Console de volgende opdracht in:

Install-Package Microsoft.AspNet.SignalR.SqlServer

Open vervolgens het bestand Startup.cs. Voeg de volgende code toe aan de methode Configureren :

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

De toepassing implementeren en uitvoeren

Bereid uw Windows Server-exemplaren voor om de SignalR-toepassing te implementeren.

Voeg de IIS-rol toe. Neem de functies 'Toepassingsontwikkeling' op, waaronder het WebSocket-protocol.

Schermopname van het dialoogvenster Wizard Functies en onderdelen toevoegen. Serverfuncties en WebSocket Protocol zijn geselecteerd.

Neem ook de beheerservice op (vermeld onder 'Beheerhulpprogramma's').

Schermopname van het dialoogvenster Wizard Functies en onderdelen toevoegen. Serverfuncties en beheerservice zijn geselecteerd.

Installeer Web Deploy 3.0. Wanneer u IIS Manager uitvoert, wordt u gevraagd Om Microsoft Web Platform te installeren of kunt u het installatieprogramma downloaden. Zoek in het platforminstallatieprogramma naar Web Deploy en installeer Web Deploy 3.0

Schermopname met Web Deploy 3.0 geselecteerd in de zoekresultaten.

Controleer of de webbeheerservice wordt uitgevoerd. Mocht dat niet het geval zijn, start dan de service. (Als u de webbeheerservice niet in de lijst met Windows-services ziet, controleert u of u de beheerservice hebt geïnstalleerd toen u de IIS-rol hebt toegevoegd.)

Open ten slotte poort 8172 voor TCP. Dit is de poort die het hulpprogramma Web Deploy gebruikt.

U bent nu klaar om het Visual Studio-project van uw ontwikkelcomputer op de server te implementeren. Klik in Solution Explorer met de rechtermuisknop op de oplossing en klik op Publiceren.

Zie Web Deployment Content Map voor Visual Studio en ASP.NET voor meer gedetailleerde documentatie over webimplementatie.

Als u de toepassing op twee servers implementeert, kunt u elk exemplaar in een afzonderlijk browservenster openen en zien dat ze elk SignalR-berichten van de andere ontvangen. (In een productieomgeving zouden de twee servers zich achter een load balancer bevinden.)

Schermopname van twee browservensters geopend met de toepassing die is geïmplementeerd op twee servers.

Nadat u de toepassing hebt uitgevoerd, ziet u dat SignalR automatisch tabellen heeft gemaakt in de database:

Schermopname van het dialoogvenster Objectverkenner met mappen en bestanden.

SignalR beheert de tabellen. Zolang uw toepassing is geïmplementeerd, verwijdert u geen rijen, wijzigt u de tabel enzovoort.