Compartilhar via


Diferenças entre o ASP.NET SignalR e o ASP.NET Core SignalR

O ASP.NET Core SignalR não é compatível com clientes ou servidores para ASP.NET SignalR. Este artigo detalha os recursos que foram removidos ou alterados no ASP.NET Core SignalR.

Como identificar a versão do SignalR

ASP.NET SignalR ASP.NET Core SignalR
Pacote do servidor NuGet Microsoft.AspNet.SignalR Nenhum. Incluído na estrutura compartilhada do Microsoft.AspNetCore.App.
Pacotes do cliente NuGet Microsoft.AspNet.SignalR.Client
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR.Client
Pacote npm do cliente JavaScript signalr @microsoft/signalr
Cliente Java Repositório do GitHub (preterido) Pacote Maven com.microsoft.signalr
Tipo de aplicativo de servidor ASP.NET (System.Web) ou OWIN Self-Host ASP.NET Core
Plataformas de servidor com suporte .NET Framework 4.5 ou posterior .NET Core 3.0 ou posterior
ASP.NET SignalR ASP.NET Core SignalR
Pacote do servidor NuGet Microsoft.AspNet.SignalR Microsoft.AspNetCore.App (.NET Core)
Microsoft.AspNetCore.SignalR (.NET Framework)
Pacotes do cliente NuGet Microsoft.AspNet.SignalR.Client
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR.Client
Pacote npm do cliente JavaScript signalr @aspnet/signalr
Cliente Java Repositório do GitHub (preterido) Pacote Maven com.microsoft.signalr
Tipo de aplicativo de servidor ASP.NET (System.Web) ou OWIN Self-Host ASP.NET Core
Plataformas de servidor com suporte .NET Framework 4.5 ou posterior .NET Framework 4.6.1 ou posterior
.NET Core 2.1 ou posterior

Diferenças de recursos

Reconexões automáticas

No ASP.NET SignalR:

  • Por padrão, o SignalR tenta se reconectar ao servidor se a conexão for descartada.

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

Antes do ASP.NET Core 3.0, o SignalR não dá suporte a reconexões automáticas. Se o cliente estiver desconectado, o usuário deverá iniciar explicitamente uma nova conexão para se reconectar. No ASP.NET SignalR, o SignalR tenta se reconectar ao servidor se a conexão cair.

Suporte a protocolo

O ASP.NET Core SignalR é compatível com JSON, bem como com um novo protocolo binário baseado no MessagePack. Além disso, protocolos personalizados podem ser criados.

Transportes

O transporte do Forever Frame não tem suporte no ASP.NET Core SignalR.

Diferenças no servidor

As bibliotecas ASP.NET Core SignalR do lado do servidor são incluídas no Microsoft.AspNetCore.App, que é usado no modelo de Aplicativo Web do ASP.NET Core para projetos MVC e Razor.

O ASP.NET Core SignalR é um middleware do ASP.NET Core. Ele deve ser configurado chamando AddSignalR em Startup.ConfigureServices.

services.AddSignalR()

Para configurar o roteamento, mapeie rotas para hubs dentro da chamada de método UseEndpoints no método Startup.Configure.

app.UseRouting();

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

Para configurar o roteamento, mapeie rotas para hubs dentro da chamada de método UseSignalR no método Startup.Configure.

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

Sessões persistentes

O modelo de expansão para ASP.NET SignalR permite que os clientes se reconectem e enviem mensagens para qualquer servidor no farm. No ASP.NET Core SignalR, o cliente deve interagir com o mesmo servidor durante a conexão. Para expandir horizontalmente usando Redis, isso significa que sessões persistentes são necessárias. Para expansão usando o Serviço de do Azure SignalR, as sessões persistentes não são necessárias porque o serviço lida com conexões com clientes.

Hub único por conexão

No ASP.NET Core SignalR, o modelo de conexão foi simplificado. As conexões são feitas diretamente com um único hub, em vez de uma única conexão sendo usada para compartilhar o acesso a vários hubs.

