Udostępnij za pośrednictwem


Różnice między ASP.NET SignalR i ASP.NET Core SignalR

ASP.NET Core SignalR nie jest zgodny z klientami ani serwerami dla ASP.NET SignalR. Ten artykuł zawiera szczegółowe informacje o funkcjach, które zostały usunięte lub zmienione w programie ASP.NET Core SignalR.

Jak zidentyfikować SignalR wersję

ASP.NET SignalR ASP.NET Core SignalR
Pakiet NuGet serwera Microsoft.AspNet.SignalR Brak. Uwzględnione w strukturze udostępnionej Microsoft.AspNetCore.App .
Pakiety NuGet klienta Microsoft.AspNet.SignalR. Klient
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR. Klient
Pakiet npm klienta JavaScript signalr @microsoft/signalr
Klienta środowiska Java Repozytorium GitHub (przestarzałe) Pakiet Maven com.microsoft.signalr
Typ aplikacji serwera ASP.NET (System.Web) lub OWIN Self-Host ASP.NET Core
Obsługiwane platformy serwerów .NET Framework 4.5 lub nowszy .NET Core 3.0 lub nowszy
ASP.NET SignalR ASP.NET Core SignalR
Pakiet NuGet serwera Microsoft.AspNet.SignalR Microsoft.AspNetCore.App (.NET Core)
Microsoft.AspNetCore.SignalR (.NET Framework)
Pakiety NuGet klienta Microsoft.AspNet.SignalR. Klient
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR. Klient
Pakiet npm klienta JavaScript signalr @aspnet/signalr
Klienta środowiska Java Repozytorium GitHub (przestarzałe) Pakiet Maven com.microsoft.signalr
Typ aplikacji serwera ASP.NET (System.Web) lub OWIN Self-Host ASP.NET Core
Obsługiwane platformy serwerów .NET Framework 4.5 lub nowszy .NET Framework 4.6.1 lub nowszy
.NET Core 2.1 lub nowszy

Różnice między funkcjami

Automatyczne ponowne nawiązywanie połączeń

W ASP.NET SignalR:

  • Domyślnie próbuje ponownie nawiązać połączenie z serwerem, SignalR jeśli połączenie zostanie przerwane.

W ASP.NET Core SignalR:

HubConnection connection = new HubConnectionBuilder()
    .WithUrl(new Uri("http://127.0.0.1:5000/chathub"))
    .WithAutomaticReconnect()
    .Build();
const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .withAutomaticReconnect()
    .build();

Przed ASP.NET Core 3.0 SignalR nie obsługuje automatycznych ponownych połączeń. Jeśli klient zostanie odłączony, użytkownik musi jawnie uruchomić nowe połączenie, aby ponownie nawiązać połączenie. W ASP.NET SignalRSignalR program próbuje ponownie nawiązać połączenie z serwerem, jeśli połączenie zostanie przerwane.

Obsługa protokołów

ASP.NET Core SignalR obsługuje kod JSON, a także nowy protokół binarny oparty na usłudze MessagePack. Ponadto można tworzyć niestandardowe protokoły.

Transporty

Transport Forever Frame nie jest obsługiwany w systemie ASP.NET Core SignalR.

Różnice na serwerze

Biblioteki po stronie serwera ASP.NET Core SignalR znajdują się w Microsoft.AspNetCore.App, która jest używana w szablonie ASP.NET Core Web Application dla Razor projektów i MVC.

ASP.NET Core SignalR to oprogramowanie pośredniczące ASP.NET Core. Należy go skonfigurować przez wywołanie AddSignalR metody w pliku Startup.ConfigureServices.

services.AddSignalR()

Aby skonfigurować routing, zamapuj trasy na koncentratory wewnątrz UseEndpoints wywołania metody w metodzie Startup.Configure .

app.UseRouting();

app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<ChatHub>("/hub");
});

Aby skonfigurować routing, zamapuj trasy na koncentratory wewnątrz UseSignalR wywołania metody w metodzie Startup.Configure .

app.UseSignalR(routes =>
{
    routes.MapHub<ChatHub>("/hub");
});

Sesje sticky

Model skalowania w poziomie dla ASP.NET SignalR umożliwia klientom ponowne łączenie i wysyłanie komunikatów do dowolnego serwera w farmie. W programie ASP.NET Core SignalRklient musi wchodzić w interakcję z tym samym serwerem przez czas trwania połączenia. W przypadku skalowania w poziomie przy użyciu usługi Redis oznacza to, że wymagane są sesje sticky. W przypadku skalowania w poziomie przy użyciu usługi platformy Azure SignalR sesje sticky nie są wymagane, ponieważ usługa obsługuje połączenia z klientami.

Pojedyncze centrum na połączenie

