Partilhar via


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

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 SignalR versão

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

Diferenças entre caraterísticas

Reconexões automáticas

Em ASP.NET SignalR:

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

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, SignalR não suportava 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, SignalR tenta se reconectar ao servidor se a conexão for interrompida.

Suporte de protocolo

ASP.NET Core SignalR suporta JSON, bem como um novo protocolo binário baseado em MessagePack. Além disso, protocolos personalizados podem ser criados.

Transportes

O transporte Forever Frame não é suportado no ASP.NET Core SignalR.

Diferenças no servidor

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

ASP.NET Core SignalR é um middleware ASP.NET Core. Deve ser configurado através da chamada de AddSignalR em Startup.ConfigureServices.

services.AddSignalR()

Para configurar o roteamento, mapeie rotas para hubs dentro do método UseEndpoints na chamada do método Startup.Configure.

app.UseRouting();

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

Para configurar o roteamento, mapeie rotas para hubs dentro do método UseSignalR na chamada do 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 duração da conexão. Para expansão horizontal usando Redis, isso significa que sessões persistentes são necessárias. Para expansão usando o Serviço do AzureSignalR, sessões fixas 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 a um único hub, em vez de uma única conexão ser usada para compartilhar o acesso a vários hubs.

Serviço de streaming

ASP.NET Core SignalR agora suporta dados em streaming do hub para o cliente.

Estado

A capacidade de passar o estado arbitrário entre os clientes e o hub (muitas vezes chamado de HubState) foi removida, assim 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

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

HubPipeline

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

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 está hospedado no npm

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

npm init -y
npm install @microsoft/signalr

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

npm init -y
npm install @aspnet/signalr

jConsulta

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

Suporte do Internet Explorer

O ASP.NET Core SignalR não suporta o Microsoft Internet Explorer, enquanto o ASP.NET SignalR suporta o Microsoft Internet Explorer 8 ou posterior. Para obter mais informações, consulte ASP.NET Core SignalR plataformas suportadas.

Sintaxe do método do cliente JavaScript

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

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

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

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

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

Use o método on para especificar 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 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 de hub

Os proxies de 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 de 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 de cliente .NET para ASP.NET Core SignalR.

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

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

Diferenças de escalabilidade

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

ASP.NET

ASP.NET Núcleo

Recursos adicionais