Ćwiczenia praktyczne: aplikacje internetowe czasu rzeczywistego z wykorzystaniem usługi SignalR

Autor: Web Camps Team

Ostrzeżenie

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

Pobierz zestaw szkoleniowy dla obozów internetowych, wydanie z października 2015 r.

Aplikacje internetowe w czasie rzeczywistym umożliwiają wypychanie zawartości po stronie serwera do połączonych klientów w czasie rzeczywistym. Dla deweloperów ASP.NET ASP.NET SignalR to biblioteka do dodawania funkcji internetowych w czasie rzeczywistym do swoich aplikacji. Korzysta z kilku transportów, automatycznie wybierając najlepszy dostępny transport, biorąc pod uwagę najlepszy dostępny transport klienta i serwera. Korzysta z protokołu WebSocket — interfejsu API HTML5, który umożliwia dwukierunkową komunikację między przeglądarką a serwerem.

Usługa SignalR udostępnia również prosty interfejs API wysokiego poziomu do wykonywania serwera do klienta RPC (wywoływanie funkcji JavaScript w przeglądarkach klientów z poziomu kodu platformy .NET po stronie serwera) w aplikacji ASP.NET, a także dodawanie przydatnych punktów zaczepienia do zarządzania połączeniami, takich jak zdarzenia łączenia/rozłączania, grupowanie połączeń i autoryzacja.

SignalR to abstrakcja niektórych transportów, które są wymagane do wykonywania pracy w czasie rzeczywistym między klientem a serwerem. Połączenie usługi SignalR jest uruchamiane jako HTTP, a następnie jest promowane do połączenia protokołu WebSocket , jeśli jest dostępne. WebSocket jest idealnym transportem dla usługi SignalR, ponieważ zapewnia najbardziej wydajne wykorzystanie pamięci serwera, ma najmniejsze opóźnienie i ma najbardziej podstawowe funkcje (takie jak komunikacja pełnodupleksowa między klientem i serwerem), ale ma również najbardziej rygorystyczne wymagania: WebSocket wymaga, aby serwer używał systemu Windows Server 2012 lub Windows 8, wraz z .NET Framework 4.5. Jeśli te wymagania nie zostaną spełnione, usługa SignalR podejmie próbę użycia innych transportów w celu nawiązania połączeń (takich jak długie sondowanie Ajax).

Interfejs API usługi SignalR zawiera dwa modele komunikacji między klientami i serwerami: połączenia trwałe i koncentratory. Połączenie reprezentuje prosty punkt końcowy do wysyłania wiadomości jedno-adresata, grupowanych lub rozgłaszanych. Centrum to bardziej ogólny potok oparty na interfejsie API połączenia, który umożliwia klientowi i serwerowi bezpośrednie wywoływanie metod nawzajem.

Architektura usługi SignalR

Cały przykładowy kod i fragmenty kodu są zawarte w zestawie szkoleniowym Web Camps, wersja z października 2015 r., dostępna pod adresem https://github.com/Microsoft-Web/WebCampTrainingKit/releases/tag/v2015.10.13b. Pamiętaj, że link Instalatora na tej stronie już nie działa; Zamiast tego użyj jednego z linków w sekcji Zasoby.

Omówienie

Cele

W tym praktycznym laboratorium dowiesz się, jak wykonywać następujące działania:

  • Wysyłanie powiadomień z serwera do klienta przy użyciu usługi SignalR.
  • Skaluj aplikację SignalR w poziomie przy użyciu SQL Server.

Wymagania wstępne

Aby wykonać to praktyczne laboratorium, wymagane jest wykonanie następujących czynności:

Konfigurowanie

Aby uruchomić ćwiczenia w tym praktycznym laboratorium, należy najpierw skonfigurować środowisko.

  1. Otwórz okno Eksploratora Windows i przejdź do folderu Źródło laboratorium.
  2. Kliknij prawym przyciskiem myszy plik Setup.cmd i wybierz polecenie Uruchom jako administrator , aby uruchomić proces instalacji, który skonfiguruje środowisko i zainstaluj fragmenty kodu programu Visual Studio dla tego laboratorium.
  3. Jeśli zostanie wyświetlone okno dialogowe Kontrola konta użytkownika, potwierdź akcję, aby kontynuować.

