Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Note
Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 10 deste artigo.
Warning
Esta versão do ASP.NET Core não é mais suportada. Para obter mais informações, consulte a Política de suporte do .NET e do .NET Core. Para a versão atual, consulte a versão .NET 9 deste artigo.
Este tutorial ensina os conceitos básicos da criação de uma aplicação em tempo real usando SignalR. Você aprende a:
- Crie um projeto Web.
- Adicione a biblioteca do SignalR cliente.
- Crie um SignalR hub.
- Configure o projeto para usar SignalR.
- Adicione código que envia mensagens de qualquer cliente para todos os clientes conectados.
No final, você terá um aplicativo de bate-papo de trabalho:
Prerequisites
Visual Studio 2022 com a carga de trabalho de ASP.NET e desenvolvimento web .
Criar um projeto de aplicativo Web
Inicie o Visual Studio 2022 e selecione Criar um novo projeto.
Na caixa de diálogo Criar um novo projeto , selecione ASP.NET Core Web App (Razor Pages) e, em seguida, selecione Next.
Na caixa de diálogo Configurar o novo projeto, digite SignalRChat para nome do projeto. É importante nomear o projeto SignalRChat, incluindo a correta capitalização, para que os namespaces correspondam ao código no tutorial.
Selecione Avançar.
Na caixa de diálogo Informações adicionais , selecione .NET 8.0 (Suporte de longo prazo) e, em seguida, selecione Criar.
Adicionar a biblioteca de cliente SignalR
A SignalR biblioteca de servidores está incluída na estrutura compartilhada ASP.NET Core. A biblioteca de cliente JavaScript não é incluída automaticamente no projeto. Para este tutorial, use o Gerenciador de bibliotecas (LibMan) para obter a biblioteca cliente do unpkg.
unpkgé uma rede de entrega de conteúdo rápida e global para tudo no npm.
No Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Adicionar>Client-Side Biblioteca.
Na caixa de diálogo Adicionar Client-Side Biblioteca :
- Selecione unpkg para Provedor
- Insira
@microsoft/signalr@latestpara Biblioteca. - Selecione Escolher arquivos específicos, expanda a pasta dist/browser e selecione
signalr.jsesignalr.min.js. -
Defina o Local de Destino como
wwwroot/js/signalr/. - Selecione Instalar.
O LibMan cria uma wwwroot/js/signalr pasta e copia os arquivos selecionados para ela.
Criar um SignalR hub
Um hub é uma classe que serve como um pipeline de alto nível que lida com a comunicação cliente-servidor.
Na pasta do projeto SignalRChat, crie uma Hubs pasta.
Hubs Na pasta, crie a ChatHub classe com o seguinte código:
using Microsoft.AspNetCore.SignalR;
namespace SignalRChat.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
A ChatHub classe herda da SignalRHub classe. A Hub classe gerencia conexões, grupos e mensagens.
O SendMessage método pode ser chamado por um cliente conectado para enviar uma mensagem a todos os clientes. O código do cliente JavaScript que chama o método é mostrado posteriormente no tutorial.
SignalR O código é assíncrono para fornecer escalabilidade máxima.
Configurar SignalR
O SignalR servidor deve ser configurado para passar SignalR solicitações para SignalR. Adicione o seguinte código realçado ao arquivo Program.cs.
using SignalRChat.Hubs;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddSignalR();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.MapHub<ChatHub>("/chatHub");
app.Run();
O código destacado anteriormente adiciona SignalR aos sistemas de injeção de dependências e de roteamento do ASP.NET Core.
Adicionar SignalR código do cliente
Substitua o conteúdo em Pages/Index.cshtml pelo seguinte código:
@page
<div class="container">
<div class="row p-1">
<div class="col-1">User</div>
<div class="col-5"><input type="text" id="userInput" /></div>
</div>
<div class="row p-1">
<div class="col-1">Message</div>
<div class="col-5"><input type="text" class="w-100" id="messageInput" /></div>
</div>
<div class="row p-1">
<div class="col-6 text-end">
<input type="button" id="sendButton" value="Send Message" />
</div>
</div>
<div class="row p-1">
<div class="col-6">
<hr />
</div>
</div>
<div class="row p-1">
<div class="col-6">
<ul id="messagesList"></ul>
</div>
</div>
</div>
<script src="~/js/signalr/dist/browser/signalr.js"></script>
<script src="~/js/chat.js"></script>
A marcação anterior:
- Cria caixas de texto e um botão de envio.
- Cria uma lista com
id="messagesList"para exibir mensagens recebidas do SignalR hub. - Inclui referências de script a SignalR e o código da aplicação
chat.jsé criado na próxima etapa.
wwwroot/js Na pasta, crie um chat.js arquivo com o seguinte código:
"use strict";
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
//Disable the send button until connection is established.
document.getElementById("sendButton").disabled = true;
connection.on("ReceiveMessage", function (user, message) {
var li = document.createElement("li");
document.getElementById("messagesList").appendChild(li);
// We can assign user-supplied strings to an element's textContent because it
// is not interpreted as markup. If you're assigning in any other way, you
// should be aware of possible script injection concerns.
li.textContent = `${user} says ${message}`;
});
connection.start().then(function () {
document.getElementById("sendButton").disabled = false;
}).catch(function (err) {
return console.error(err.toString());
});
document.getElementById("sendButton").addEventListener("click", function (event) {
var user = document.getElementById("userInput").value;
var message = document.getElementById("messageInput").value;
connection.invoke("SendMessage", user, message).catch(function (err) {
return console.error(err.toString());
});
event.preventDefault();
});
O JavaScript anterior:
- Cria e inicia uma conexão.
- Adiciona ao botão de envio um manipulador que envia mensagens para o hub.
- Adiciona ao objeto de conexão um manipulador que recebe mensagens do hub e as adiciona à lista.
Executar o aplicativo
Selecione Ctrl+F5 para executar o aplicativo sem depuração.
Copie o URL da barra de endereço, abra outra instância ou guia do navegador e cole o URL na barra de endereço.
Escolha um navegador, insira um nome e uma mensagem e selecione o botão Enviar mensagem .
O nome e a mensagem são exibidos em ambas as páginas instantaneamente.
Tip
Se o aplicativo não funcionar, abra as ferramentas de desenvolvedor do navegador (F12) e vá para o console. Procure possíveis erros relacionados ao código HTML e JavaScript. Por exemplo, se signalr.js foi colocado em uma pasta diferente da direcionada, a referência a esse arquivo não funcionará, resultando em um erro 404 no console.
Se tiver ocorrido um ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY erro no Chrome, execute os seguintes comandos para atualizar o certificado de desenvolvimento:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Publicar no Azure
Para obter informações sobre como implantar no Azure, consulte Guia de início rápido: implantar um aplicativo Web ASP.NET. Para obter mais informações sobre o Serviço do Azure SignalR , consulte O que é o Serviço do Azure SignalR ?.
Próximos passos
Este tutorial ensina os conceitos básicos da criação de uma aplicação em tempo real usando SignalR. Você aprende a:
- Crie um projeto Web.
- Adicione a biblioteca do SignalR cliente.
- Crie um SignalR hub.
- Configure o projeto para usar SignalR.
- Adicione código que envia mensagens de qualquer cliente para todos os clientes conectados.
No final, você terá um aplicativo de bate-papo de trabalho:
Prerequisites
Visual Studio 2022 com a carga de trabalho de ASP.NET e desenvolvimento web .
Criar um projeto de aplicativo Web
Inicie o Visual Studio 2022 e selecione Criar um novo projeto.
Na caixa de diálogo Criar um novo projeto
Na caixa de diálogo Configurar o novo projeto, digite SignalRChat para nome do projeto. É importante nomear o projeto SignalRChat, incluindo a correta capitalização, para que os namespaces correspondam ao código no tutorial.
Selecione Avançar.
Na caixa de diálogo Informações adicionais , selecione .NET 7.0 (Suporte de Termo Padrão) e, em seguida, selecione Criar.
Adicionar a biblioteca de cliente SignalR
A SignalR biblioteca de servidores está incluída na estrutura compartilhada ASP.NET Core. A biblioteca de cliente JavaScript não é incluída automaticamente no projeto. Para este tutorial, use o Gerenciador de bibliotecas (LibMan) para obter a biblioteca cliente do unpkg.
unpkgé uma rede de entrega de conteúdo rápida e global para tudo no npm.
No Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Adicionar>Client-Side Biblioteca.
Na caixa de diálogo Adicionar Client-Side Biblioteca :
- Selecione unpkg para Provedor
- Insira
@microsoft/signalr@latestpara Biblioteca. - Selecione Escolher arquivos específicos, expanda a pasta dist/browser e selecione
signalr.jsesignalr.min.js. -
Defina o Local de Destino como
wwwroot/js/signalr/. - Selecione Instalar.
O LibMan cria uma wwwroot/js/signalr pasta e copia os arquivos selecionados para ela.
Criar um SignalR hub
Um hub é uma classe que serve como um pipeline de alto nível que lida com a comunicação cliente-servidor.
Na pasta do projeto SignalRChat, crie uma Hubs pasta.
Hubs Na pasta, crie a ChatHub classe com o seguinte código:
using Microsoft.AspNetCore.SignalR;
namespace SignalRChat.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
A ChatHub classe herda da SignalRHub classe. A Hub classe gerencia conexões, grupos e mensagens.
O SendMessage método pode ser chamado por um cliente conectado para enviar uma mensagem a todos os clientes. O código do cliente JavaScript que chama o método é mostrado posteriormente no tutorial.
SignalR O código é assíncrono para fornecer escalabilidade máxima.
Configurar SignalR
O SignalR servidor deve ser configurado para passar SignalR solicitações para SignalR. Adicione o seguinte código realçado ao arquivo Program.cs.
using SignalRChat.Hubs;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddSignalR();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.MapHub<ChatHub>("/chatHub");
app.Run();
O código destacado anteriormente adiciona SignalR aos sistemas de injeção de dependências e de roteamento do ASP.NET Core.
Adicionar SignalR código do cliente
Substitua o conteúdo em Pages/Index.cshtml pelo seguinte código:
@page
<div class="container">
<div class="row p-1">
<div class="col-1">User</div>
<div class="col-5"><input type="text" id="userInput" /></div>
</div>
<div class="row p-1">
<div class="col-1">Message</div>
<div class="col-5"><input type="text" class="w-100" id="messageInput" /></div>
</div>
<div class="row p-1">
<div class="col-6 text-end">
<input type="button" id="sendButton" value="Send Message" />
</div>
</div>
<div class="row p-1">
<div class="col-6">
<hr />
</div>
</div>
<div class="row p-1">
<div class="col-6">
<ul id="messagesList"></ul>
</div>
</div>
</div>
<script src="~/js/signalr/dist/browser/signalr.js"></script>
<script src="~/js/chat.js"></script>
A marcação anterior:
- Cria caixas de texto e um botão de envio.
- Cria uma lista com
id="messagesList"para exibir mensagens recebidas do SignalR hub. - Inclui referências de script a SignalR e o código da aplicação
chat.jsé criado na próxima etapa.
wwwroot/js Na pasta, crie um chat.js arquivo com o seguinte código:
"use strict";
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
//Disable the send button until connection is established.
document.getElementById("sendButton").disabled = true;
connection.on("ReceiveMessage", function (user, message) {
var li = document.createElement("li");
document.getElementById("messagesList").appendChild(li);
// We can assign user-supplied strings to an element's textContent because it
// is not interpreted as markup. If you're assigning in any other way, you
// should be aware of possible script injection concerns.
li.textContent = `${user} says ${message}`;
});
connection.start().then(function () {
document.getElementById("sendButton").disabled = false;
}).catch(function (err) {
return console.error(err.toString());
});
document.getElementById("sendButton").addEventListener("click", function (event) {
var user = document.getElementById("userInput").value;
var message = document.getElementById("messageInput").value;
connection.invoke("SendMessage", user, message).catch(function (err) {
return console.error(err.toString());
});
event.preventDefault();
});
O JavaScript anterior:
- Cria e inicia uma conexão.
- Adiciona ao botão de envio um manipulador que envia mensagens para o hub.
- Adiciona ao objeto de conexão um manipulador que recebe mensagens do hub e as adiciona à lista.
Executar o aplicativo
Selecione Ctrl+F5 para executar o aplicativo sem depuração.
Copie o URL da barra de endereço, abra outra instância ou guia do navegador e cole o URL na barra de endereço.
Escolha um navegador, insira um nome e uma mensagem e selecione o botão Enviar mensagem .
O nome e a mensagem são exibidos em ambas as páginas instantaneamente.
Tip
Se o aplicativo não funcionar, abra as ferramentas de desenvolvedor do navegador (F12) e vá para o console. Procure possíveis erros relacionados ao código HTML e JavaScript. Por exemplo, se signalr.js foi colocado em uma pasta diferente da direcionada, a referência a esse arquivo não funcionará, resultando em um erro 404 no console.
Se tiver ocorrido um ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY erro no Chrome, execute os seguintes comandos para atualizar o certificado de desenvolvimento:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Publicar no Azure
Para obter informações sobre como implantar no Azure, consulte Guia de início rápido: implantar um aplicativo Web ASP.NET. Para obter mais informações sobre o Serviço do Azure SignalR , consulte O que é o Serviço do Azure SignalR ?.
Próximos passos
Este tutorial ensina os conceitos básicos da criação de uma aplicação em tempo real usando SignalR. Você aprende a:
- Crie um projeto Web.
- Adicione a biblioteca do SignalR cliente.
- Crie um SignalR hub.
- Configure o projeto para usar SignalR.
- Adicione código que envia mensagens de qualquer cliente para todos os clientes conectados.
No final, você terá um aplicativo de bate-papo de trabalho:
Prerequisites
- Visual Studio 2022 com a carga de trabalho de ASP.NET e desenvolvimento web .
- SDK do .NET 6
Criar um projeto de aplicativo Web
Inicie o Visual Studio 2022 e selecione Criar um novo projeto.
Na caixa de diálogo Criar um novo projeto
Na caixa de diálogo Configurar o novo projeto, digite SignalRChat para nome do projeto. É importante nomear o projeto SignalRChat, incluindo a correta capitalização, para que os namespaces correspondam ao código no tutorial.
Selecione Avançar.
Na caixa de diálogo Informações adicionais, selecione .NET 6.0 (Suporte de longo prazo) e, em seguida, selecione Criar.
Adicionar a biblioteca de cliente SignalR
A SignalR biblioteca de servidores está incluída na estrutura compartilhada ASP.NET Core. A biblioteca de cliente JavaScript não é incluída automaticamente no projeto. Para este tutorial, use o Gerenciador de bibliotecas (LibMan) para obter a biblioteca cliente do unpkg.
unpkgé uma rede de entrega de conteúdo rápida e global para tudo no npm.
No Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Adicionar>Client-Side Biblioteca.
Na caixa de diálogo Adicionar Client-Side Biblioteca :
- Selecione unpkg para Provedor
- Insira
@microsoft/signalr@latestpara Biblioteca. - Selecione Escolher arquivos específicos, expanda a pasta dist/browser e selecione
signalr.jsesignalr.min.js. -
Defina o Local de Destino como
wwwroot/js/signalr/. - Selecione Instalar.
O LibMan cria uma wwwroot/js/signalr pasta e copia os arquivos selecionados para ela.
Criar um SignalR hub
Um hub é uma classe que serve como um pipeline de alto nível que lida com a comunicação cliente-servidor.
Na pasta do projeto SignalRChat, crie uma Hubs pasta.
Hubs Na pasta, crie a ChatHub classe com o seguinte código:
using Microsoft.AspNetCore.SignalR;
namespace SignalRChat.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
A ChatHub classe herda da SignalRHub classe. A Hub classe gerencia conexões, grupos e mensagens.
O SendMessage método pode ser chamado por um cliente conectado para enviar uma mensagem a todos os clientes. O código do cliente JavaScript que chama o método é mostrado posteriormente no tutorial.
SignalR O código é assíncrono para fornecer escalabilidade máxima.
Configurar SignalR
O SignalR servidor deve ser configurado para passar SignalR solicitações para SignalR. Adicione o seguinte código realçado ao arquivo Program.cs.
using SignalRChat.Hubs;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddSignalR();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.MapHub<ChatHub>("/chatHub");
app.Run();
O código destacado anteriormente adiciona SignalR aos sistemas de injeção de dependências e de roteamento do ASP.NET Core.
Adicionar SignalR código do cliente
Substitua o conteúdo em Pages/Index.cshtml pelo seguinte código:
@page
<div class="container">
<div class="row p-1">
<div class="col-1">User</div>
<div class="col-5"><input type="text" id="userInput" /></div>
</div>
<div class="row p-1">
<div class="col-1">Message</div>
<div class="col-5"><input type="text" class="w-100" id="messageInput" /></div>
</div>
<div class="row p-1">
<div class="col-6 text-end">
<input type="button" id="sendButton" value="Send Message" />
</div>
</div>
<div class="row p-1">
<div class="col-6">
<hr />
</div>
</div>
<div class="row p-1">
<div class="col-6">
<ul id="messagesList"></ul>
</div>
</div>
</div>
<script src="~/js/signalr/dist/browser/signalr.js"></script>
<script src="~/js/chat.js"></script>
A marcação anterior:
- Cria caixas de texto e um botão de envio.
- Cria uma lista com
id="messagesList"para exibir mensagens recebidas do SignalR hub. - Inclui referências de script a SignalR e o código da aplicação
chat.jsé criado na próxima etapa.
wwwroot/js Na pasta, crie um chat.js arquivo com o seguinte código:
"use strict";
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
//Disable the send button until connection is established.
document.getElementById("sendButton").disabled = true;
connection.on("ReceiveMessage", function (user, message) {
var li = document.createElement("li");
document.getElementById("messagesList").appendChild(li);
// We can assign user-supplied strings to an element's textContent because it
// is not interpreted as markup. If you're assigning in any other way, you
// should be aware of possible script injection concerns.
li.textContent = `${user} says ${message}`;
});
connection.start().then(function () {
document.getElementById("sendButton").disabled = false;
}).catch(function (err) {
return console.error(err.toString());
});
document.getElementById("sendButton").addEventListener("click", function (event) {
var user = document.getElementById("userInput").value;
var message = document.getElementById("messageInput").value;
connection.invoke("SendMessage", user, message).catch(function (err) {
return console.error(err.toString());
});
event.preventDefault();
});
O JavaScript anterior:
- Cria e inicia uma conexão.
- Adiciona ao botão de envio um manipulador que envia mensagens para o hub.
- Adiciona ao objeto de conexão um manipulador que recebe mensagens do hub e as adiciona à lista.
Executar o aplicativo
Pressione CTRL+F5 para executar a aplicação sem depuração.
Copie o URL da barra de endereço, abra outra instância ou guia do navegador e cole o URL na barra de endereço.
Escolha um navegador, insira um nome e uma mensagem e selecione o botão Enviar mensagem .
O nome e a mensagem são exibidos em ambas as páginas instantaneamente.
Tip
Se o aplicativo não funcionar, abra as ferramentas de desenvolvedor do navegador (F12) e vá para o console. Procure possíveis erros relacionados ao código HTML e JavaScript. Por exemplo, se signalr.js foi colocado em uma pasta diferente da direcionada, a referência a esse arquivo não funcionará, resultando em um erro 404 no console.
Se tiver ocorrido um ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY erro no Chrome, execute os seguintes comandos para atualizar o certificado de desenvolvimento:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Publicar no Azure
Para obter informações sobre como implantar no Azure, consulte Guia de início rápido: implantar um aplicativo Web ASP.NET. Para obter mais informações sobre o Serviço do Azure SignalR , consulte O que é o Serviço do Azure SignalR ?.
Próximos passos
Este tutorial ensina os conceitos básicos da criação de uma aplicação em tempo real usando SignalR. Você aprende a:
- Crie um projeto Web.
- Adicione a biblioteca do SignalR cliente.
- Crie um SignalR hub.
- Configure o projeto para usar SignalR.
- Adicione código que envia mensagens de qualquer cliente para todos os clientes conectados.
No final, você terá um aplicativo de bate-papo de trabalho:
Prerequisites
- Visual Studio 2019 16.4 ou posterior com a carga de trabalho de desenvolvimento Web e ASP.NET
- SDK do .NET Core 3.1
Criar um projeto de aplicativo Web
- No menu, selecione Arquivo > Novo Projeto.
- Na caixa de diálogo Criar um novo projeto, selecione Aplicação Web ASP.NET Coree, em seguida, selecione Avançar.
- Na caixa de diálogo Configurar seu novo projeto , nomeie o projeto como SignalRChat e selecione Criar.
- Na caixa de diálogo Criar um novo aplicativo Web ASP.NET Core , selecione .NET Core e ASP.NET Core 3.1.
- Selecione Aplicativo Web para criar um projeto que usa Razor Páginas e, em seguida, selecione Criar.
Adicionar a biblioteca de cliente SignalR
A SignalR biblioteca do servidor está incluída na estrutura compartilhada do ASP.NET Core 3.1. A biblioteca de cliente JavaScript não é incluída automaticamente no projeto. Para este tutorial, você usa o Gerenciador de bibliotecas (LibMan) para obter a biblioteca de cliente do unpkg. unpkg é uma rede de distribuição de conteúdo (CDN) que pode entregar qualquer coisa encontrada no npm, o gerenciador de pacotes Node.js.
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Adicionar>Client-Side Biblioteca.
- Na caixa de diálogo Adicionar Biblioteca Client-Side , para Provedor , selecione unpkg.
- Em Biblioteca, digite
@microsoft/signalr@latest. - Selecione Escolher arquivos específicos, expanda a pasta dist/browser e selecione
signalr.jsesignalr.min.js. - Defina o local de destino como wwwroot/js/signalr/
- Selecione Instalar
O LibMan cria uma pasta wwwroot/js/signalr e copia os arquivos selecionados para ela.
Criar um SignalR hub
Um hub é uma classe que serve como um pipeline de alto nível que lida com a comunicação cliente-servidor.
- Na pasta do projeto SignalRChat, crie uma pasta Hubs .
- Na pasta Hubs , crie um
ChatHub.csarquivo com o seguinte código:
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
namespace SignalRChat.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
A ChatHub classe herda da SignalRHub classe. A Hub classe gerencia conexões, grupos e mensagens.
O SendMessage método pode ser chamado por um cliente conectado para enviar uma mensagem a todos os clientes. O código do cliente JavaScript que chama o método é mostrado posteriormente no tutorial.
SignalR O código é assíncrono para fornecer escalabilidade máxima.
Configurar SignalR
O SignalR servidor deve ser configurado para passar SignalR solicitações para SignalR.
Adicione o seguinte código realçado ao arquivo
Startup.cs.using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.HttpsPolicy; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using SignalRChat.Hubs; namespace SignalRChat { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddSignalR(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapHub<ChatHub>("/chatHub"); }); } } }Essas alterações adicionam SignalR aos sistemas de injeção de dependência e aos sistemas de roteamento do ASP.NET Core.
Adicionar SignalR código do cliente
Substitua o conteúdo em
Pages/Index.cshtmlpelo seguinte código:@page <div class="container"> <div class="row p-1"> <div class="col-1">User</div> <div class="col-5"><input type="text" id="userInput" /></div> </div> <div class="row p-1"> <div class="col-1">Message</div> <div class="col-5"><input type="text" class="w-100" id="messageInput" /></div> </div> <div class="row p-1"> <div class="col-6 text-end"> <input type="button" id="sendButton" value="Send Message" /> </div> </div> <div class="row p-1"> <div class="col-6"> <hr /> </div> </div> <div class="row p-1"> <div class="col-6"> <ul id="messagesList"></ul> </div> </div> </div> <script src="~/js/signalr/dist/browser/signalr.js"></script> <script src="~/js/chat.js"></script>O código anterior:
- Cria caixas de texto para nome e texto da mensagem e um botão de envio.
- Cria uma lista com
id="messagesList"para exibir mensagens recebidas do SignalR hub. - Inclui referências de script para SignalR e para o código da
chat.jsaplicação que irás criar na próxima etapa.
Na pasta wwwroot/js , crie um
chat.jsarquivo com o seguinte código:"use strict"; var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build(); //Disable send button until connection is established document.getElementById("sendButton").disabled = true; connection.on("ReceiveMessage", function (user, message) { var li = document.createElement("li"); document.getElementById("messagesList").appendChild(li); // We can assign user-supplied strings to an element's textContent because it // is not interpreted as markup. If you're assigning in any other way, you // should be aware of possible script injection concerns. li.textContent = `${user} says ${message}`; }); connection.start().then(function () { document.getElementById("sendButton").disabled = false; }).catch(function (err) { return console.error(err.toString()); }); document.getElementById("sendButton").addEventListener("click", function (event) { var user = document.getElementById("userInput").value; var message = document.getElementById("messageInput").value; connection.invoke("SendMessage", user, message).catch(function (err) { return console.error(err.toString()); }); event.preventDefault(); });O código anterior:
- Cria e inicia uma conexão.
- Adiciona ao botão de envio um manipulador que envia mensagens para o hub.
- Adiciona ao objeto de conexão um manipulador que recebe mensagens do hub e as adiciona à lista.
Executar o aplicativo
- Pressione CTRL+F5 para executar o aplicativo sem depuração.
- Copie o URL da barra de endereço, abra outra instância ou guia do navegador e cole o URL na barra de endereço.
- Escolha um navegador, insira um nome e uma mensagem e selecione o botão Enviar mensagem . O nome e a mensagem são exibidos em ambas as páginas instantaneamente.
Tip
Se o aplicativo não funcionar, abra as ferramentas de desenvolvedor do navegador (F12) e vá para o console. Poderá ver erros relacionados com o seu código HTML e JavaScript. Por exemplo, suponha que você coloque
signalr.jsem uma pasta diferente da direcionada. Nesse caso, a referência a esse arquivo não funcionará e você verá um erro 404 no console.
Se receberes o erro ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY no Chrome, executa estes comandos para atualizar o teu certificado de desenvolvimento:
dotnet dev-certs https --clean dotnet dev-certs https --trust
Publicar no Azure
Para obter informações sobre como implantar no Azure, consulte Guia de início rápido: implantar um aplicativo Web ASP.NET.