WebSocket-Bibliotheken für C# (.NET): SignalR, WebSocket4Net und der Client System.Net.WebSockets

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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.SignalR


Beispiel 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 WebSocket4Net


Beispiel 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

Empfehlungen