ASP.NET Core Blazor (Blazor)
Eintrag zuletzt aktualisiert am: 12.03.2020
ASP.NET Core Blazor Ist ein Single-Page-Web-Application (SPA) Framework im Browser von Microsoft.
Es gibt zwei Architekturmodelle in Blazor:
1. Das ursprünglich im Februar 2018 gezeigte Blazor ist weiterhin im Preview-Stadium und wird auch kurzfristig nicht erscheinen. Diese Form von Blazor nennt Microsoft zur Abgrenzung inzwischen Blazor Webassembly (zwischenzeitlich:
Client Side Blazor). Bei Blazor Webassembly läuft der .NET-Programmcode im
Webbrowser auf Basis der
Mono-Runtime (in Zukunft
.NET 5). Der .NET-Programmcode liegt in
MSIL vor, die
Mono-Runtime in Webassembly (
WASM) interpretiert das
MSIL. Eine Ahead-of-Time-Kompilierung von
MSIL nach
WASM ist geplant, aber noch nicht verfügbar.
2. Seit August 2018 gibt es auch "
Server Side Blazor", das inzwischen "
Blazor Server" heißt. Diese Variante ist am 23.9.2019 als Teil von
ASP.NET Core 3.0 erschienen und wird am 3.12.2019 (geplant) auch als Teil von
ASP.NET Core 3.1 in einer aktualisierten Form erscheinen. Eine
Blazor Server-Anwendung läuft nicht auf Basis von Webassembly im Browser, sondern – wie der Name auch ausdrückt – auf dem
Webserver in einem
ASP.NET Core-Prozess auf der
.NET Core Runtime. Dass der Benutzer dennoch das Erlebnis einer Single-Page-Web-Application bekommt, liegt am Einsatz von
ASP.NET Core SignalR, das die Benutzerinteraktionen mit der Webseite per Websocket zum Server sendet und die auf dem Server vorgenommenen Änderungen auf Document Object Model (DOM) zum Browser überträgt. Das dazu notwendige Virtual DOM auf dem
Webserver für jeden angeschlossenen Browser schränkt allerdings die Skalierbarkeit ein und verhindert die Offline-fähig der Anwendung.
Eigenschaften
Open Source (
https://github.com/aspnet/Blazor/)
Verwendet C# und die
Template-Syntax von
ASP.NET RazorBenutzeroberflächenbeschreibung in
HTML und
CSSArchitekturmodelle
Blazor Webassembly, alias:
Client Side BlazorBlazor Server, alias:
Server Side BlazorZeitplan
Erste Vorschauversion war am: 22.3.2018
28.4.2019: Blazor offizielles Projekt (nicht mehr experimentell)
Blazor Server erschienen in
.NET Core 3.0 am 23.9.2019, Update in
ASP.NET Core 3.1 am 3.12.2019
Blazor WebAssembly wird im Mai 2020 erscheinen.
Blazor Server (
Blazor Server App)
Zwischenzeitlicher Name: "
Razor Components"
Enthalten in
ASP.NET Core 3.0 seit Preview 2
Code läuft auf Server:
.NET Core, C#,
ASP.NET Core,
Razor-
Templates
Client:
HTML,
CSS, etwas
JavaScript von Microsoft, optional etwas eigenes
Component = .razor-Datei, optional mit .razor.cs
Component Packages, auch mit
Templated Components
Server hat ein Virtual-DOM des Browserinhalts für jeden angeschlossenen
WebbrowserEinzelne UI-Updates per
ASP.NET SignalR (über
Websockets)
"SPA light" (SPA-UI-Erlebnis)
Interaktion mit JS/TS + Zugriff auf Browser-
APIs möglich
Client Side Blazor / Blazor Webassembly App
Basiert auf WebAssembly und
MonoAusführung in Sandbox
Ist ein echtes, offline-fähiges Single-Page-Web-Application (SPA) Framework im Browser von Microsoft
Open Source [github.com/aspnet/Blazor]
Programmierung in C# und
Template-Syntax von
ASP.NET RazorLaufen wirklich im Browser, ohne Plugin, ohne Transpilation!
Auf Basis WebAssembly und
Mono- Mono CLR in WebAssembly kompiliert
- Virtual DOM/Spiegel-DOM zwischen WASM<->JS
Benutzeroberflächenbeschreibung in
HTML und
CSS (nicht
XAML!)
Ausführung in Sandbox
Kann, aber muss nicht mit
ASP.NET Core auf Server eingesetzt werden
Blazor WebAssembly (Blazor Client App) vs.
Blazor Server (
Server Side Blazor)
Nachdem Blazor lange Zeit den Status "experimentell" hatte, ist nun in
ASP.NET Core 3.0 (ein Teil von
.NET Core 3.0) ein Teil des Projekts erschienen:
Server Side Blazor. Der Name stellt aber schon klar, dass die
Razor-Vorlagen und der übrige Programmcode auf dem Server läuft. Dennoch sieht der Benutzer der Webseite keine Seitenwechsel, sondern eine SPA. Dies erreicht Microsoft mit seiner
JavaScript-Bibliothek blazor.server.js, die die Benutzerinteraktion per Websocket (realisiert via
ASP.NET Core SignalR) zum
Webserver funkt. Der
Webserver unterhält eine Kopie des Document Object Models eines jeden angeschlossenen
Webbrowser. Der Servercode manipuliert dieses Schatten-DOM und Blazor sendet alle Änderungen am DOM zum Browser, die blazor.server.js dann in die sichtbare Seite einbaut. Eine
Server Side Blazor-Anwendung ist folglich weder offline-fähig noch gut skalierbar, da der
Webserver entspricht viel Speicher- und Rechenlast hat. Dennoch zeigen erste Praxisprojekte, dass sich diese neue Architektur eignet für Webanwendungen mit kleinerer Benutzerzahl. Zudem besteht die Perspektive einer Umstellung auf Client-Side Blazor. Hier läuft dann der (fast) derselbe .NET-Programmcode auf Basis einer in Webassembly geschriebenen Variante von
Mono im
Webbrowser und belastet nicht mehr den
Webserver. Zudem ist Client-Side Blazor offline-fähig. Von Client-Side Blazor gibt weiterhin eine Preview-Version und noch keinen verkündeten Erscheinungstermin.