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).
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.
Użyj Azure Portal systemu Windows, aby utworzyć nową przestrzeń nazw usługi Service Bus.
Dodaj następujące pakiety NuGet do aplikacji:
Tworzenie aplikacji SignalR.
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.
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".
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.
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.
W oknie dialogowym Nowy projekt ASP.NET wybierz pozycję MVC, a następnie kliknij przycisk OK.
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.
Skopiuj parametry połączenia do schowka, a następnie wklej je do zmiennej connectionString .
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.
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.
Zapisz zmiany.
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt ChatService. Kliknij pozycję Opublikuj.
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.
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.
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".
Wyświetlenie działania komunikatu na pulpicie nawigacyjnym może potrwać kilka minut.
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.