Streaming

O ASP.NET Core SignalR dá suporte ao streaming de dados do hub para o cliente.

State

A capacidade de passar um estado arbitrário entre os clientes e o hub (geralmente chamado de HubState) foi removida, bem como o suporte para mensagens de progresso. Não há nenhum equivalente de proxies de hub no momento.

Remoção de PersistentConnection

No ASP.NET Core SignalR, a classe PersistentConnection foi removida.

GlobalHost

O ASP.NET Core tem DI (injeção de dependência) incorporada à estrutura. Os serviços podem usar a DI para acessar o HubContext. O objeto GlobalHost usado no ASP.NET SignalR para obter um HubContext não existe no ASP.NET Core SignalR.

HubPipeline

O ASP.NET Core SignalR não tem suporte para módulos do HubPipeline.

Diferenças no cliente

TypeScript

O cliente ASP.NET Core SignalR é escrito em TypeScript. Você pode escrever em JavaScript ou TypeScript ao usar o cliente JavaScript.

O cliente JavaScript é hospedado no npm

Em versões do ASP.NET, o cliente JavaScript foi obtido por meio de um pacote NuGet no Visual Studio. Nas versões do ASP.NET Core, o pacote npm do @microsoft/signalr contém as bibliotecas JavaScript. Esse pacote não está incluído no modelo do Aplicativo Web do ASP.NET Core. Use o npm para obter e instalar o pacote npm do @microsoft/signalr.

npm init -y
npm install @microsoft/signalr

Em versões do ASP.NET, o cliente JavaScript foi obtido por meio de um pacote NuGet no Visual Studio. Nas versões do ASP.NET Core, o pacote npm do @aspnet/signalr contém as bibliotecas JavaScript. Esse pacote não está incluído no modelo do Aplicativo Web do ASP.NET Core. Use o npm para obter e instalar o pacote npm do @aspnet/signalr.

npm init -y
npm install @aspnet/signalr

jQuery

A dependência no jQuery foi removida, no entanto, os projetos ainda podem usar o jQuery.

Suporte ao Internet Explorer

O ASP.NET Core SignalR não dá suporte ao Microsoft Internet Explorer, enquanto o ASP.NET SignalR dá suporte ao Microsoft Internet Explorer 8 ou posterior. Para obter mais informações, confira Plataformas com suporte do ASP.NET Core SignalR.

Sintaxe do método de cliente JavaScript

A sintaxe do JavaScript foi alterada da versão ASP.NET do SignalR. Em vez de usar o objeto $connection, crie uma conexão usando a API HubConnectionBuilder.

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

Use o método on para especificar os métodos de cliente que o hub pode chamar.

A sintaxe do JavaScript foi alterada da versão ASP.NET do SignalR. Em vez de usar o objeto $connection, crie uma conexão usando a API HubConnectionBuilder.

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

Use o método on para especificar os métodos de cliente que o hub pode chamar.

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

Depois de criar o método de cliente, inicie a conexão do hub. Encadeie um método catch para registrar ou manipular erros.

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

Proxies do hub

Os proxies do hub não são mais gerados automaticamente. Em vez disso, o nome do método é passado para a API de invocação como uma cadeia de caracteres.

Os proxies do hub não são mais gerados automaticamente. Em vez disso, o nome do método é passado para a API de invocação como uma cadeia de caracteres.

.NET e outros clientes

O pacote NuGet Microsoft.AspNetCore.SignalR.Client contém as bibliotecas do cliente .NET para ASP.NET Core SignalR.

Use o HubConnectionBuilder para criar e compilar uma instância de uma conexão com um hub.

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

Diferenças de expansão

O ASP.NET SignalR dá suporte ao SQL Server e Redis. O ASP.NET Core SignalR dá suporte ao Serviço do Azure SignalR e Redis.

ASP.NET

ASP.NET Core

Recursos adicionais