Uwaga

Przed uruchomieniem konfiguracji upewnij się, że zostały sprawdzone wszystkie zależności dla tego laboratorium.

Używanie fragmentów kodu

W całym dokumencie laboratoryjnym zostanie wyświetlone polecenie wstawiania bloków kodu. Dla wygody większość tego kodu jest dostarczana jako fragmenty kodu Visual Studio Code, do których można uzyskać dostęp z poziomu Visual Studio 2013, aby uniknąć konieczności ręcznego dodawania go.

Uwaga

Każdemu ćwiczeniu towarzyszy rozwiązanie początkowe znajdujące się w folderze Begin ćwiczenia, które umożliwia wykonywanie poszczególnych ćwiczeń niezależnie od innych. Pamiętaj, że w tych rozwiązaniach początkowych brakuje fragmentów kodu dodanych podczas ćwiczenia i może nie działać do momentu ukończenia ćwiczenia. W kodzie źródłowym ćwiczenia znajdziesz również folder końcowy zawierający rozwiązanie programu Visual Studio z kodem, który wynika z wykonania kroków w odpowiednim ćwiczeniu. Możesz użyć tych rozwiązań jako wskazówek, jeśli potrzebujesz dodatkowej pomocy podczas pracy z tym praktycznym laboratorium.


Ćwiczenia

To praktyczne laboratorium obejmuje następujące ćwiczenia:

  1. Praca z danymi Real-Time przy użyciu usługi SignalR
  2. Skalowanie w górę przy użyciu SQL Server

Szacowany czas ukończenia tego laboratorium: 60 minut

Uwaga

Po pierwszym uruchomieniu programu Visual Studio należy wybrać jedną ze wstępnie zdefiniowanych kolekcji ustawień. Każda wstępnie zdefiniowana kolekcja jest przeznaczona do dopasowania określonego stylu programowania i określa układy okien, zachowanie edytora, fragmenty kodu intelliSense i opcje okna dialogowego. Procedury w tym laboratorium opisują akcje niezbędne do wykonania danego zadania w programie Visual Studio podczas korzystania z kolekcji Ogólne ustawienia programowania . W przypadku wybrania innej kolekcji ustawień dla środowiska deweloperskiego mogą wystąpić różnice w krokach, które należy wziąć pod uwagę.

Ćwiczenie 1. Praca z danymi Real-Time przy użyciu usługi SignalR

Czat jest często używany jako przykład, ale możesz zrobić o wiele więcej dzięki funkcji internetowej w czasie rzeczywistym. Za każdym razem, gdy użytkownik odświeża stronę internetową, aby wyświetlić nowe dane lub strona implementuje długie sondowanie Ajax w celu pobrania nowych danych, możesz użyć usługi SignalR.

Usługa SignalR obsługuje funkcje wypychania lub nadawania serwera; automatycznie obsługuje zarządzanie połączeniami. W przypadku klasycznych połączeń HTTP dla komunikacji między klientem a serwerem połączenie jest ponownie ustanawiane dla każdego żądania, ale usługa SignalR zapewnia trwałe połączenie między klientem a serwerem. W usłudze SignalR kod serwera wywołuje kod klienta w przeglądarce przy użyciu zdalnych wywołań procedur (RPC), a nie modelu odpowiedzi na żądanie, który znamy dzisiaj.

W tym ćwiczeniu skonfigurujesz aplikację Geek Quiz , aby używała usługi SignalR do wyświetlania pulpitu nawigacyjnego Statystyki ze zaktualizowanymi metrykami bez konieczności odświeżania całej strony.

Zadanie 1 — eksplorowanie strony statystyk testu geek