W ASP.NET Core SignalRmodel połączenia został uproszczony. Połączenia są wykonywane bezpośrednio z jednym koncentratorem, a nie z jednym połączeniem używanym do udostępniania dostępu do wielu centrów.

Przesyłanie strumieniowe

ASP.NET Core SignalR obsługuje teraz przesyłanie strumieniowe danych z centrum do klienta.

Stan

Możliwość przekazywania dowolnego stanu między klientami a koncentratorem (często nazywanym HubState) została usunięta, a także obsługa komunikatów postępu. Obecnie nie ma odpowiednika serwerów proxy koncentratora.

Trwałe usuwanie połączenia

W ASP.NET Core SignalRusunięto klasę PersistentConnection .

GlobalHost

ASP.NET Core ma wbudowaną iniekcję zależności (DI) w platformę. Usługi mogą uzyskiwać dostęp do elementu HubContext przy użyciu di. Obiekt GlobalHost używany w ASP.NET SignalR w celu pobrania elementu HubContext nie istnieje w ASP.NET Core SignalR.

HubPipeline

ASP.NET Core SignalR nie ma obsługi HubPipeline modułów.

Różnice w kliencie

TypeScript

Klient ASP.NET Core SignalR jest napisany w języku TypeScript. Możesz pisać w języku JavaScript lub TypeScript podczas korzystania z klienta JavaScript.

Klient języka JavaScript jest hostowany na serwerze npm

W ASP.NET wersjach klient JavaScript został uzyskany za pośrednictwem pakietu NuGet w programie Visual Studio. W wersjach @microsoft/signalr ASP.NET Core pakiet npm zawiera biblioteki JavaScript. Ten pakiet nie jest uwzględniony w szablonie aplikacji internetowej platformy ASP.NET Core. Użyj narzędzia npm, aby uzyskać i zainstalować @microsoft/signalr pakiet npm.

npm init -y
npm install @microsoft/signalr

W ASP.NET wersjach klient JavaScript został uzyskany za pośrednictwem pakietu NuGet w programie Visual Studio. W wersjach @aspnet/signalr ASP.NET Core pakiet npm zawiera biblioteki JavaScript. Ten pakiet nie jest uwzględniony w szablonie aplikacji internetowej platformy ASP.NET Core. Użyj narzędzia npm, aby uzyskać i zainstalować @aspnet/signalr pakiet npm.

npm init -y
npm install @aspnet/signalr

jQuery

Zależność od zapytania jQuery została usunięta, jednak projekty nadal mogą używać trybu jQuery.

Obsługa programu Internet Explorer

ASP.NET Core SignalR nie obsługuje programu Microsoft Internet Explorer, natomiast ASP.NET SignalR obsługuje program Microsoft Internet Explorer 8 lub nowszy. Aby uzyskać więcej informacji, zobacz platformy obsługiwane przez platformy ASP.NET CoreSignalR.

Składnia metody klienta języka JavaScript

Składnia języka JavaScript została zmieniona z ASP.NET wersji programu SignalR. Zamiast używać $connection obiektu, utwórz połączenie przy użyciu interfejsu API HubConnectionBuilder .

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/hub")
    .build();

Użyj metody on, aby określić metody klienta, które centrum może wywołać.

Składnia języka JavaScript została zmieniona z ASP.NET wersji programu SignalR. Zamiast używać $connection obiektu, utwórz połączenie przy użyciu interfejsu API HubConnectionBuilder .

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/hub")
    .build();

Użyj metody on, aby określić metody klienta, które centrum może wywołać.

connection.on("ReceiveMessage", (user, message) => {
    const msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    const encodedMsg = `${user} says ${msg}`;
    console.log(encodedMsg);
});

Po utworzeniu metody klienta uruchom połączenie centrum. Utwórz łańcuch metody catch w celu rejestrowania lub obsługi błędów.

connection.start().catch(err => console.error(err));

Serwery proxy koncentratora

Serwery proxy koncentratora nie są już generowane automatycznie. Zamiast tego nazwa metody jest przekazywana do interfejsu API wywołania jako ciąg.

Serwery proxy koncentratora nie są już generowane automatycznie. Zamiast tego nazwa metody jest przekazywana do interfejsu API wywołania jako ciąg.

.NET i inni klienci

Microsoft.AspNetCore .SignalR. Pakiet NuGet klienta zawiera biblioteki klienta platformy .NET dla platformy ASP.NET Core SignalR.

Użyj polecenia , HubConnectionBuilder aby utworzyć i utworzyć wystąpienie połączenia z koncentratorem.

connection = new HubConnectionBuilder()
    .WithUrl("url")
    .Build();

Różnice w poziomie skalowania

SignalR ASP.NET obsługuje programy SQL Server i Redis. platforma ASP.NET Core SignalR obsługuje usługi platformy Azure SignalR i usługę Redis.

ASP.NET

ASP.NET Core

Dodatkowe zasoby