Blazor Desktop
Eintrag zuletzt aktualisiert am: 24.11.2022
Mit
.NET 6.0 hatte Microsoft mit Blazor Desktop eine dritte Architektur in die Blazor-Familie eingeführt. Während bei
Blazor Server der C#-Programmcode auf einem
ASP.NET Core-fähigen
Webserver und bei
Blazor WebAssembly direkt in der WebAssembly Virtual Machine des Browsers läuft, ist bei Blazor Desktop der Host eine .NET-basierte Anwendung.
Die offiziell erste einsatzreife Version von Blazor Desktop ist erst am 23.5.2022 zusammen mit .NET
MAUI erschienen. Vorher war Blazor Desktop aber schon gut einsetzbar. Es gab aber in der RTM-Version noch einen kleinen Breaking Change. Dabei wurde AddBlazorWebView() ersetzt durch AddWindowsFormsBlazorWebView() und AddWpfBlazorWebView().
Als Host bei Blazor Desktop sind möglich:
Bei Blazor Desktop läuft die Blazor-Anwendung dabei nicht in einem
Webserver und auch nicht einer Webassembly-VM, sondern im gleichen
.NET 6.0-Prozess und sogar im gleichen
Thread wie die Desktop- bzw. Mobil-Anwendung. Es gibt also keine Prozesstrennung wie bei
Electron und damit auch keine Notwendigkeit des expliziten Nachrichtenverkehrs. In
Blazor Server übernimmt die Kommunikation zwischen dem .NET Code im Host und dem WebView-
Steuerelement ein "Native Interop
Channel", dessen Arbeit für die Entwickler völlig unsichtbar ist. Alle .NET-
APIs können direkt aufgerufen werden. Bei Blazor Desktop kommt also weder ein Web
API (wie bei
Blazor WebAssembly) noch SignalR (wie bei
Blazor Server) zum Einsatz. Wie bei
Blazor Server hat der Programmcode in Blazor Desktop vollen Zugriff auf alle Ressourcen des Betriebssystems.
Blazor Desktop kann also auch
Datenbankmanagementsysteme direkt ansprechen – sofern das Betriebssystem dies unterstützt. Das ist in Windows möglich, auf
Android und
iOS aber nicht, weil es dort die passenden Treiber nicht gibt. Auf Mobilbetriebssystemen kann man nur lokale Datenbanken (meist
SQLite) ansprechen.
Bei Blazor Desktop ist also – abhängig vom Betriebssystem – eine 2-Tier-Anwendung ohne Application Server/
Middleware möglich; Geschäftslogik und
Datenzugriffsschicht können im Client-Prozess laufen. Eine 3-Tier-Anwendung mit
Middleware, also dem Datenzugriff via
Webservices auf einen Application Server, ist natürlich immer auch möglich.
Blazor Desktop verwendet das gleiche
Komponentenkonzept (
Razor Components mit oder ohne Code-Behind-Datei) wie
Blazor WebAssembly und
Blazor Server. Eine Umstellung einer Blazor-Anwendung auf Blazor Desktop ist also einfach, egal ob diese mit
Blazor WebAssembly (3-Tier) oder
Blazor Server (2- oder 3-Tier) realisiert wurde. Lediglich der Startcode und die Startseite sind leicht verschieden in den drei Blazor-Architekturen. Darüberhinausgehende technische Unterschiede werden durch
Dependency Injection unterschiedlicher Dienste weitgehend wegabstrahiert, z.B. für die Navigation und die Interoperabilität mit
JavaScript.
In Blazor Desktop übernimmt die von Microsoft bereitgestellte
JavaScript-Bibliothek blazor.webview.js die Weitergabe der Browser-Interaktionen an die
Razor Component in Blazor sowie die Aktualisierung des
HTML-DOM im Browser. Eine Blazor Desktop-Anwendung kann beliebig viele native Fenster umfassen, in die Blazor-Anwendungen via WebView eingebettet sind.
Bei der
Programmiersprachenauswahl in Blazor Desktop ist der Entwickler auf C# reduziert, auch wenn
WPF und
Windows Forms ansonsten zusätzlich mit
Visual Basic .NET möglich wären. Allerdings gibt es von Microsoft-Seite Blazor nur mit C#. Das Projekt "Bolero" [
https://fsbolero.io] bietet zwar auch F# mit
Blazor WebAssembly an, allerdings nur im Browser.