Ir para o conteúdo do rodapé
AJUDA DO .NET

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:

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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>
HTML

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

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!")
$vbLabelText   $csharpLabel

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

Comunicação avançada em tempo real

O ASP.NET Core SignalR oferece recursos avançados de comunicação em tempo real:

  1. Agrupamento de conexões: Segmentar os clientes conectados em grupos, enviando mensagens para segmentos específicos.
  2. Gerenciamento de desconexões: Gerencie automaticamente as conexões e desconexões de clientes.
  3. 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:

  1. Instale o SDK do Azure SignalR .
  2. Utilize o Azure Service Bus para suporte ao backplane.
  3. Ajuste a classe Startup para 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
$vbLabelText   $csharpLabel

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

Signalr C# (Como funciona para desenvolvedores) Figura 1

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
$vbLabelText   $csharpLabel

IronXL

Signalr C# (Como funciona para desenvolvedores) Figura 2

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

Signalr C# (Como funciona para desenvolvedores) Figura 3

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

Signalr C# (Como funciona para desenvolvedores) Figura 4

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

Signalr C# (Como funciona para desenvolvedores) Figura 5

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.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim