SignalR — skalowanie w poziomie z użyciem programu SQL Server
Autor : Patrick Fletcher
Ostrzeżenie
Ta dokumentacja nie jest przeznaczona dla najnowszej wersji usługi SignalR. Przyjrzyj się ASP.NET Core SignalR.
Wersje oprogramowania używane w tym temacie
- Visual Studio 2013
- .NET 4.5
- SignalR w wersji 2
Poprzednie wersje tego tematu
Aby uzyskać informacje o wcześniejszych wersjach usługi SignalR, zobacz SignalR Older Versions (Starsze wersje usługi SignalR).
Pytania i komentarze
Prześlij opinię na temat tego, jak podoba ci się ten samouczek i co możemy poprawić w komentarzach w dolnej części strony. Jeśli masz pytania, które nie są bezpośrednio związane z samouczkiem, możesz opublikować je na forum ASP.NET SignalR lub StackOverflow.com.
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. Możesz również uruchomić ten samouczek na jednej maszynie testowej, ale aby uzyskać pełny efekt, musisz 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.
Wymagania wstępne
Microsoft SQL Server 2005 lub nowszy. Plan zaplecza obsługuje zarówno wersje pulpitu, jak i serwera SQL Server. Nie obsługuje SQL Server Compact Edition ani bazy danych Azure SQL. (Jeśli aplikacja jest hostowana na platformie Azure, rozważ zamiast tego plan zaplecza usługi Service Bus).
Omówienie
Zanim przejdziemy do szczegółowego samouczka, zapoznaj się z szybkim omówieniem tego, co zrobisz.
Utwórz nową pustą bazę danych. Plan zaplecza utworzy niezbędne tabele w tej bazie danych.
Dodaj następujące pakiety NuGet do aplikacji:
Utwórz aplikację SignalR.
Dodaj następujący kod do pliku Startup.cs, aby skonfigurować plan zaplecza:
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(); } }
Ten kod konfiguruje plan zaplecza z wartościami domyślnymi tableCount i MaxQueueLength. Aby uzyskać informacje na temat zmieniania tych wartości, zobacz SignalR Performance: Scaleout Metrics (Wydajność usługi SignalR: Metryki skalowania w poziomie).
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 planu wstecznego do użycia. Możesz nadać bazie danych dowolną nazwę. Nie musisz tworzyć żadnych tabel w bazie danych; plan wsteczny utworzy niezbędne tabele.
Włączanie brokera usług
Zaleca się włączenie usługi Service Broker dla bazy danych backplane. Usługa Service Broker zapewnia natywną obsługę obsługi komunikatów i kolejkowania w SQL Server, dzięki czemu zaplecze będzie otrzymywać aktualizacje wydajniej. (Jednak plan zaplecza działa również bez usługi Service Broker).
Aby sprawdzić, czy usługa Service Broker jest włączona, wykonaj zapytanie o kolumnę is_broker_enabled w widoku katalogu sys.databases .
SELECT [name], [service_broker_guid], [is_broker_enabled]
FROM [master].[sys].[databases]
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ę zakleszczać, 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 jedną 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 Startup.cs. Dodaj następujący kod do metody Configure :
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();
}
}
Wdrażanie i uruchamianie aplikacji
Przygotuj wystąpienia systemu Windows Server do wdrożenia aplikacji SignalR.
Dodaj rolę usług IIS. Uwzględnij funkcje tworzenia aplikacji, w tym protokół WebSocket.
Uwzględnij również usługę zarządzania (wymienioną w obszarze "Narzędzia do zarządzania").
Zainstaluj program 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
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 podczas dodawania roli usług IIS zainstalowano usługę zarządzania).
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 maszyny dewelopera na serwerze. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy rozwiązanie 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 sieci Web 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żda z nich odbiera komunikaty usługi SignalR z drugiej. (Oczywiście w środowisku produkcyjnym dwa serwery znajdują się za modułem równoważenia obciążenia).
Po uruchomieniu aplikacji widać, że usługa SignalR automatycznie utworzyła tabele w bazie danych:
Usługa SignalR zarządza tabelami. Tak długo, jak aplikacja jest wdrażana, nie usuwaj wierszy, modyfikuj tabelę itd.