SignalR — skalowanie w poziomie z użyciem programu SQL Server (SignalR 1.x)

Autor : Patrick Fletcher

Ostrzeżenie

Ta dokumentacja nie dotyczy najnowszej wersji usługi SignalR. Przyjrzyj się ASP.NET Core SignalR.

W tym samouczku użyjesz SQL Server do dystrybucji komunikatów w aplikacji SignalR wdrożonej w dwóch oddzielnych wystąpieniach usług IIS. Ten samouczek można również uruchomić na jednej maszynie testowej, ale aby uzyskać pełny efekt, należy wdrożyć aplikację SignalR na co najmniej dwóch serwerach. Należy również zainstalować SQL Server na jednym z serwerów lub na osobnym dedykowanym serwerze. Inną opcją jest uruchomienie samouczka przy użyciu maszyn wirtualnych na platformie Azure.

Diagram serwera S Q L i jego relacji między maszynami wirtualnymi, komputerami, wysyłaniem zapytań i aktualizacjami serwera S Q L.

Wymagania wstępne

Microsoft SQL Server 2005 lub nowszy. Płaszczyzna wsteczna obsługuje zarówno wersje pulpitu, jak i serwera SQL Server. Nie obsługuje SQL Server Compact Edition ani Azure SQL Database. (Jeśli aplikacja jest hostowana na platformie Azure, rozważ zamiast tego plan prac usługi Service Bus).

Omówienie

Zanim przejdziemy do szczegółowego samouczka, poniżej przedstawiono krótkie omówienie tego, co zrobisz.

  1. Utwórz nową pustą bazę danych. Płaszczyzna wsteczna utworzy niezbędne tabele w tej bazie danych.

  2. Dodaj następujące pakiety NuGet do aplikacji:

  3. Tworzenie aplikacji SignalR.

  4. Dodaj następujący kod do pliku Global.asax, aby skonfigurować płaszczyznę wsteczną:

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

Konfigurowanie bazy danych

Zdecyduj, czy aplikacja będzie używać uwierzytelniania systemu Windows, czy SQL Server uwierzytelniania w celu uzyskania dostępu do bazy danych. Niezależnie od tego upewnij się, że użytkownik bazy danych ma uprawnienia do logowania, tworzenia schematów i tworzenia tabel.

Utwórz nową bazę danych dla płaszczyzny wstecznej do użycia. Możesz nadać bazie danych dowolną nazwę. Nie trzeba tworzyć żadnych tabel w bazie danych; płaszczyzna wsteczna utworzy niezbędne tabele.

Zrzut ekranu przedstawiający okno Eksplorator obiektów z wyróżnionym folderem Databases, który ujawnia zawarte w nim podfoldery.

Włączanie usługi Service Broker

Zaleca się włączenie usługi Service Broker dla bazy danych backplane. Usługa Service Broker zapewnia natywną obsługę komunikatów i kolejkowania w SQL Server, co pozwala na wydajniejsze odbieranie aktualizacji przez plan prac. (Jednak płaszczyzna wsteczna działa również bez usługi Service Broker).

Aby sprawdzić, czy usługa Service Broker jest włączona, wykonaj zapytanie w kolumnie is_broker_enabled w widoku katalogu sys.databases .

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

Zrzut ekranu przedstawiający kartę S Q L Query 1 dot S Q L wyświetlaną w usłudze Service Broker z kartami Wyniki i komunikaty.

Aby włączyć usługę Service Broker, użyj następującego zapytania SQL:

ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER

Uwaga

Jeśli to zapytanie wydaje się zakleszczeć, upewnij się, że nie ma żadnych aplikacji połączonych z bazą danych.

Jeśli włączono śledzenie, ślady będą również pokazywać, czy usługa Service Broker jest włączona.

Tworzenie aplikacji SignalR

Utwórz aplikację SignalR, wykonując jeden z następujących samouczków:

Następnie zmodyfikujemy aplikację czatu, aby obsługiwała skalowanie w poziomie przy użyciu SQL Server. Najpierw dodaj pakiet NuGet SignalR.SqlServer do projektu. W programie Visual Studio z menu Narzędzia wybierz pozycję Menedżer pakietów NuGet, a następnie wybierz pozycję Konsola menedżera pakietów. W oknie Konsola menedżera pakietów wprowadź następujące polecenie:

Install-Package Microsoft.AspNet.SignalR.SqlServer

Następnie otwórz plik Global.asax. Dodaj następujący kod do metody Application_Start :

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

    RouteTable.Routes.MapHubs();
}

Wdrażanie i uruchamianie aplikacji

Przygotuj wystąpienia systemu Windows Server do wdrożenia aplikacji SignalR.

Dodaj rolę usług IIS. Obejmują funkcje tworzenia aplikacji, w tym protokół WebSocket.

Zrzut ekranu przedstawiający ekran Kreator dodawania ról i funkcji z wyróżnionymi opcjami Role serwera i Protokół Web Socket Protocol.

Uwzględnij również usługę zarządzania (wymienioną w obszarze "Narzędzia do zarządzania").

Zrzut ekranu przedstawiający ekran Kreator dodawania ról i funkcji z wyróżnionymi opcjami Role serwera i Skrypty zarządzania I I S i Narzędzia.

Zainstaluj narzędzie Web Deploy 3.0. Po uruchomieniu Menedżera usług IIS zostanie wyświetlony monit o zainstalowanie Platforma Microsoft Web lub pobranie instalatora. W Instalatorze platformy wyszukaj pozycję Web Deploy i zainstaluj narzędzie Web Deploy 3.0

Zrzut ekranu instalatora platformy internetowej 4 punkt 5 przedstawiający wyniki wyszukiwania z wyróżnioną opcją Web Deploy 3 punkt 0.

Sprawdź, czy usługa zarządzania siecią Web jest uruchomiona. Jeśli nie jest, uruchom tę usługę. (Jeśli usługa zarządzania siecią Web nie jest widoczna na liście usług systemu Windows, upewnij się, że usługa zarządzania została zainstalowana po dodaniu roli usług IIS).

Na koniec otwórz port 8172 dla protokołu TCP. Jest to port używany przez narzędzie Web Deploy.

Teraz możesz przystąpić do wdrażania projektu programu Visual Studio z komputera dewelopera na serwerze. W Eksplorator rozwiązań kliknij rozwiązanie prawym przyciskiem myszy i kliknij polecenie Publikuj.

Aby uzyskać bardziej szczegółową dokumentację dotyczącą wdrażania w Internecie, zobacz Web Deployment Content Map for Visual Studio and ASP.NET (Mapa zawartości wdrażania w Internecie dla programu Visual Studio i ASP.NET).

W przypadku wdrożenia aplikacji na dwóch serwerach można otworzyć każde wystąpienie w osobnym oknie przeglądarki i zobaczyć, że każdy z nich odbiera komunikaty usługi SignalR od drugiego. (Oczywiście w środowisku produkcyjnym dwa serwery znajdują się za modułem równoważenia obciążenia).

Zrzut ekranu przedstawiający okno przeglądarki Internet Explorer z wyświetlonym ekranem Indeks, na którym są wyświetlane komunikaty Signal R.

Po uruchomieniu aplikacji widać, że usługa SignalR automatycznie utworzyła tabele w bazie danych:

Zrzut ekranu przedstawiający ekran Eksplorator obiektów z wyróżnionym serwerem MIKE dash S Q L i pokazującym zawarte foldery i serwery.

Usługa SignalR zarządza tabelami. Tak długo, jak aplikacja jest wdrażana, nie usuwaj wierszy, modyfikuj tabelę itd.