W tym zadaniu przejdziesz przez aplikację i sprawdzisz, jak jest wyświetlana strona statystyk i jak można poprawić sposób aktualizowania informacji.

  1. Otwórz Visual Studio Express 2013 for Web i otwórz rozwiązanie GeekQuiz.sln znajdujące się w folderze Source\Ex1-WorkingWithRealTimeData\Begin.

  2. Naciśnij klawisz F5 , aby uruchomić rozwiązanie. Strona Logowanie powinna pojawić się w przeglądarce.

    Uruchamianie rozwiązania Uruchamianie rozwiązania

    Uruchamianie rozwiązania

  3. Kliknij pozycję Zarejestruj w prawym górnym rogu strony, aby utworzyć nowego użytkownika w aplikacji.

    Zarejestruj link Zarejestruj link

    Zarejestruj link

  4. Na stronie Rejestrowanie wprowadź nazwę użytkownika i hasło, a następnie kliknij przycisk Zarejestruj.

    Rejestrowanie użytkownika rejestrującego użytkownika

    Rejestrowanie użytkownika

  5. Aplikacja rejestruje nowe konto, a użytkownik jest uwierzytelniany i przekierowywany z powrotem do strony głównej z wyświetlonym pierwszym pytaniem quizu.

  6. Otwórz stronę Statystyka w nowym oknie i umieść stronę główną i stronę Statystyki obok siebie.

    obok siebieOkna

    Okna równoległe

  7. Na stronie głównej odpowiedz na pytanie, klikając jedną z opcji.

    Odpowiadanie na pytanie

    Odpowiadanie na pytanie

  8. Po kliknięciu jednego z przycisków powinna zostać wyświetlona odpowiedź.

    Pytanie odpowiedziało na poprawne

    Pytanie odpowiedziało poprawnie

  9. Zwróć uwagę, że informacje podane na stronie Statystyki są nieaktualne. Odśwież stronę, aby wyświetlić zaktualizowane wyniki.

    Strona Statystyka strony Statystyki

    Strona statystyk

  10. Wstecz do programu Visual Studio i zatrzymaj debugowanie.

Zadanie 2 — dodawanie usługi SignalR do testu geek w celu pokazania wykresów online

