Udostępnij za pośrednictwem


SignalR — skalowanie w poziomie z użyciem usługi Azure Service Bus

Autor : Patrick Fletcher

Ostrzeżenie

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

W tym samouczku wdrożysz aplikację SignalR w roli internetowej platformy Windows Azure przy użyciu backplanu usługi Service Bus w celu dystrybucji komunikatów do każdego wystąpienia roli. (Możesz również użyć backplanu usługi Service Bus z aplikacjami internetowymi w Azure App Service).

Diagram przedstawiający strzałki z tematu do ról sieci Web na komputery. Strzałka z etykietą Publikowanie rozpoczyna się od ról sieci Web i przechodzi do tematu.

Wymagania wstępne:

  • Konto platformy Windows Azure.
  • Zestaw Windows Azure SDK.
  • Visual Studio 2012 lub 2013.

Zaplecze magistrali usług jest również zgodne z usługą Service Bus dla systemu Windows Server w wersji 1.1. Nie jest jednak zgodny z wersją 1.0 usługi Service Bus dla systemu Windows Server.

Cennik

Plan wsteczny usługi Service Bus używa tematów do wysyłania komunikatów. Aby uzyskać najnowsze informacje o cenach, zobacz Service Bus. W momencie pisania tego tekstu możesz wysłać 1000 000 wiadomości miesięcznie za mniej niż 1 USD. Płaszczyzna wsteczna wysyła komunikat magistrali usług dla każdej wywołania metody centrum SignalR. Istnieją również pewne komunikaty sterujące dla połączeń, rozłączeń, dołączania lub opuszczania grup itd. W większości aplikacji większość ruchu komunikatów będzie wywołaniami metody centrum.

Omówienie

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

  1. Użyj Azure Portal systemu Windows, aby utworzyć nową przestrzeń nazw usługi Service Bus.

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

  3. Tworzenie aplikacji SignalR.

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

    public void Configuration(IAppBuilder app)
    {
        string connectionString = "Service Bus connection string";
        GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName");
    
        app.MapSignalR();
        // ...
    }
    

Ten kod konfiguruje płaszczyznę wsteczną z wartościami domyślnymi TopicCount i MaxQueueLength. Aby uzyskać informacje na temat zmieniania tych wartości, zobacz SignalR Performance: Scaleout Metrics (Wydajność usługi SignalR: metryki skalowania w poziomie).

Dla każdej aplikacji wybierz inną wartość "YourAppName". Nie używaj tej samej wartości w wielu aplikacjach.

Tworzenie usług platformy Azure

Utwórz usługę w chmurze zgodnie z opisem w temacie How to Create and Deploy a Cloud Service (Jak utworzyć i wdrożyć usługę w chmurze). Postępuj zgodnie z instrukcjami w sekcji "Instrukcje: tworzenie usługi w chmurze przy użyciu szybkiego tworzenia". W tym samouczku nie trzeba przekazywać certyfikatu.

Zrzut ekranu przedstawiający opcję Usługa w chmurze w kolorze czerwonym.

Utwórz nową przestrzeń nazw usługi Service Bus zgodnie z opisem w temacie How to Use Service Bus Topics/Subscriptions (Jak używać tematów/subskrypcji usługi Service Bus). Wykonaj kroki opisane w sekcji "Tworzenie przestrzeni nazw usługi".

Zrzut ekranu przedstawiający okno zatytułowane Dodawanie nowej przestrzeni nazw z opcjami poniżej.

Uwaga

Upewnij się, że wybrano ten sam region dla usługi w chmurze i przestrzeni nazw usługi Service Bus.

Tworzenie projektu programu Visual Studio

Uruchom program Visual Studio. W menu Plik kliknij pozycję Nowy projekt.

W oknie dialogowym Nowy projekt rozwiń węzeł Visual C#. W obszarze Zainstalowane szablony wybierz pozycję Chmura , a następnie wybierz pozycję Usługa w chmurze platformy Windows Azure. Zachowaj domyślną .NET Framework 4.5. Nadaj aplikacji nazwę ChatService i kliknij przycisk OK.

Zrzut ekranu przedstawiający okno dialogowe Nowy projekt. Chmura jest zaznaczona w folderze punktów programu Office Share Point. Usługa czatu znajduje się w polu Nazwa.

W oknie dialogowym Nowa usługa w chmurze platformy Windows Azure wybierz pozycję ASP.NET rola sieci Web. Kliknij przycisk strzałki w prawo (>), aby dodać rolę do rozwiązania.

Umieść kursor myszy nad nową rolą, aby ikona ołówka widoczna. Kliknij tę ikonę, aby zmienić nazwę roli. Nadaj roli nazwę "SignalRChat" i kliknij przycisk OK.

Zrzut ekranu przedstawiający okno dialogowe Nowa usługa w chmurze platformy Windows Azure. Usługa Signal R Chat jest wpisywana powyżej roli internetowej S P dot NET.

W oknie dialogowym Nowy projekt ASP.NET wybierz pozycję MVC, a następnie kliknij przycisk OK.

Zrzut ekranu przedstawiający okno dialogowe New A S P dot NET Project (Nowy projekt S P.NET). Język M V C jest wybranym szablonem.

