SignalR em C# (Como funciona para desenvolvedores)
A web moderna prospera com a interatividade e o feedback em tempo real. Ao desenvolver aplicações responsivas, a funcionalidade web em tempo real é essencial. É aí que o SignalR se destaca. O ASP.NET Core SignalR é uma biblioteca que torna a adição de funcionalidades web em tempo real às suas aplicações mais simples do que você imagina.
Neste tutorial, embarcaremos numa jornada pelos conceitos básicos e nuances do SignalR. Vamos começar!
Introdução ao SignalR no ASP.NET Core
O ASP.NET Core SignalR fornece uma API para criar funcionalidades web em tempo real usando WebSockets e outras tecnologias, como eventos enviados pelo servidor. Não se limita apenas ao ASP.NET Core. Você pode usar o SignalR com diversos clientes, como um navegador ou um aplicativo móvel, garantindo que os clientes conectados sejam atualizados instantaneamente.
Configurando seu ambiente de desenvolvimento
Para começar, você precisará de:
- SDK do ASP.NET Core
- Visual Studio
Construindo o Hub SignalR
Em sua essência, o SignalR gira em torno de um hub SignalR, um ponto central para a interação entre o cliente e o servidor.
Crie um novo projeto ASP.NET Core. Agora, adicione uma nova classe e nomeie-a como ChatHub. Isso funcionará como nosso hub SignalR.
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
// Define a SignalR Hub class named ChatHub
public class ChatHub : Hub
{
// Asynchronous method to send messages
public async Task SendMessage(string user, string message)
{
// Send a message to all connected clients
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
// Define a SignalR Hub class named ChatHub
public class ChatHub : Hub
{
// Asynchronous method to send messages
public async Task SendMessage(string user, string message)
{
// Send a message to all connected clients
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Imports Microsoft.AspNetCore.SignalR
Imports System.Threading.Tasks
' Define a SignalR Hub class named ChatHub
Public Class ChatHub
Inherits Hub
' Asynchronous method to send messages
Public Async Function SendMessage(ByVal user As String, ByVal message As String) As Task
' Send a message to all connected clients
Await Clients.All.SendAsync("ReceiveMessage", user, message)
End Function
End Class
Na classe Startup, vamos integrar nosso hub.
public class Startup
{
// Configure services and add SignalR
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR(); // Add SignalR services
}
// Configure the app to use SignalR and map the hub
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Setup endpoint to route to ChatHub
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>("/chatHub");
});
}
}
public class Startup
{
// Configure services and add SignalR
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR(); // Add SignalR services
}
// Configure the app to use SignalR and map the hub
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Setup endpoint to route to ChatHub
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>("/chatHub");
});
}
}
Public Class Startup
' Configure services and add SignalR
Public Sub ConfigureServices(ByVal services As IServiceCollection)
services.AddSignalR() ' Add SignalR services
End Sub
' Configure the app to use SignalR and map the hub
Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
' Setup endpoint to route to ChatHub
app.UseEndpoints(Sub(endpoints)
endpoints.MapHub(Of ChatHub)("/chatHub")
End Sub)
End Sub
End Class
Implementação do lado do cliente
O SignalR é versátil. Embora este tutorial se concentre no ASP.NET Core e na biblioteca cliente JavaScript , o SignalR oferece suporte a vários clientes, desde .NET até Java.
Utilizando a biblioteca cliente SignalR
A biblioteca cliente SignalR permite que seu código do lado do cliente se conecte e se comunique diretamente com o lado do servidor. Para o nosso exemplo, vamos usar JavaScript.
Primeiro, adicione a biblioteca cliente JavaScript do SignalR:
<script src="https://cdn.jsdelivr.net/npm/@microsoft/signalr@3.1.8/dist/browser/signalr.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@microsoft/signalr@3.1.8/dist/browser/signalr.js"></script>
Agora você pode se conectar ao hub:
// Create a connection to the SignalR hub
const connection = new signalR.HubConnectionBuilder()
.withUrl("/chatHub") // The hub URL
.build();
// Start the connection
connection.start().catch(err => console.error(err.toString()));
// Setup a listener for receiving messages
connection.on("ReceiveMessage", (user, message) => {
console.log(`${user} says: ${message}`);
});
// Create a connection to the SignalR hub
const connection = new signalR.HubConnectionBuilder()
.withUrl("/chatHub") // The hub URL
.build();
// Start the connection
connection.start().catch(err => console.error(err.toString()));
// Setup a listener for receiving messages
connection.on("ReceiveMessage", (user, message) => {
console.log(`${user} says: ${message}`);
});
Este código simples do lado do cliente se conecta ao hub e fica à escuta de quaisquer mensagens transmitidas.
Funcionalidade em tempo real em ação
Envio de mensagens
Usando nossos trechos de código anteriores, tanto do lado do cliente quanto do servidor, o envio de mensagens é simples. Tanto o servidor quanto o cliente podem iniciar a comunicação.
Do lado do servidor:
// Send a message from the server to all connected clients
await Clients.All.SendAsync("ReceiveMessage", "Server", "Hello from server!");
// Send a message from the server to all connected clients
await Clients.All.SendAsync("ReceiveMessage", "Server", "Hello from server!");
' Send a message from the server to all connected clients
Await Clients.All.SendAsync("ReceiveMessage", "Server", "Hello from server!")
E do cliente:
// Send a message from the client to the server
connection.send("SendMessage", "Client", "Hello from client!")
.catch(err => console.error(err.toString()));
// Send a message from the client to the server
connection.send("SendMessage", "Client", "Hello from client!")
.catch(err => console.error(err.toString()));
Comunicação avançada em tempo real
O ASP.NET Core SignalR oferece recursos avançados de comunicação em tempo real:
- Agrupamento de conexões: Segmentar os clientes conectados em grupos, enviando mensagens para segmentos específicos.
- Gerenciamento de desconexões: Gerencie automaticamente as conexões e desconexões de clientes.
- Protocolo Binário: Embora o SignalR utilize um protocolo baseado em texto por padrão, ele também suporta um protocolo binário.
SignalR com o serviço Azure SignalR
Para funcionalidades escaláveis em tempo real, integre o serviço Azure SignalR . Este serviço totalmente gerenciado suporta um grande número de conexões simultâneas, tornando-o ideal para aplicativos de alta demanda.
Integrando o serviço Azure SignalR:
- Instale o SDK do Azure SignalR .
- Utilize o Azure Service Bus para suporte ao backplane.
- Ajuste a classe
Startuppara usar o Azure SignalR.
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Add Azure SignalR services
services.AddSignalR().AddAzureSignalR();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Use Azure SignalR and map hub with routes
app.UseAzureSignalR(routes =>
{
routes.MapHub<ChatHub>("/chatHub");
});
}
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Add Azure SignalR services
services.AddSignalR().AddAzureSignalR();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Use Azure SignalR and map hub with routes
app.UseAzureSignalR(routes =>
{
routes.MapHub<ChatHub>("/chatHub");
});
}
}
Public Class Startup
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Add Azure SignalR services
services.AddSignalR().AddAzureSignalR()
End Sub
Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
' Use Azure SignalR and map hub with routes
app.UseAzureSignalR(Sub(routes)
routes.MapHub(Of ChatHub)("/chatHub")
End Sub)
End Sub
End Class
Iron Suite aprimorando o SignalR com ferramentas .NET premium
Embora o ASP.NET Core SignalR forneça uma base excelente para funcionalidades web em tempo real, os desenvolvedores frequentemente buscam ferramentas para aprimorar a experiência e a funcionalidade em geral. É aí que entra em cena o pacote de bibliotecas Iron Software Suite of Libraries .
Iron Suite é um conjunto de bibliotecas .NET premium, projetado para turbinar seus aplicativos ASP.NET Core , incluindo aqueles que utilizam SignalR. Cada produto deste pacote oferece funcionalidades exclusivas, garantindo uma experiência de aplicação mais completa. Vamos analisar as opções disponíveis:
IronPDF