W tym zadaniu dodasz usługę SignalR do rozwiązania i wyślesz aktualizacje do klientów automatycznie po wysłaniu nowej odpowiedzi na serwer.

  1. W menu Narzędzia w programie Visual Studio wybierz pozycję Menedżer pakietów NuGet, a następnie kliknij pozycję Konsola menedżera pakietów.

  2. W oknie Konsola menedżera pakietów wykonaj następujące polecenie:

    Install-Package Microsoft.AspNet.SignalR
    

    Instalacja pakietu SignalR pakietu SignalR

    Instalacja pakietu SignalR

    Uwaga

    Podczas instalowania pakietów NuGet usługi SignalR w wersji 2.0.2 z zupełnie nowej aplikacji MVC 5 należy ręcznie zaktualizować pakiety OWIN do wersji 2.0.1 (lub nowszej) przed zainstalowaniem usługi SignalR. W tym celu można wykonać następujący skrypt w konsoli menedżera pakietów:

    get-package | where-object { $_.Id -like "Microsoft.Owin*"} | Update-Package
    

    W przyszłej wersji usługi SignalR zależności OWIN zostaną automatycznie zaktualizowane.

  3. W Eksplorator rozwiązań rozwiń folder Scripts i zwróć uwagę, że pliki Js usługi SignalR zostały dodane do rozwiązania.

    Język JavaScript usługi SignalR odwołuje się do

    Dokumentacja języka JavaScript usługi SignalR

  4. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt GeekQuiz, wybierz pozycję Dodaj | nowy folder i nadaj mu nazwę Hubs.

  5. Kliknij prawym przyciskiem myszy folder Hubs i wybierz polecenie Dodaj | Nowy element.

    Dodawanie nowego elementu Dodaj

    Dodaj nowy element

  6. W oknie dialogowym Dodawanie nowego elementu wybierz pozycję Visual C# | Sieć Web | Węzeł SignalR w okienku po lewej stronie wybierz pozycję SignalR Hub Class (v2) w środkowym okienku, nadaj plikowi nazwę StatisticsHub.cs i kliknij przycisk Dodaj.

    Okno dialogowe Dodawanie nowego elementu Dodawanie

    Okno dialogowe Dodawanie nowego elementu

  7. Zastąp kod w klasie StatisticsHub następującym kodem.

    (Fragment kodu — RealTimeSignalR — Ex1 — StatisticsHubClass)

    namespace GeekQuiz.Hubs
    {
        using Microsoft.AspNet.SignalR;
    
        public class StatisticsHub : Hub
        {
        }
    }
    
  8. Otwórz plik Startup.cs i dodaj następujący wiersz na końcu metody Configuration .

    (Fragment kodu — RealTimeSignalR — Ex1 — MapSignalR)

    public void Configuration(IAppBuilder app)
    {
        this.ConfigureAuth(app);
        app.MapSignalR();
    }
    
  9. Otwórz stronę StatisticsService.cs w folderze Services i dodaj następujące dyrektywy using.

    (Fragment kodu — RealTimeSignalR — Ex1 — UsingDirectives)

    using Microsoft.AspNet.SignalR;
    using GeekQuiz.Hubs;
    
  10. Aby powiadomić połączonych klientów o aktualizacjach, należy najpierw pobrać obiekt Context dla bieżącego połączenia. Obiekt Centrum zawiera metody wysyłania komunikatów do jednego klienta lub emisji do wszystkich połączonych klientów. Dodaj następującą metodę do klasy StatisticsService , aby rozgłaszać dane statystyczne.

    (Fragment kodu — RealTimeSignalR — Ex1 — NotifyUpdatesMethod)

    public async Task NotifyUpdates()
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<StatisticsHub>();
        if (hubContext != null)
        {
             var stats = await this.GenerateStatistics();
             hubContext.Clients.All.updateStatistics(stats);
        }
    }
    

    Uwaga

    W powyższym kodzie używasz dowolnej nazwy metody do wywołania funkcji na kliencie (tj. updateStatistics). Określona nazwa metody jest interpretowana jako obiekt dynamiczny, co oznacza, że nie ma dla niej funkcji IntelliSense ani sprawdzania poprawności czasu kompilacji. Wyrażenie jest obliczane w czasie wykonywania. Po wykonaniu wywołania metody usługa SignalR wysyła nazwę metody i wartości parametrów do klienta. Jeśli klient ma metodę zgodną z nazwą, wywoływana jest ta metoda i do niej są przekazywane wartości parametrów. Jeśli na kliencie nie zostanie znaleziona żadna zgodna metoda, nie zostanie zgłoszony żaden błąd. Aby uzyskać więcej informacji, zapoznaj się z przewodnikiem interfejsu API usługi ASP.NET SignalR Hubs.

  11. Otwórz stronę TriviaController.cs w folderze Controllers i dodaj następujące dyrektywy using.

    using GeekQuiz.Services;
    
  12. Dodaj następujący wyróżniony kod do metody akcji Post .

    (Fragment kodu — RealTimeSignalR — Ex1 — NotifyUpdatesCall)

    public async Task<IHttpActionResult> Post(TriviaAnswer answer)
    {
        if (!ModelState.IsValid)
        {
             return this.BadRequest(this.ModelState);
        }
    
        answer.UserId = User.Identity.Name;
    
        var isCorrect = await this.StoreAsync(answer);
    
        var statisticsService = new StatisticsService(this.db);
        await statisticsService.NotifyUpdates();
    
        return this.Ok<bool>(isCorrect);
    }
    
  13. Otwórz stronę Statistics.cshtml wewnątrz pliku Views | Folder główny . Znajdź sekcję Skrypty i dodaj następujące odwołania do skryptów na początku sekcji.

    (Fragment kodu — RealTimeSignalR — Ex1 — SignalRScriptReferences)

    @section Scripts {
        @Scripts.Render("~/Scripts/jquery.signalR-2.0.2.min.js");
        @Scripts.Render("~/signalr/hubs");
        ...
    }
    

    Uwaga

    Po dodaniu bibliotek SignalR i innych bibliotek skryptów do projektu programu Visual Studio Menedżer pakietów może zainstalować wersję pliku skryptu SignalR, która jest najnowsza niż wersja przedstawiona w tym temacie. Upewnij się, że odwołanie do skryptu w kodzie jest zgodne z wersją biblioteki skryptów zainstalowanej w projekcie.

  14. Dodaj następujący wyróżniony kod, aby połączyć klienta z centrum SignalR i zaktualizować dane statystyczne po odebraniu nowego komunikatu z centrum.

    (Fragment kodu — RealTimeSignalR — Ex1 — SignalRClientCode)

    @section Scripts {
        ...
        <script>
            ...
    
            var connection = $.hubConnection();
            var hub = connection.createHubProxy("StatisticsHub");
            hub.on("updateStatistics", function (statistics) {
                    statisticsData = statistics;
                    $("#correctAnswersCounter").text(statistics.CorrectAnswers);
                    $("#incorrectAnswersCounter").text(statistics.IncorrectAnswers);
    
                    showCharts(statisticsData);
              });
    
            connection.start();
        </script>
    }
    

    W tym kodzie tworzysz serwer proxy centrum i rejestrujesz program obsługi zdarzeń w celu nasłuchiwania komunikatów wysyłanych przez serwer. W takim przypadku nasłuchujesz komunikatów wysyłanych za pomocą metody updateStatistics .

