WebSocket-Bibliotheken für C# (.NET): Echtzeit in Ihren Anwendungen
WebSocket ist ein Protokoll, das eine permanente bidirektionale Verbindung zwischen Client und Server ermöglicht. Im Ökosystem von C# (.NET) gibt es mehrere ausgereifte Bibliotheken für die Arbeit mit WebSocket, die sowohl für Serveranwendungen (ASP.NET Core) als auch für Clients (Desktop, Mobil, Konsole) geeignet sind. In diesem Artikel betrachten wir drei wichtige Werkzeuge: SignalR (High-Level-Framework), WebSocket4Net (plattformübergreifender Client) und das integrierte System.Net.WebSockets (Low-Level-API).
1. SignalR – universelles Framework für Echtzeit
SignalR ist ein Teil von ASP.NET Core, der die Arbeit mit WebSocket, Server-Sent Events und Long Polling abstrahiert. Es wählt automatisch den besten Transport und bietet eine praktische API zum Versenden von Nachrichten an Gruppen, einzelne Benutzer und alle verbundenen Clients.
Installation
dotnet add package Microsoft.AspNetCore.SignalRBeispiel Server (Hub)
using Microsoft.AspNetCore.SignalR;
public class ChatHub : Hub{ public async Task SendMessage(string user, string message) { // Sende Nachricht an alle verbundenen Clients await Clients.All.SendAsync("ReceiveMessage", user, message); }
public override async Task OnConnectedAsync() { await base.OnConnectedAsync(); Console.WriteLine($"Client verbunden: {Context.ConnectionId}"); }
public override async Task OnDisconnectedAsync(Exception? exception) { await base.OnDisconnectedAsync(exception); Console.WriteLine($"Client getrennt: {Context.ConnectionId}"); }}Beispiel Client (C#)
using Microsoft.AspNetCore.SignalR.Client;
var connection = new HubConnectionBuilder() .WithUrl("https://localhost:5001/chatHub") .Build();
connection.On<string, string>("ReceiveMessage", (user, message) =>{ Console.WriteLine($"{user}: {message}");});
await connection.StartAsync();await connection.InvokeAsync("SendMessage", "Bot", "Hallo, Welt!");2. WebSocket4Net – leichter Client für .NET Framework und .NET Core
WebSocket4Net ist eine unabhängige Bibliothek, die sowohl standardmäßige WebSockets (RFC 6455) als auch proprietäre Erweiterungen (z. B. WSS mit selbstsignierten Zertifikaten) unterstützt. Sie ist besonders nützlich für Anwendungen, die unter .NET Framework (Windows Forms, WPF) oder in Umgebungen mit eingeschränkter Unterstützung moderner APIs laufen.
Installation über NuGet
Install-Package WebSocket4NetBeispiel Client
using WebSocket4Net;
var ws = new WebSocket("wss://echo.websocket.org");
ws.Opened += (s, e) =>{ Console.WriteLine("Verbindung hergestellt"); ws.Send("Hallo, WebSocket!");};
ws.MessageReceived += (s, e) =>{ Console.WriteLine($"Empfangen: {e.Message}");};
ws.Closed += (s, e) =>{ Console.WriteLine("Verbindung geschlossen");};
ws.Error += (s, e) =>{ Console.WriteLine($"Fehler: {e.Exception.Message}");};
ws.Open();Console.ReadLine();3. System.Net.WebSockets – integrierte Low-Level-API
Ab .NET Framework 4.5 und in allen Versionen von .NET Core ist die integrierte Klasse System.Net.WebSockets.ClientWebSocket verfügbar. Sie erfordert keine Installation zusätzlicher Pakete und bietet volle Kontrolle über die Verbindung, erfordert jedoch manuelle Verwaltung von Puffern und asynchronen Operationen.
Beispiel Client mit ClientWebSocket
using System.Net.WebSockets;using System.Text;
public async Task ConnectAndSendAsync(string uri){ using var ws = new ClientWebSocket(); await ws.ConnectAsync(new Uri(uri), CancellationTok