ASP.NET Core SignalR

Eintrag zuletzt aktualisiert am: 22.03.2023

ASP.NET Core SignalR ist die .NET Core-Variante von ASP.NET SignalR, die es seit .NET Core 2.0 (Jahr 2017) im modernen .NET gibt.

Die Bibliothek ASP.NET Core SignalR (Vorgänger im klassisches .NET Framework war: ASP.NET SignalR) erlaubt eine bidirektionale Kommunikation zwischen einem Client (oft ein Browser, aber auch anderen Anwendungsarten wie Desktop- und Konsolenanwendungen sind möglich) und einem Webserver. Somit kann nicht nur der Client eine Nachricht an den Webserver senden, sondern auch der Webserver die Clients benachrichtigen, z.B. eine kontinurliche Anzeige von Monitoring-Daten.

Abhängig von den Fähigkeiten der beteiligten Systeme werden die Nachrichten auf Basis von Websockets, Server-Sent Events (SSE) oder Long Polling übermittelt. Damit haben Entwickler und Benutzer nichts zu tun; ASP.NET Core SignalR entscheidet selbst zur Laufzeit über das Verfahren. Eine manuelle Vergabe durch den Softwareentwickler ist aber möglich.

Hinweis: Microsoft spricht von "Real Time"-Kommunikation, was aber im engeren Sinne des Begriffs "Real Time" nicht korrekt ist.
"ASP.NET Core SignalR is an open-source library that simplifies adding real-time web functionality to apps. Real-time web functionality enables server-side code to push content to clients instantly." [https://docs.microsoft.com/de-de/aspnet/core/signalr/introduction]

Server

NuGet-Paket: Microsoft.AspNetCore.SignalR

Clients

  • .NET via NuGet-Paket Microsoft.AspNetCore.SignalR.Client
  • Java (eingeschränkte Funktionen)
  • JavaScript (eingeschränkte Funktionen)

Implementierung

Webserver: Basisklasse Hub
  • definiert Methoden für Nachrichten
  • empfängt Nachrichten von Clients
  • verteilt Nachrichten nach frei programmierbaren Kriterien an registrierte Clients

Client: Klasse HubConnectionBuilder
  • registriert sich für Nachrichten beim Hub
  • Client sendet Nachricht an Hub

Transporttechniken bei ASP.NET Core SignalR

WebSockets
Server-Sent Events
Long Polling

--> Die Auswahl des besten Transportmechanismuses erfolgt automatisch durch ASP.NET Core SignalR auf Baiss der Fähigkeiten von Webbrowser und Webserver.

Serialisierung

Zur Serialisierung stehen in ASP.NET Core SignalR grundsätzlich die Formate JSON und MessagePack zur Verfügung. Bei einem Browser-basierten Client ist aber nur JSON nutzbar ("It's not possible to configure MessagePack serialization in the JavaScript client at this time." [https://github.com/dotnet/AspNetCore.Docs/blob/master/aspnetcore/signalr/configuration.md])