Zadanie 3 — uruchamianie rozwiązania

W tym zadaniu uruchomisz rozwiązanie, aby sprawdzić, czy widok statystyk jest aktualizowany automatycznie przy użyciu usługi SignalR po udzieleniu odpowiedzi na nowe pytanie.

  1. Naciśnij klawisz F5 , aby uruchomić rozwiązanie.

    Uwaga

    Jeśli jeszcze nie zalogowano się do aplikacji, zaloguj się przy użyciu użytkownika utworzonego w zadaniu 1.

  2. Otwórz stronę Statystyki w nowym oknie i umieść stronę głównąi statystykę obok siebie, tak jak w zadaniu 1.

  3. Na stronie głównej odpowiedz na pytanie, klikając jedną z opcji.

    Odpowiadanie na inne pytanie

    Odpowiadanie na inne pytanie

  4. Po kliknięciu jednego z przycisków powinna zostać wyświetlona odpowiedź. Zwróć uwagę, że informacje statystyczne na stronie są aktualizowane automatycznie po udzieleniu odpowiedzi na pytanie zaktualizowanymi informacjami bez konieczności odświeżania całej strony.

    Strona statystyk odświeżona po odświeżeniu

    Strona statystyk odświeżona po odpowiedzi

Ćwiczenie 2. Skalowanie w górę przy użyciu SQL Server

Podczas skalowania aplikacji internetowej zazwyczaj można wybrać opcje skalowania w górę i skalowania w górę . Skalowanie w górę oznacza użycie większego serwera z większą ilością zasobów (procesor CPU, pamięć RAM itp.), podczas gdy skalowanie w poziomie oznacza dodanie większej liczby serwerów do obsługi obciążenia. Problem z tym ostatnim polega na tym, że klienci mogą być kierowani do różnych serwerów. Klient połączony z jednym serwerem nie będzie odbierał komunikatów wysyłanych z innego serwera.

Te problemy można rozwiązać, używając składnika nazywanego płaszczyzną wsteczną do przekazywania komunikatów między serwerami. Po włączeniu płaszczyzny wstecznej każde wystąpienie aplikacji wysyła komunikaty do płaszczyzny wstecznej, a płaszczyzna wsteczna przekazuje je do innych wystąpień aplikacji.

Obecnie istnieją trzy typy płyt wstecznych dla usługi SignalR:

  • Windows Azure Service Bus. Service Bus to infrastruktura obsługi komunikatów, która umożliwia składnikom wysyłanie luźno powiązanych komunikatów.
  • SQL Server. SQL Server backplane zapisuje komunikaty w tabelach SQL. Płaszczyzna wsteczna używa usługi Service Broker do wydajnego przesyłania komunikatów. Jednak działa również wtedy, gdy usługa Service Broker nie jest włączona.
  • Redis. Redis to magazyn par klucz-wartość w pamięci. Usługa Redis obsługuje wzorzec publikowania/subskrybowania ("pub/sub") do wysyłania komunikatów.

