ASP Core 3.1 inkl VueCLI mit mehreren VueApps verwenden

image_pdfimage_print

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.SpaServices;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Hosting;
using VueCliMiddleware;

namespace ASPMultipleVueSPA
{
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseRouting();

app.UseEndpoints(endpoints =>
{
endpoints.MapGet(“/”, async context =>
{
await context.Response.WriteAsync(“Hello World!”);
});

/*
* // Wichtig: In vue.config.js publicPath eintragen! z.B.
module.exports = {
publicPath: ‘/en/’
};
*/

endpoints.MapToVueCliProxy(
pattern: “en/{*path}”,
options: new SpaOptions { SourcePath = “ClientApp” },
npmScript: (System.Diagnostics.Debugger.IsAttached) ? “serve” : null,
port: 8080,
https: false,
runner: ScriptRunnerType.Npm,
regex: “Compiled successfully”,
forceKill: true,
wsl: false
);

endpoints.MapToVueCliProxy(
pattern: “fr/{*path}”, // Wichtig: In vue.config.js publicPath eintragen: publicPath: ‘/fr/’
options: new SpaOptions { SourcePath = “ClientApp2” },
npmScript: (System.Diagnostics.Debugger.IsAttached) ? “serve” : null,
port: 8081,
https: false,
runner: ScriptRunnerType.Npm,
regex: “Compiled successfully”,
forceKill: true,
wsl: false
);

});

}
}
}

0  

Backup alle Nicht System Datenbanken

image_pdfimage_print

Quelle: https://www.sqlshack.com/multiple-methods-for-scheduling-a-sql-server-backup-automatically/

0  

Openmediavault + Nextcloud auf Raspberry Pi installieren

image_pdfimage_print

Installation erfolgt von einem Windows Rechner.

Benötigt werden folgende Programme:

  1. SD Card Formatter: https://www.sdcard.org/downloads/formatter/
  2. Win32 Disk Imager: https://sourceforge.net/projects/win32diskimager/
  3. Raspberry Pi OS (32-bit) Lite Image: https://www.raspberrypi.org/downloads/raspberry-pi-os/
  4. KiTTY oder PuTTY (SSH Client) [Im folgenden Konsole genannt]: https://www.fosshub.com/KiTTY.html

Vorbereitung:

  1. Mit SD Card Formatter SD Karte formatieren
  2. Mit Win32 Disk Imager “Raspberry Pi OS (32-bit) Lite Image” auf SD Karte schreiben
  3. Auf der SD Karte im Root Verzeichnis eine Datei, mit Dateinamen “ssh”(ohne Dateiendung) anlegen
  4. SD Karte in Raspberry schieben, RasPi neustarten und IP Adresse über Router herausfinden
  5. In der Konsole mit “pi” und “raspberry” einloggen

Installation Webmin + Nextcloud:

Web einloggen https://192.168.178.45:10000/
mit pi und raspberry

Servers -> MySQL Database Server -> “Create new database” -> “nextcloud”
-> “User Permissions” -> oben “Create new user” ->
Radio auf leer und username eingeben “nextclouduser”
Password “Set to” und password eingeben
Hosts Radio auf leer und “localhost” eingeben
Permissions alles markieren
Navigations Menü: “Others” -> “File Manager” -> etc -> openal -> php -> 7.3 -> apache2 -> php.ini (r.Maustaste) -> editieren
-> memory_limit 2048 -> oben rechte Save Diskette
-> home -> pi -> “File” -> “Download from remote URL” ->
nextcloud.com/de/install/#instructions-server (r.Maustaste) auf download -> link kopieren
download -> r.Maustaste auf Datei und “Extract”
Ins Verzeichnis gehen -> Alle markieren -> Cut
var -> www -> html -> nextcloud Ordner erstellen und reinkopieren
html Ordner r.Maustaste -> Properties -> Change ownership -> Username, Group: “www-data”, recursive -> true

Navigations Menü: “System” -> “Bootup and Shutdown” -> apache2 -> “Restart”

####
Apache Port ändern auf z.B. 81. Damit OpenMediaVault auf Port 80 und 444 SSL installiert werden kann. Dies wird später zurück geändert
/etc/apache2/ports.conf

Nextcloud installieren
http://192.168.178.45/nextcloud/index.php

 

Installation OpenMediaVault:

    1. OpenMediaVault ist nun installiert. Wenn man die IP Adresse im Browser aufruft, sollte die WebUi erscheinen. Einzuloggen mit “admin” und “openmediavault”
    2. Standard Passowort ändern: Generel Settings -> Web Administrator Password
    3. SSH Zertifikat: Certifikates -> Tab SSH -> Add -> Irgendetwas eingeben. z.B. SSHCert -> Apply
    4. SSL Zertifikat: Certifikates -> Tab SSL -> Add -> ausfüllen -> Apply
    5. Generel Settings: Port -> 90, Auto logout -> disabled, Enable SSL auf true, Zertifikat auswählen, Force SSL auf true -> save & apply [WebUi ist ab jetzt nur mit https erreichbar]

 

In Webmin Port von Nextcloud zurück stellen:

/etc/apache2/ports.conf auf Port 80 bzw. 443

#Laufwerk dauerhaft einbinden:

sudo mount -t ext /dev/sda1 /media/Hdd1

https://confluence.jaytaala.com/display/TKB/Mount+drive+in+linux+and+set+auto-mount+at+boot

0  

ASP Core Configuration vererben

image_pdfimage_print

public IConfiguration Configuration { get; }

in ServiceCollection

services.Configure<BaseConfiguration>(this.Configuration);
services.Configure<ChildConfiguration>(this.Configuration);

 

Die ChildConfiguration erbt von BaseConfiguration

Hat die ChildConfiguration Unterknoten, erben auch die Unterknoten. So wird die Konfiguration “erweitert”

0  

Integrations Test mit Dependency Injection MsTest v2 .Net Core 3.1

image_pdfimage_print

Möchte man einen Integrationstest schreiben und dabei dependency injection nutzen, muss man folgendermaßen vorgehen:

  1. Im Besten Fall teilt ma die Ausführende Applikation z.B. Web Applikation, Console etc und eine Bibliothek.
  2. In die Bibliothek kommt die Auslagerung der StartUp:
  3. Im Testprojekt wird eine Basis Klasse definiert, die dieses Modul einliest. Nun kann in CofigureServices services.UseMyModule() aufgerufen werden oder der Host selbst gebaut werden:
  4. Die eigentliche Test Klasse erbt nun von diesen BaseUnitTest. Nun kann ein Propertiy erzeugt werden, welche einen Service aus der Dependency Injection ausliest:

     
0  

SQL CPU Last und Gesamtdauer von Query testen

image_pdfimage_print

 

0  

.gitignore SSIS dtsx Dateien hinzufügen

image_pdfimage_print

in der VisualStudio .gitignore: https://www.gitignore.io/api/visualstudio

wird das komplette Verzeichnis “obj” exkludiert. Die packages (.dtsx) aus SSIS befindet sich aber gerade dort.

Daher muss man folgende Zeile auskommentieren:

und unter diesen Block einen neuen Block hinzufügen:

meine komplette .gitignore sieht demnach so aus:

 

0  

Step 1: Gitea installieren

image_pdfimage_print
  1. Chocolaty ist eine Windows Umgebung um Anwendungen über Kommandozeile zu installieren:
    1. https://chocolatey.org/install
  2. GO installieren
    1. https://golang.org/dl/
  3. cmd öffnen und echo %GOPATH% eingeben. Wenn als Ergebnis wieder %GOPATH% steht, Windows neustarten und nochmal prüfen. Andernfalls unter Systemsteurung -> System -> Erweitert -> Umgebungsvariablen die GOPATH Variable setzen
  4. cmd als Admin starten und folgende Befehle eingeben:

  5.  
  6. Nun ist der Service unter http://localhost:3000 erreichbar, zeigt aber Fehler an. Daher muss man das Package herunterladen:
    1. https://dl.gitea.io/gitea/1.11.0/gitea-1.11.0-windows-4.0-amd64.exe
    2. Diese direkt in das Verzeichnis c:\gitea kopieren
  7.  MS SQL Server vorbereiten

  8. Im SQL Management Studio nun eine Neue Datenbank mit dem Namen “Gitea” erstellen
  9. Unter Security -> Logins einen Neuen SQL User “gitea-user” erstellen.
  10.  R. Maustaste auf den User -> Properties -> Server Roles und nur die neue Gitea Datenbank zuweisen
  11. Mindestens einmal als dieser User einlogen und das neue Passwort setzen
  12. Wieder mit Properties -> Global die Haken bei Enforce Password expiration raus nehmen

    SSH Server einrichten

  13. PowerShell als Admin öffnen
  14. Zum SSH Test einloggen eingeben. Standard Port ist 22 und sollte in der Firewall freigeschaltet sein

     

0  

Microservices mit .Net Framework und Core ohne Docker

image_pdfimage_print

Momentan liest man überall von Microservices und welche Vorteile diese Architektur mit sich bringt. Zwar wird immer wieder aufgeführt, dass Microservices Polyglot (Eine Architektur mit unterschiedlichen Programmiersprachen) unterstützen können. Tatsächlich findet man aber nur Anleitungen (In der Microsoft Welt) Zu .Net Core, in Verbindung mit Docker und Azure.

Mein Ziel ist es eine Architektur ohne Docker (Da auf VMs nicht unterstützt wird) und eine Verbindung aus Core und .Net Framework herzustellen. Aus einer Reihe von nachhaltigen Frameworks soll die Entwicklung in CD (Continues Delivery) gestaltet werden. TFS und GitLab scheiden wegen ihren Lizenzmodell aus.

  • CodeRepository: Git -> https://git-scm.com/download/win
  • Build Server: Jenkins -> https://jenkins.io/download/
    • https://www.guru99.com/jenkin-continuous-integration.html
  • Api Gateway (Kommunikation ClientApi zu Microservices) Ocelot : https://github.com/ThreeMammals/Ocelot
  • Kommunikationsprotokoll zwischen Microservices: gRPC (Da schneller als Http)
  • Sicherheit unter Microservices: JWT Token
  • Authentifizierung Microservice mit OAuth 2.0 und OWIN Middleware: https://oauth.net/code/dotnet/
  • Repository: Implementierung mit Dapper: https://github.com/StackExchange/Dapper
  • Repository Cache: https://github.com/MichaCo/CacheManager
  • Datenbank Code Migration SSDT: SQL Server Data Tools
    • https://www.youtube.com/watch?v=6ass_PYECmM&t
    • https://arapaima.uk/post/2017-04-04-jenkins-windows-git-ssdt-profit/
  • (Optional) Search Engine: https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/introduction.html
    • https://www.red-gate.com/simple-talk/dotnet/net-development/how-to-build-a-search-page-with-elasticsearch-and-net/
0  

Windows Bug Tooltip bleibt hängen

image_pdfimage_print

Wahrscheinlich jeder kennt es, wenn plötzlich irgendwo im Bildschirm ein Tooltip hängt und nicht weg geht.

Dann kann man einfach Windows+D 2x drücken und dann ist der weg

0