© RDK03/Shutterstock.com, © S&S Media
Web Services aufrufen mit Blazor

Mit Blazor zu Diensten


Blazor kann sowohl REST-Dienste/Web-APIs als auch Google-RPC-basierte Web Services nutzen. Dieser Artikel zeigt anhand eines Beispiels, wie Web-API- und gRPC-basierte Web Services in Blazor genutzt werden können und worauf dabei zu achten ist.

In Blazor-Server-basierten Webanwendungen kann man direkt auf Datenbankmanagementsysteme zugreifen, denn hier stehen alle .NET-APIs und Netzwerkprotokolle zur Verfügung. Blazor WebAssembly hingegen läuft in der Sandbox des Browsers. Man kann zwar Bibliotheken wie System.Data.dll und Microsoft.EntityFrameworkCore.SqlServer.dll in den Browser laden, aber damit keine Kommunikation zu einem Datenbankmanagementsystem aufbauen. SOAP und damit auch die Windows Communication Foundation (WCF) sind aus der Sicht von Microsoft nicht mehr zeitgemäß. Microsoft setzt stattdessen in .NET Core, .NET 5 und Blazor auf REST-Dienste/Web-APIs und Google Remote Procedure Call (gRPC).

Szenario

Im Folgenden wird die Verwendung von Web-API- und gRPC-basierten Web Services in Blazor anhand eines Beispiels mit zwei typischen Operationen vorgestellt:

  • GetFlight(string ort, int maxCount = 0): laden einer Menge von Flügen von einem Ort mit optionaler Mengenbegrenzung

  • SaveFlight(BO.Flug flug, bool force = false): speichern eines Flugobjekts, optional mit der Möglichkeit, zwischenzeitliche Änderungen anderer Benutzer gnadenlos zu überschreiben

Die Implementierung beider Operationen mit Hilfe von Entity Framework Core zeigt Listing 1. Auf den Abdruck der zugehörigen Entitätsklasse Flug sowie der Kontextklasse wird hier verzichtet. Der komplette Programmcode ist online [1] zu finden.

Listing 1: Businesslogik für die Entitäten des Typs Flug

using DAL; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; namespace WWWings.BL {  /// <summary>  /// Manager für Entitäten des Typs Flug  /// </summary> public class BLManager { public List<BO.Flug> GetFlight(string ort, int maxCount = 0) { EFContext ctx = new EFContext(); var query = (from f in ctx.Flug select f); if (!string.IsNullOrEmpty(ort)) query = query.Where(f=> f.Abflugort == ort); if (maxCount > 0) query = query.Take(maxCount); return query.ToList(); } public string SaveFlight(BO.Flug flug, bool force = false) { try { EFContext ctx = new EFContext(); if (force) { // Aktualisieren des Timestamps, so dass zwischenzeitliche Änderungen   // von anderen überschrieben werden var falt = ctx.Flug.AsNoTracking().SingleOrDefault(x => x.FlugNr == flug.Flug...

Exklusives Abo-Special

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang