SignalR is a library for ASP.NET Core that enables real-time web functionality, allowing server-side code to push content to connected clients instantly. This is essential for applications that require live updates, such as chat applications, notifications, and collaborative tools. Below is a detailed guide on how to implement SignalR in an ASP.NET Core application, along with sample code.

1. Setting Up the Project

First, create a new ASP.NET Core Web Application project. You can do this using the .NET CLI or Visual Studio. For this example, we will create a project named SignalRChat.

2. Installing SignalR

To use SignalR, you need to install the SignalR NuGet package. You can do this by running the following command in the Package Manager Console:

        dotnet add package Microsoft.AspNetCore.SignalR    

3. Creating a SignalR Hub

A Hub is a central point in the SignalR API that handles connections, groups, and messaging. Create a new class named ChatHub in the Hubs folder:

        
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;

public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}

4. Configuring SignalR in Startup

Next, you need to configure SignalR in the Startup.cs file. Add the SignalR services and middleware:

        
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
services.AddControllers();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHub<ChatHub>("/chathub");
});
}

5. Creating the Client Side

On the client side, you need to add a reference to the SignalR JavaScript library. You can do this by adding the following script tag to your HTML file:

        
<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft.signalr/3.1.10/signalr.min.js"></script>

Then, establish a connection to the hub and define methods to send and receive messages:

        
var connection = new signalR.HubConnectionBuilder().withUrl("/chathub").build();

connection.on("ReceiveMessage", function (user, message) {
var msg = message.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
var encodedMsg = user + " says " + msg;
var li = document.createElement("li");
li.textContent = encodedMsg;
document.getElementById("messagesList").appendChild(li);
});

connection.start().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();
});

6. Running the Application

Now that everything is set up, you can run your application. Open your browser and navigate to the page where your SignalR client is hosted. Enter a username and message, then click the send button. The message will be broadcasted to all connected clients in real-time.

Conclusion

By following the steps outlined above, you have successfully implemented real-time communication in your ASP.NET Core application using SignalR. This powerful library simplifies the complexities of real-time web functionality, making it an essential tool for modern web applications.