Kreator projektu tworzy dwa projekty:

  • ChatService: ten projekt jest aplikacją platformy Windows Azure. Definiuje role platformy Azure i inne opcje konfiguracji.
  • SignalRChat: ten projekt jest projektem ASP.NET MVC 5.

Tworzenie aplikacji czatu usługi SignalR

Aby utworzyć aplikację czatu, wykonaj kroki opisane w samouczku Wprowadzenie z usługami SignalR i MVC 5.

Użyj narzędzia NuGet, aby zainstalować wymagane biblioteki. W 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 polecenia:

Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus

-ProjectName Użyj opcji , aby zainstalować pakiety w projekcie ASP.NET MVC, a nie w projekcie platformy Windows Azure.

Konfigurowanie płaszczyzny wstecznej

W pliku Startup.cs aplikacji dodaj następujący kod:

public void Configuration(IAppBuilder app)
{
    // Any connection or hub wire up and configuration should go here
    string connectionString = "";
    GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");  

    app.MapSignalR();
}

Teraz musisz pobrać parametry połączenia usługi Service Bus. W Azure Portal wybierz utworzoną przestrzeń nazw usługi Service Bus i kliknij ikonę Klucz dostępu.

Zrzut ekranu przedstawiający znak plus z etykietą Utwórz, klucz z etykietą Klucz dostępu i kosz z etykietą Usuń.

Skopiuj parametry połączenia do schowka, a następnie wklej je do zmiennej connectionString .

Zrzut ekranu przedstawiający okno dialogowe Łączenie klucza dostępu z przestrzenią nazw.

string connectionString = "Endpoint=sb://xxxx.servicebus.windows.net/;
SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX";

Wdróż na platformie Azure

W Eksplorator rozwiązań rozwiń folder Roles w projekcie ChatService.

Zrzut ekranu przedstawiający otwarty folder o nazwie Role. Wybrano opcję Signal R Chat.

Kliknij prawym przyciskiem myszy rolę SignalRChat i wybierz pozycję Właściwości. Wybierz kartę Konfiguracja . W obszarze Wystąpienia wybierz pozycję 2. Możesz również ustawić rozmiar maszyny wirtualnej na Wartość Bardzo mała.

Zrzut ekranu przedstawiający wystąpienia. Liczba wystąpień jest ustawiona na wartość 2, a rozmiar maszyny wirtualnej jest ustawiony na Wartość Bardzo mała.

Zapisz zmiany.

W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt ChatService. Kliknij pozycję Opublikuj.

Zrzut ekranu przedstawiający Eksplorator rozwiązań. Opcja Publikuj jest zaznaczona w menu kontekstowym usługi czatu.

Jeśli po raz pierwszy publikujesz dane na platformie Windows Azure, musisz pobrać poświadczenia. W kreatorze Publikowanie kliknij pozycję "Zaloguj się, aby pobrać poświadczenia". Spowoduje to wyświetlenie monitu o zalogowanie się do Azure Portal systemu Windows i pobranie pliku ustawień publikowania.

Zrzut ekranu przedstawiający okno dialogowe Publikowanie aplikacja systemu Azure systemu Windows. Zaloguj się, aby pobrać poświadczenia, jest zakreśliny na czerwono.

Kliknij przycisk Importuj i wybierz pobrany plik ustawień publikowania.

Kliknij przycisk Dalej. W oknie dialogowym Ustawienia publikowania w obszarze Usługa w chmurze wybierz utworzoną wcześniej usługę w chmurze.

Zrzut ekranu przedstawiający stronę Ustawienia publikowania platformy Windows Azure.

Kliknij przycisk Opublikuj. Wdrożenie aplikacji i uruchomienie maszyn wirtualnych może potrwać kilka minut.

Teraz po uruchomieniu aplikacji do czatu wystąpienia ról komunikują się za pośrednictwem Azure Service Bus przy użyciu tematu usługi Service Bus. Temat to kolejka komunikatów, która umożliwia wielu subskrybentom.

Płaszczyzna wsteczna automatycznie tworzy temat i subskrypcje. Aby wyświetlić działania subskrypcji i komunikatów, otwórz Azure Portal, wybierz przestrzeń nazw usługi Service Bus i kliknij pozycję "Tematy".

Zrzut ekranu przedstawiający menu nawigacji z wybranymi tematami.

Wyświetlenie działania komunikatu na pulpicie nawigacyjnym może potrwać kilka minut.

Zrzut ekranu przedstawiający wykres aktywności subskrypcji i komunikatów na osi czasu.

Usługa SignalR zarządza okresem istnienia tematu. O ile aplikacja jest wdrażana, nie próbuj ręcznie usuwać tematów ani zmieniać ustawień w temacie.

Rozwiązywanie problemów

System.InvalidOperationException "Jedyną obsługiwaną funkcją IsolationLevel jest 'IsolationLevel.Serializable'".

Ten błąd może wystąpić, jeśli poziom transakcji dla operacji jest ustawiony na wartość inną niż Serializable. Sprawdź, czy żadne operacje nie są wykonywane z innymi poziomami transakcji.