Dela via


Skillnader mellan ASP.NET SignalR och ASP.NET Core SignalR

ASP.NET Core SignalR är inte kompatibel med klienter eller servrar för ASP.NET SignalR. Den här artikeln beskriver funktioner som har tagits bort eller ändrats i ASP.NET Core SignalR.

Så här identifierar du SignalR-versionen

ASP.NET SignalR ASP.NET Core SignalR
Server NuGet-paket Microsoft.AspNet.SignalR Ingen. Ingår i det Microsoft.AspNetCore.App delat ramverk.
Client NuGet-paket Microsoft.AspNet.SignalR. Klient
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR. Klient
JavaScript-klientens npm-paket signalr @microsoft/signalr
Java-klient GitHub-lagringsplats (inaktuell) Maven-paket com.microsoft.signalr
Server-apptyp ASP.NET (System.Web) eller OWIN Self-Host ASP.NET Core
serverplattformar som stöds .NET Framework 4.5 eller senare .NET Core 3.0 eller senare
ASP.NET SignalR ASP.NET Core SignalR
NuGet-paketet för servern Microsoft.AspNet.SignalR Microsoft.AspNetCore.App (.NET Core)
Microsoft.AspNetCore.SignalR (.NET Framework)
Klient NuGet-paket Microsoft.AspNet.SignalR. Klient
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR. Klient
JavaScript-klientens npm-paket signalr @aspnet/signalr
Java-klient GitHub-lagringsplats (inaktuell) Maven-paket com.microsoft.signalr
Server-apptyp ASP.NET (System.Web) eller OWIN Self-Host ASP.NET Core
serverplattformar som stöds .NET Framework 4.5 eller senare .NET Framework 4.6.1 eller senare
.NET Core 2.1 eller senare

Funktionsskillnader

Automatisk återanslutning

I ASP.NET SignalR:

  • Som standard försöker SignalR återansluta till servern om anslutningen avbryts.

I 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();

Innan ASP.NET Core 3.0 stöder SignalR inte automatiska återanslutningar. Om klienten är frånkopplad måste användaren uttryckligen starta en ny anslutning för att återansluta. I ASP.NET SignalRförsöker SignalR återansluta till servern om anslutningen tas bort.

Protokollstöd

ASP.NET Core SignalR stöder JSON, samt ett nytt binärt protokoll baserat på MessagePack. Dessutom kan anpassade protokoll skapas.

Transporter

Transporten forever frame stöds inte i ASP.NET Core SignalR.

Skillnader på servern

Biblioteken ASP.NET Core SignalR på serversidan ingår i Microsoft.AspNetCore.App, som används i mallen ASP.NET Core Web Application för både Razor- och MVC-projekt.

ASP.NET Core SignalR är ett ASP.NET Core-mellanprogram. Den måste konfigureras genom att anropa AddSignalR i Startup.ConfigureServices.

services.AddSignalR()

Om du vill konfigurera routning mappar du vägar till hubbar i UseEndpoints-metodanropet i metoden Startup.Configure.

app.UseRouting();

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

Om du vill konfigurera routning mappar du vägar till hubbar i UseSignalR-metodanropet i metoden Startup.Configure.

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

Ihållande sessioner

Med skalningsmodellen för ASP.NET SignalR kan klienter återansluta och skicka meddelanden till valfri server i servergruppen. I ASP.NET Core SignalRmåste klienten interagera med samma server under hela anslutningen. För utskalning med Redis innebär det att permanenta sessioner krävs. För utskalning med Azure SignalR Servicekrävs inte beständiga sessioner eftersom tjänsten hanterar anslutningarna till klienterna.

Enskild hubb per anslutning

I ASP.NET Core SignalRhar anslutningsmodellen förenklats. Anslutningar görs direkt till en enda hubb, i stället för att en enda anslutning används för att dela åtkomst till flera hubbar.

Direktuppspelning

ASP.NET Core SignalR stöder nu strömmande data från hubben till klienten.

Stat

Möjligheten att skicka godtyckligt tillstånd mellan klienter och hubben (kallas ofta HubState) har tagits bort samt stöd för förloppsmeddelanden. Det finns för närvarande ingen motsvarighet till hubbproxy.

Borttagning av PersistentConnection

I ASP.NET Core SignalRhar klassen PersistentConnection tagits bort.

GlobalHost

ASP.NET Core har en inbyggd beroendeinmatning (DI) i ramverket. Tjänster kan använda DI för att komma åt HubContext. Det GlobalHost objekt som används i ASP.NET SignalR för att hämta en HubContext finns inte i ASP.NET Core SignalR.

HubPipeline

ASP.NET Core SignalR har inte stöd för HubPipeline moduler.

Skillnader på klienten

TypeScript

ASP.NET Core-klienten SignalR skrivs i TypeScript -. Du kan skriva i JavaScript eller TypeScript när du använder JavaScript-klienten.

JavaScript-klienten finns på npm

I ASP.NET versioner hämtades JavaScript-klienten via ett NuGet-paket i Visual Studio. I ASP.NET Core-versionerna innehåller @microsoft/signalr npm-paketet JavaScript-biblioteken. Det här paketet ingår inte i mallen ASP.NET Core Web Application. Använd npm för att hämta och installera @microsoft/signalr npm-paketet.

npm init -y
npm install @microsoft/signalr

I ASP.NET versioner hämtades JavaScript-klienten via ett NuGet-paket i Visual Studio. I ASP.NET Core-versionerna innehåller @aspnet/signalr npm-paketet JavaScript-biblioteken. Det här paketet ingår inte i mallen ASP.NET Core Web Application. Använd npm för att hämta och installera @aspnet/signalr npm-paketet.

npm init -y
npm install @aspnet/signalr

jQuery

Beroendet av jQuery har tagits bort, men projekt kan fortfarande använda jQuery.

Stöd för Internet Explorer

ASP.NET Core SignalR stöder inte Microsoft Internet Explorer, medan ASP.NET SignalR stöder Microsoft Internet Explorer 8 eller senare. Mer information finns i ASP.NET Core SignalR stödda plattformar.

Syntax för JavaScript-klientmetod

JavaScript-syntaxen har ändrats från den ASP.NET versionen av SignalR. I stället för att använda $connection-objektet skapar du en anslutning med hjälp av api:et HubConnectionBuilder.

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

Använd metoden för att ange klientmetoder som hubben kan anropa.

JavaScript-syntaxen har ändrats från den ASP.NET versionen av SignalR. I stället för att använda $connection-objektet skapar du en anslutning med hjälp av api:et HubConnectionBuilder.

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

Använd metoden för att ange klientmetoder som hubben kan anropa.

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);
});

När du har skapat klientmetoden startar du hubbanslutningen. Länka en fånga metod för att logga eller hantera fel.

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

Hubb-proxies

Hubbproxy genereras inte längre automatiskt. I stället skickas metodens namn som en sträng till anropa API.

Hubbproxy genereras inte längre automatiskt. Istället skickas metodnamnet som en sträng till API:et som anropas med .

.NET och andra klienter

The Microsoft.AspNetCore.SignalR.Client NuGet-paketet innehåller .NET-klientbiblioteken för ASP.NET Core SignalR.

Använd HubConnectionBuilder för att skapa och bygga en instans av en anslutning till en hubb.

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

Utskalningsskillnader

ASP.NET SignalR stöder SQL Server och Redis. ASP.NET Core SignalR stöder Azure SignalR Service och Redis.

ASP.NET

ASP.NET Core

Ytterligare resurser