Saiba mais sobre os recursos do IronPDF, que permitem gerar, editar e ler arquivos PDF em seus aplicativos .NET . Imagine integrar o SignalR em um cenário onde uma equipe colabora em um documento em tempo real. À medida que as alterações são feitas, o documento pode ser convertido para PDF instantaneamente, com as atualizações sendo enviadas a todos os clientes conectados de forma transparente. A funcionalidade em tempo real do SignalR, combinada com os recursos do IronPDF, pode revolucionar as ferramentas de colaboração.
O IronPDF converte HTML, URLs e páginas da web completas em PDFs impressionantes, idênticos aos originais. É perfeito para salvar relatórios online, faturas ou qualquer informação da web que você queira guardar. Você está procurando converter HTML para PDF ? Experimente o IronPDF hoje mesmo!
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}
Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End Class
IronXL

Quando se trata de trabalhar com planilhas do Excel, o Explore IronXL Features é imbatível. No contexto empresarial, as planilhas desempenham um papel fundamental. A integração do SignalR com o IronXL significa que as equipes financeiras podem trabalhar em planilhas orçamentárias em tempo real, testemunhando as mudanças à medida que acontecem. Imagine um cenário em que os dados inseridos por diversos departamentos sejam reunidos em uma planilha centralizada do Excel, com atualizações em tempo real para todas as partes interessadas. Com essa combinação, a fusão da comunicação em tempo real com o gerenciamento dinâmico de planilhas torna-se realidade.
IronOCR

O reconhecimento óptico de caracteres (OCR) tornou-se um elemento essencial nas aplicações modernas. Veja o IronOCR em ação: ele permite que desenvolvedores .NET extraiam texto de imagens e documentos. Combinar isso com a funcionalidade em tempo real do SignalR pode ser revolucionário. Considere uma plataforma onde os usuários carregam imagens contendo dados textuais. O SignalR poderia ser usado para notificar os usuários em tempo real assim que o IronOCR processasse as imagens, tornando a extração de dados interativa e instantânea.
IronBarcode

