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:
- As reconexões automáticas são aceitas com o cliente .NET e o cliente JavaScript:
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, "&").replace(/</g, "<").replace(/>/g, ">");
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
- Expansão do SignalR com o Barramento de Serviço do Azure
- Expansão do SignalR com Redis
- Expansão do SignalR com o SQL Server