Każda wiadomość jest wysyłana za pośrednictwem magistrali komunikatów. Magistrala komunikatów implementuje interfejs IMessageBus , który zapewnia abstrakcję publikowania/subskrybowania. Samoloty tylne działają, zastępując domyślny IMessageBus magistralą zaprojektowaną dla tego samolotu wstecznego.

Każde wystąpienie serwera łączy się z płaszczyzną wsteczną za pośrednictwem magistrali. Po wysłaniu komunikatu przechodzi do płaszczyzny wstecznej, a płaszczyzna wsteczna wysyła ją do każdego serwera. Gdy serwer odbiera komunikat z płaszczyzny wstecznej, przechowuje komunikat w lokalnej pamięci podręcznej. Następnie serwer dostarcza komunikaty do klientów z lokalnej pamięci podręcznej.

Aby uzyskać więcej informacji na temat sposobu działania płaszczyzny wstecznej signalR, przeczytaj ten artykuł.

Uwaga

Istnieją pewne scenariusze, w których płaszczyzna wsteczna może stać się wąskim gardłem. Oto kilka typowych scenariuszy usługi SignalR:

  • Emisja serwera (np. znacznik akcji): Płaszczyzny wsteczne działają dobrze w tym scenariuszu, ponieważ serwer kontroluje szybkość wysyłania komunikatów.
  • Klient-klient (np. czat): W tym scenariuszu płaszczyzna wsteczna może być wąskim gardłem, jeśli liczba komunikatów jest skalowana wraz z liczbą klientów; oznacza to, że jeśli częstotliwość komunikatów rośnie proporcjonalnie w miarę dołączania większej liczby klientów.
  • W czasie rzeczywistym (np. gry w czasie rzeczywistym) nie jest zalecane w tym scenariuszu.

W tym ćwiczeniu użyjesz SQL Server do dystrybucji komunikatów w aplikacji Geek Quiz. Te zadania zostaną uruchomione na jednej maszynie testowej, aby dowiedzieć się, jak skonfigurować konfigurację, 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.

Skalowanie w poziomie przy użyciu diagramu SQL Server

Zadanie 1 . Omówienie scenariusza

W tym zadaniu uruchomisz 2 wystąpienia narzędzia Geek Quiz symulujące wiele wystąpień usług IIS na komputerze lokalnym. W tym scenariuszu podczas odpowiadania na pytania dotyczące ciekawości w jednej aplikacji aktualizacja nie zostanie powiadomiona na stronie statystyk drugiego wystąpienia. Ta symulacja przypomina środowisko, w którym aplikacja jest wdrażana w wielu wystąpieniach i używa modułu równoważenia obciążenia do komunikowania się z nimi.

  1. Otwórz rozwiązanie Begin.sln znajdujące się w folderze Source/Ex2-ScalingOutWithSQLServer/Begin . Po załadowaniu w Eksploratorze serwera zauważysz, że rozwiązanie ma dwa projekty o identycznych strukturach, ale o różnych nazwach. Spowoduje to symulowanie uruchamiania dwóch wystąpień tej samej aplikacji na komputerze lokalnym.

    Begin Solution Simulating 2 Instances of Geek Quiz Begin Solution Simulating 2 Instances

    Rozpocznij rozwiązanie symulujące 2 wystąpienia testu Geek

  2. Otwórz stronę właściwości rozwiązania, klikając prawym przyciskiem myszy węzeł rozwiązania i wybierając pozycję Właściwości. W obszarze Projekt startowy wybierz pozycję Wiele projektów startowych i zmień wartość Akcja dla obu projektów na Start.

    Uruchamianie wielu projektów rozpoczynających wiele projektów

    Uruchamianie wielu projektów

  3. Naciśnij klawisz F5 , aby uruchomić rozwiązanie. Aplikacja uruchomi dwa wystąpienia narzędzia Geek Quiz na różnych portach, symulując wiele wystąpień tej samej aplikacji. Przypnij jedną z przeglądarek po lewej stronie, a drugą po prawej stronie ekranu. Zaloguj się przy użyciu poświadczeń lub zarejestruj nowego użytkownika. Po zalogowaniu zachowaj stronę Trivia po lewej stronie i przejdź do strony Statystyki w przeglądarce po prawej stronie.

    Geek Quiz obok siebie

    Geek Quiz obok siebie

    Geek Quiz w różnych portach

    Geek Quiz w różnych portach

  4. Zacznij odpowiadać na pytania w lewej przeglądarce i zauważysz, że strona Statystyka w prawej przeglądarce nie jest aktualizowana. Dzieje się tak, ponieważ usługa SignalR używa lokalnej pamięci podręcznej do dystrybucji komunikatów między klientami, a ten scenariusz symuluje wiele wystąpień, dlatego pamięć podręczna nie jest między nimi współużytkowana. Możesz sprawdzić, czy usługa SignalR działa, testując te same kroki, ale korzystając z jednej aplikacji. W poniższych zadaniach skonfigurujesz plan zaplecza, aby replikować komunikaty między wystąpieniami.

  5. Wstecz do programu Visual Studio i zatrzymaj debugowanie.