O código de barras é essencial na gestão de estoque, sistemas de emissão de bilhetes e muito mais. Descubra como os recursos do IronBarcode simplificam a criação e a leitura de códigos de barras. Agora, imagine integrar isso com o SignalR em um sistema de gerenciamento de armazém. À medida que os itens são escaneados, o inventário é atualizado em tempo real, notificando os clientes conectados sobre os níveis de estoque e garantindo uma operação logística tranquila.
Conclusão

A fusão do ASP.NET Core SignalR com as poderosas ferramentas do Iron Suite promete uma experiência aprimorada tanto para desenvolvedores quanto para usuários finais. A funcionalidade web em tempo real deixa de ser apenas uma questão de comunicação e se torna uma ferramenta transformadora que, quando combinada com os recursos certos, como o Iron Suite, pode redefinir as aplicações interativas.
Vale destacar a proposta de valor oferecida pelo Iron Suite. Cada licença do produto começa em $799, fornecendo aos desenvolvedores um conjunto premium de recursos. No entanto, se você não tiver certeza sobre o compromisso imediato, cada produto oferece generosamente um período de teste gratuito dos produtos Iron Software . Isso permite que você teste as funcionalidades antes de tomar uma decisão.
E, se você está pensando em integrar várias ferramentas, temos ótimas notícias: você pode adquirir o pacote completo Iron Suite com valor agregado pelo preço de apenas dois produtos! Isso não só garante o melhor custo-benefício, como também fornece um conjunto de ferramentas completo para revolucionar seus aplicativos ASP.NET Core SignalR.
Perguntas frequentes
O que é SignalR e como ele aprimora aplicações web?
SignalR é uma biblioteca do ASP.NET Core que adiciona funcionalidades web em tempo real às aplicações, permitindo comunicação instantânea entre servidor e cliente. Isso resulta em aplicações web interativas e responsivas, possibilitando atualizações e feedback em tempo real.
Como posso configurar o SignalR em minha aplicação C#?
Para configurar o SignalR em uma aplicação C#, você precisa instalar o SDK do ASP.NET Core e usar o Visual Studio para desenvolvimento. Adicione os serviços do SignalR na classe Startup e mapeie os hubs para os endpoints para estabelecer a comunicação entre servidor e cliente.
Qual é o papel de um Hub SignalR na comunicação em tempo real?
Um Hub do SignalR atua como um componente central que facilita a comunicação entre o servidor e os clientes conectados. Ele permite o envio e o recebimento de mensagens em tempo real, tornando-se uma parte fundamental da funcionalidade do SignalR.
Como posso lidar com mensagens em tempo real no SignalR?
A troca de mensagens em tempo real no SignalR pode ser gerenciada criando-se um hub no servidor e um script no lado do cliente. O JavaScript do lado do cliente estabelece uma conexão com o hub e lida com o envio e recebimento de mensagens com métodos como connection.on e connection.send .
Quais são alguns recursos avançados do SignalR?
O SignalR oferece recursos avançados, como o agrupamento de conexões para segmentar a comunicação, o tratamento adequado de desconexões de clientes e o suporte a protocolos binários para capacidades aprimoradas de comunicação em tempo real.
Como o serviço Azure SignalR ajuda a dimensionar aplicações?
O serviço Azure SignalR permite que os aplicativos sejam dimensionados, suportando um grande número de conexões simultâneas. Isso envolve a instalação do SDK do Azure SignalR e a configuração da classe Startup para aproveitar a infraestrutura do Azure para comunicação escalável em tempo real.
Como o IronPDF pode ser usado para gerar PDFs em uma aplicação SignalR?
O IronPDF pode ser usado em uma aplicação SignalR para gerar documentos PDF convertendo conteúdo HTML. O método RenderHtmlAsPdf do IronPDF permite a geração de PDFs de forma transparente, que pode ser integrada com atualizações em tempo real no SignalR.
Quais são os benefícios que o IronXL traz para as aplicações SignalR?
O IronXL aprimora as aplicações SignalR ao permitir a manipulação de arquivos Excel. Ele possibilita a criação, leitura e modificação de documentos Excel dentro da sua aplicação, fornecendo recursos adicionais de processamento de dados, além de funcionalidades em tempo real.
O IronOCR pode ser integrado em aplicações SignalR para reconhecimento de texto?
Sim, o IronOCR pode ser integrado a aplicações SignalR para realizar o Reconhecimento Óptico de Caracteres (OCR). Isso permite a extração de texto em tempo real de imagens, aprimorando as aplicações com recursos de reconhecimento de texto dinâmico.
Qual o potencial de utilização do IronBarcode em aplicações SignalR?
O IronBarcode pode ser usado em aplicações SignalR para gerar e ler códigos de barras em tempo real. Essa funcionalidade é benéfica para aplicações que exigem processamento dinâmico de códigos de barras e gerenciamento de dados em tempo real.




