Ab C# 9 können Werte mit Relational Patterns geprüft werden:
<
kleiner als
>
grösser als
<=
kleiner oder gleich
>=
grösser oder gleich
Dazu nun ein Code Beispiel:
using System;
namespace ConsoleApp2
{
class Program
{
public class Animal
{
public string Name { get; set; }
public int Weight { get; set; }
public int YearOfBirth { get; set; }
}
static void Main(string[] args)
{
var animal = new Animal()
{
Name = "Tiger"
,Weight = 300
,YearOfBirth = 2016
};
if (animal is Animal { Weight: > 200 } animalWeightMoreThen200)
{
Console.WriteLine($"Animal is more then 200kg! " +
$"Weight: {animalWeightMoreThen200.Weight}kg");
}
}
}
}
Wir haben ein Objekt Animal. Bevor wir mit diesem Objekt arbeiten, prüfen wir, ob es vom Typ Animal ist. Mit einem “Relational Pattern” können wir nun auch sicherstellen, dass unser Tier mehr als 200 kg wiegt, bevor wir damit arbeiten.
Pattern Combinators
Seit C# 9 haben wir nun auch die Möglichkeit mehrere Patterns zu kombinieren. Dazu haben wir folgende Möglichkeiten:
and
und
or
oder
not
nicht
Dazu nun ein Code Beispiel:
using System;
namespace ConsoleApp2
{
class Program
{
public class Animal
{
public string Name { get; set; }
public int Weight { get; set; }
public int YearOfBirth { get; set; }
}
static void Main(string[] args)
{
var animal = new Animal()
{
Name = "Tiger"
, Weight = 299
, YearOfBirth = 2016
};
if (animal is Animal { Weight: > 200 and < 300,
Name: "Tiger" } tigerWeightBetween200And300)
{
Console.WriteLine($"The tiger weight is between 200kg and 300kg! " +
$"Weight: {tigerWeightBetween200And300.Weight}kg");
}
}
}
}
Wir haben ein Objekt Animal. Bevor wir mit diesem Objekt arbeiten, prüfen wir, ob es vom Typ Animal ist. Mit den kombinierten “Relational Patterns” können wir nun auch sicherstellen, dass unser Tier mehr als 200 kg und weniger als 300 kg wiegt und der Name Tiger ist, bevor wir damit arbeiten.
Ab der Version 1.6 des Raspberry Pi Imager kann mit der Hilfe der neuen Tastenkombination das Image für den Raspberry Pi zusätzlich konfiguriert werden.
ctrl + shift + x
Diese neue Tastenkombination erlaubt die Vorab-Konfiguration von SSH und WLAN sowie das Setzen der Spracheinstellungen und das festlegen des Hostnamen. Wird der Raspberry Pi an einem Monitor betrieben, hat man nun auch die Möglichkeit, den “Overscan” zu deaktivieren. Dadurch wird der standardmässige schwarze Rahmen um das Bild ausgeschaltet.
Da es sich um einen Ubuntu Server Version 18.04 LTS (End of Life: April 2023) handelt, muss zuerst das PPA von “ondrej/php” hinzugefügt werden. Darin sind sämtliche benötigten PHP Packages / Extensions der Version 7.4 enthalten. Zusätzlich braucht es für den Apache2 noch “ondrej/apache2”.
Mit der Webplattform Microsoft Learn bietet Microsoft viele verschiedene Module und Lernpfade (praktische Übungen), um sich mit den aktuellen Microsoft Technologien kostenlos weiterbilden zu können.
Das Einzige, was man dazu braucht, ist ein Microsoft Learn-Konto. Die Module sind versehen mit einem theoretischen und einem praktischen Teil, welcher dann mit der Hilfe einer Sandbox (Azure Shell mit allen benötigten Tools) durchgeführt werden kann.
Es gibt auch sogenannte “30 Days to Learn It-Herausforderungen”. Dabei werden mehrere Module zu einer Sammlung zusammen gefasst. Beispiel die “Cloud Skills Challenge – Azure Developer”. Sie besteht aus 35 Module, für die man laut Microsoft ca. 28 Std. und 16 Min. Zeit investieren muss. Beendet man die Herausforderung innerhalb dieser 30 Tage, erhält man eine 50% Gutschrift für ein “Microsoft Certification exam”.
Was bedeuten Authentisierung, Authentifizierung und Autorisierung schon wieder?
Alle 3 Begriffe beschreiben einen unterschiedlichen Schritt bei der Überprüfung einer bestimmten Identität und dem Gewähren von Zugriffsrechten.
Authentisierung – das aktive Nachweisen einer Identität
Authentifizierung – die Prüfung des Nachweises auf seine Korrektheit
Autorisierung – den Zugiff auf die erlaubten Ressourcen freigeben
Beispiel: Flugreise
Person authentisiert sich mit ihrem Pass und Ticket am Flughafen
Die Person wird anhand ihrer Dokumente am Schalter authentifiziert
Durch das Ticket wird die Person autorisiert am Flug teilzunehmen
Beispiel: Anmeldung Webanwendung
Person authentisiert sich mit der Eingabe ihres Benutzernamens und Passworts
Server / Dienst überprüft Benutzername und Passwort Kombination und authentifiziert die Person
Gleichzeitig erhält die Person ihre zugewiesenen Berechtigungen. Server / Dienst autorisiert die Person auf zugewiesene Module und Funktionen (Bsp: Benutzerverwaltung, Auflistung offener Rechnungen usw.)
Init only Properties sind unveränderbare Datenobjekte, die einmal initialisiert den Zustand nicht mehr ändern können. Dazu verwendet man das Schlüsselwort init anstelle von set.
// Auto property
public Guid MyId { get; init; }
// property
private Guid myId;
public Guid MyId{
get {return myId;}
init {myId = value;}
}
// lambda property
private Guid myId;
public Guid MyId{
get => myId;
init => myId = value;
}
Wird nun die “MyId” einmal zugewiesen, kann diese nicht mehr versehentlich überschrieben werden. “MyId” kann nur bei der Objektinitialisierung oder über den Konstruktor festgelegt werden.
// object class with the secret
public class MySecret
{
public MySecret()
{
}
public MySecret(Guid myId)
{
MyId = myId;
}
public Guid MyId { get; init; }
}
// Example 1
// create an object with the secret
// assign with object initializer
MySecret mySecret = new MySecret()
{
MyId = Guid.NewGuid()
};
// Example 2
// create an object with the secret
// assign in the instance constructor
MySecret mySecret2 = new MySecret(Guid.NewGuid());
Rollenbasierte Zugriffssteuerung von Azure Im Azure-Portal -> Zugriffssteuerung (IAM)
1. Sicherheitsprinzipal (wer: Benutzer, Gruppe oder Anwendung) 2. Rollendefinition (was: Sammlung von Berechtigung – Besitzer, Mitwirkender, Leser oder Benutzerzugriffsadministrator) 3. Bereich (wo: Verwaltungsgruppe, Abonnement, Ressourcengruppe oder Ressource)
Eine Erweiterung der Azure Functions. Mithilfe von Durable Functions können komplexe zustandsbehaftete Funktionen in einer serverlosen Umgebung implementiert werden. (Workflows)
– Ereignisgesteuerten Code – Funktionen miteinander verketten – Funktionen orchestrieren und koordinieren und die Reihenfolge bestimmen – Synchron als auch asynchron
Azure-Dienst, der cloudbasierte Warteschlangen implementiert. Anwendungskomponenten greifen mithilfe einer REST-API oder einer von Azure bereitgestellten Clientbibliothek auf eine Warteschlange zu. Eine Nachricht in der Warteschlange ist ein Bytearray von bis zu 64KB.
Enthält alle Azure Storage-Datenobjekte: Blobs, Dateien, Warteschlangen, Tabellen und Datenträger. Das Speicherkonto stellt einen eindeutigen Namespace für Ihre Azure Storage-Daten bereit, auf den von jedem Ort der Welt aus über HTTP oder HTTPS zugegriffen werden kann.
Eine SAS ist eine Zeichenfolge, die ein Sicherheitstoken enthält, das einem URI angefügt werden kann. Zweck, bei nicht vertrauenswürdige Clients. Die SAS definiert die Berechtigungen und den Zugriffszeitraum des Clients.
Eine Workload ist ein vorkonfiguriertes Bündel von Tools innerhalb von Visual Studio, das zusammengefasst wurde, um Entwicklern zu ermöglichen, bestimmte Arten von Anwendungen zu erstellen, bestimmte Entwicklungssprachen zu verwenden oder für bestimmte Plattformen zu entwickeln.
Definiert die Computeressourcen, welche die App in Anspruch nehmen wird, wo sich diese Ressourcen befinden, wie viele zusätzliche Ressourcen der Plan in Anspruch nehmen kann und welcher Tarif verwendet wird.
Nachrichten auf drei verschiedene Arten austauschen: über Warteschlangen, Themen und Relays
Ist die Kommunikation ein Ereignis? Falls ja, Event Grid oder Event Hubs verwenden.
Soll eine einzelne Nachricht an mehrere Ziele übermittelt werden? Falls ja, verwenden Sie ein Service Bus-Thema. Falls nicht, verwenden Sie eine Warteschlange.
Akronym aus seinen Komponenten: MongoDB, Express.js, AngularJS und Node.js
MongoDB zum Speichern von Informationen Express zum Weiterleiten aller HTTP-Anforderungen an den entsprechenden Handler AngularJS zum Verknüpfen der Benutzeroberfläche mit der Geschäftslogik des Programms Node.js zum Hosten der serverseitigen App
Beim Versuch eine .NET 5 Webapplikation zu debuggen (Cloud Explorer -> App Service -> Attach Debugger) wurde mir immer folgende Meldung angezeigt:
Folgendes wurde überprüft:
Remotedebuggen ist aktiviert (App Service <Name> -> Konfiguration -> Allgemeine Einstellungen -> Debuggen)
Published wurde die “Debug” Konfiguration
Korrektes Target Framework eingestellt
App Service ist erreichbar
Ursache
Nach einer Weile recherchieren im Netz habe ich folgende Erkenntnis erlangt:
Visual Studio schickt eine Initialisierungsmeldung an den Remote Debugger. Im Inhalt sind unteranderem installierte Komponenten des VS. Es scheint, dass bei manchen VS Installationen diese Meldung die erwartete Grösse überschreitet, was dann zu einem sofortigen Abbruch führt. Gemäss Microsoft wurde dies bereits behoben im “App Service image Version 93” jedoch noch nicht weltweit verteilt. Was nun aber fortlaufen passieren soll. (24.02.2021)
Mit Hilfe von Kudu kann dies bei der Webapplikation überprüft werden. Cloud Explorer -> App Service <Name> -> Open in Kudu
Test halber habe ich einen neuen App Service-Plan mit Standort USA erstellt. Eine Testapplikation published und das Debuggen gestartet. Und es hat funktioniert. Der Azure App Service war in der Version:
Was ist nun die Lösung?
Warten auf auf die “App Service image Version 93”
Auf einen anderen Standort ausweichen, wenn möglich
Als letzte Möglichkeit -> Als Workaround kann auch die Visual Studio Installation angepasst werden und nicht verwendete Komponenten deinstalliert werden (Habe ich selber nicht verifiziert)
Update (06.04.2021)
Das “App Service Image Version 93” ist jetzt auch an meinem verwendeten Standort angekommen und das Debuggen funktioniert wieder.