Zadanie 2 — tworzenie SQL Server backplane

W tym zadaniu utworzysz bazę danych, która będzie służyć jako plan prac dla aplikacji Geek Quiz . Użyjesz SQL Server Eksplorator obiektów do przeglądania serwera i inicjowania bazy danych. Ponadto włączysz brokera usług.

  1. W programie Visual Studio otwórz menu Widok i wybierz pozycję SQL Server Eksplorator obiektów.

  2. Połącz się z wystąpieniem bazy danych LocalDB, klikając prawym przyciskiem myszy węzeł SQL Server i wybierając opcję Dodaj SQL Server... .

    Dodawanie wystąpienia SQL Server

    Dodawanie wystąpienia SQL Server do SQL Server Eksplorator obiektów

  3. Ustaw nazwę serwerana (localdb)\v11.0 i pozostaw opcję Uwierzytelnianie systemu Windows jako tryb uwierzytelniania. Kliknij pozycję Połącz, aby kontynuować.

    Nawiązywanie połączenia z bazą danych LocalDB nawiązywanie

    Nawiązywanie połączenia z bazą danych LocalDB

  4. Po nawiązaniu połączenia z wystąpieniem bazy danych LocalDB należy utworzyć bazę danych, która będzie reprezentować SQL Server backplane dla usługi SignalR. W tym celu kliknij prawym przyciskiem myszy węzeł Bazy danych i wybierz polecenie Dodaj nową bazę danych.

    Dodawanie nowej bazy danych Dodawanie nowej

    Dodawanie nowej bazy danych

  5. Ustaw nazwę bazy danych na SignalR i kliknij przycisk OK , aby ją utworzyć.

    Tworzenie bazy danych SignalR Tworzenie bazy

    Tworzenie bazy danych SignalR

    Uwaga

    Możesz wybrać dowolną nazwę bazy danych.

  6. Aby wydajniej otrzymywać aktualizacje z planu zaplecza, zaleca się włączenie usługi Service Broker dla bazy danych. Usługa Service Broker zapewnia natywną obsługę obsługi komunikatów i kolejkowania w SQL Server. Plan zaplecza działa również bez usługi Service Broker. Otwórz nowe zapytanie, klikając prawym przyciskiem myszy bazę danych i wybierając pozycję Nowe zapytanie.

    Otwieranie nowego zapytania

    Otwieranie nowego zapytania

  7. Aby sprawdzić, czy usługa Service Broker jest włączona, wykonaj zapytanie o kolumnę is_broker_enabled w widoku katalogu sys.databases . Wykonaj następujący skrypt w niedawno otwartym oknie zapytania.

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

    Wykonywanie zapytań dotyczących stanu brokera usług

    Wykonywanie zapytań dotyczących stanu brokera usług

  8. Jeśli wartość kolumny is_broker_enabled w bazie danych to "0", użyj następującego polecenia, aby ją włączyć. Zastąp ciąg <YOUR-DATABASE> nazwą ustawioną podczas tworzenia bazy danych (np. SignalR).

    ALTER DATABASE <YOUR-DATABASE> SET ENABLE_BROKER
    

    Włączanie brokera usług

    Włączanie brokera usług

    Uwaga

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

Zadanie 3 — konfigurowanie aplikacji SignalR

W tym zadaniu skonfigurujesz narzędzie Geek Quiz, aby nawiązać połączenie z SQL Server backplane. Najpierw dodasz pakiet NuGet SignalR.SqlServer i ustawisz parametry połączenia do bazy danych backplane.

  1. Otwórz konsolę Menedżera pakietów z poziomu Menedżera pakietówNuGet narzędzi>. Upewnij się, że projekt GeekQuiz został wybrany na liście rozwijanej Projekt domyślny . Wpisz następujące polecenie, aby zainstalować pakiet NuGet Microsoft.AspNet.SignalR.SqlServer .

    Install-Package Microsoft.AspNet.SignalR.SqlServer
    
  2. Powtórz poprzedni krok, ale tym razem dla projektu GeekQuiz2.

  3. Aby skonfigurować SQL Server backplane, otwórz plik Startup.cs projektu GeekQuiz i dodaj następujący kod do metody Configure. Zastąp wartość <YOUR-DATABASE> nazwą bazy danych użytą podczas tworzenia planu backplanu SQL Server. Powtórz ten krok dla projektu GeekQuiz2 .

    (Fragment kodu — RealTimeSignalR — Ex2 — StartupConfiguration)

    public class Startup 
    {   
        public void Configuration(IAppBuilder app) 
        {           
            var sqlConnectionString = @"Server=(localdb)\v11.0;Database=<YOUR-DATABASE>;Integrated Security=True;";
            GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString); 
            this.ConfigureAuth(app);
            app.MapSignalR();
        }
    }
    
  4. Teraz, gdy oba projekty są skonfigurowane do używania SQL Server backplane, naciśnij klawisz F5, aby uruchomić je jednocześnie.

  5. Ponownie program Visual Studio uruchomi dwa wystąpienia narzędzia Geek Quiz na różnych portach. Przypnij jedną z przeglądarek po lewej stronie, a drugą po prawej stronie ekranu i zaloguj się przy użyciu poświadczeń. Zachowaj stronę Trivia po lewej stronie i przejdź do strony Statystyki w prawej przeglądarce.

  6. Zacznij odpowiadać na pytania w przeglądarce po lewej stronie. Tym razem strona Statystyka jest aktualizowana dzięki planowi wstecznego. Przełącz się między aplikacjami (statystyki są teraz po lewej stronie, a Trivia znajduje się po prawej stronie) i powtórz test, aby sprawdzić, czy działa dla obu wystąpień. Plan zaplecza służy jako współużytkowana pamięć podręczna komunikatów dla każdego połączonego serwera, a każdy serwer będzie przechowywać komunikaty we własnej lokalnej pamięci podręcznej do dystrybucji do połączonych klientów.

  7. Wstecz do programu Visual Studio i zatrzymaj debugowanie.

  8. Składnik SQL Server backplane automatycznie generuje niezbędne tabele w określonej bazie danych. W panelu SQL Server Eksplorator obiektów otwórz bazę danych utworzoną dla planu zaplecza (np. SignalR) i rozwiń jej tabele. Powinny zostać wyświetlone następujące tabele:

    Tabele wygenerowane przez plan wsteczny

    Tabele wygenerowane przez plan wsteczny

  9. Kliknij prawym przyciskiem myszy tabelę SignalR.Messages_0 i wybierz pozycję Wyświetl dane.

    Wyświetlanie tabeli komunikatów backplane usługi SignalR

    Wyświetlanie tabeli komunikatów backplane usługi SignalR

  10. Podczas odpowiadania na pytania trywii można zobaczyć różne komunikaty wysyłane do centrum . Plan zaplecza dystrybuuje te komunikaty do dowolnego połączonego wystąpienia.

    Tabela komunikatów w planie wstecznym

    Tabela komunikatów w planie wstecznym


Podsumowanie

W tym praktycznym laboratorium przedstawiono sposób dodawania usługi SignalR do aplikacji i wysyłania powiadomień z serwera do połączonych klientów przy użyciu usługi Hubs. Ponadto pokazano, jak skalować aplikację w poziomie przy użyciu składnika backplane po wdrożeniu aplikacji w wielu wystąpieniach usług IIS.