Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von ClaraSoft
Thema: async Task<bool>
Am im Forum: Grundlagen von C#

Zitat von T-Virus
Ich würde die Prüfung auf die Länge des MainWindowTitle vor dem Contains machen.
Ist die Länge 0, dann kann man sich das Contains sparen, was du aktuell aber immer machst!
So macht man erst ein Contains, was false liefert nur um dann erst zu merken, dass dort eh nichts drin steh.
Bzw. würde ich anstelle der Länge mit String.IsNullOrEmpty prüfen, damit es klarer ausgedrückt ist.

Tatsächlich könnte man sich den Check auf die Länge des String sparen. Ein Contains liefert auch dann ein false, wenn nix in dem String steht. In seinem Code prüft er zuerst ob eine Zeichenfolge enthalten ist und wenn ja dann wird noch mal die Länge geprüft. Welches dann immer true zurück gibt.


Thema: async Task<bool>
Am im Forum: Grundlagen von C#

Hallo,

Eine kleine Anmerkungen zu deinen Code
Deine geschachtelte if Anweisung ist Redundant bzw. in dieser Form unnötig. Wenn das MainWindowTitle schon die Zeichenfolge "Programm -" enthält ist auch, auch gleichzeitig die Length größer als 0. Umgekehrt würde das ganze etwas eher Sinn machen. Noch besser wäre folgende Variante:


public async Task<bool> IsClientOnline()
        {

            await Task.Delay(2000);

            foreach (Process p in Process.GetProcesses())
            {

                if (!p.MainWindowTitle.Contains("Programm -") || p.MainWindowTitle.Length == 0)
                {
                     continue; // oder etwas anderes
                }
                 var username = p.MainWindowTitle;
                ClientName.Items.Add(username.Remove(0, 6));
                ClientHandleNr.Items.Add(p.MainWindowHandle);
                return true;

            }

                return false;

        }

Thema: 2 MySql Inserts - ID von Insert 1 in Insert 2
Am im Forum: Datentechnologien

Hallo

Last Insert Id hat aber einige Fallstricke die man beachten sollte.
Ich habe das bei mir lokal auf Php My Admin ausprobiert. Zum Beispiel habe ich nur dann eine ID bekommen, wenn im gleichen SQL auch z.B. ein Insert durchgeführt habe. Habe dagegen nur:


SELECT LAST_INSERT_ID()

ausgeführt kam bei mir eine 0 zurück. Bedeutet LAST_INSERT_ID nur dann die korrekte ID zurück gibt, wenn du bei Query mit der selben Verbindung ausführst. Dann musst du sicher stellen, das dir niemand dazwischen funkt mit einem Insert oder Update.

Eventuell wäre ein Insert select eine bessere und sichere Variante. https://mariadb.com/kb/en/insert-select/

Grüße

Thema: Parsen von JSON-formatierten RKI-Daten
Am im Forum: Netzwerktechnologien

Hallo,

Json parsen ist eigentlich kein Hexenwerk, außer man heißt Rockstar. Ich würde das Json erstmal vernüftig formattieren, damit ich besser sehen, was für Keys vorhanden sind, dazu eine passende Modelklassen erstellen/erzeugen.

Grüße

Thema: [gelöst] Aus mehrere XML Dateien Daten extrahieren
Am im Forum: Datentechnologien

Ich habe so den Verdacht das die XML Dateien leicht unterschiedlich aufgebaut sind und manchmal Werte vorkommen und manchmal halt nicht. Ich denke der Fehler auch schon ab einer Datei auftauchen wird und zwar dann, wenn es kein "Displacement" Wert in der XML Datei gibt. Hast du mal jede XML Datei einzeln geprüft und eingelesen?

Thema: HTML-String als Download bereitstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

Ich weiß weder was deine Consolenanwendung macht noch wofür du sie brauchst, noch ist mir nicht ganz klar was mit du mir "HTML-String" meinst, Hyperlink zu einer Website vielleicht?
Darüber mehr zu erfahren wäre nicht schlecht, damit man dir besser helfen kann, deine Codezeile sagt rein gar nix aus.



Thema: Wie kann SelectionChanged einer ComboBox aus einer ListBox behandelt werden?
Am im Forum: GUI: WPF und XAML

Hallo,

Die ComboBox hat die Property SelectedIndex. Hast du es mal damit versucht?

Grüße

Thema: STAThreadAttribute beim ScrollViewer
Am im Forum: GUI: Windows-Forms

Ich würde dir eher zu WPF mit MVVM raten, da kommst du gar nicht erst in die Situation GUI Elemente im Code zu erzeugen, da die Ganze GUI mit XAML erzeugt/erstellt wird.

Thema: MySQL mehrere Werte auslesen und als String wiedergeben
Am im Forum: Datentechnologien

Hallo,

Gibt es zur der Exception auch ein Stacktrace? Und wie baust du den die Verbindung zur Datenbank auf, dein Login Objekt scheint zwar eine MySqlConnection zu haben, aber wie sieht der Connection State aus, ist der auf Closed? Ist der string externalip gesetzt?

Außerdem solltest du noch mal dein SQL Befehl anpassen. Statt mit * solltest du die Spalten explizit angeben, diesem Fall wäre das username und group. Ganz davon abgesehen solltest du noch ein Try Catch Block einbauen.

Ich würde dir mal empfehlen dir mal Dapper anzugucken.

Grüße

Thema: Foreach und Switch Case
Am im Forum: Grundlagen von C#

Hallo,

Ich habe die Methode inzwischen etwas umgeschrieben. Die gegenüberliegenden Ampeln sollten synchron miteinander laufen. Die Methode GetCurrentComtrolles() gibt die jeweils gegenüberliegenden Ampeln zurück je nachdem wie der wert von isNorthSouth ist. Dadurch werden jetzt bei jedem Event nur 2 Ampeln geschaltet außerdem habe ich nun einen kurzen Augenblick wo alle Ampeln Rot sind.

Eigentlich ist das Thema abgeschlossen, weil mein eigentliches Problem gelöst ist.


 private void ElapsedEvent(object send, System.Timers.ElapsedEventArgs args)
        {
            try
            {
                var controllers = GetCurrentControllers();
                foreach (var item in controllers.Select((v, i) => new { controller = v, index = i }))
                {
                    switch (item.controller.CurrentPhase)
                    {
                        case TrafficPhase.RedPhase:
                            item.controller.SwitchPhase(TrafficPhase.RedYellowPhase);
                            FireEvent(item.controller, "Activate redsignal and yellowsignal");
                            timer.Interval = 2000;
                            break;
                        case TrafficPhase.RedYellowPhase:
                            item.controller.SwitchPhase(TrafficPhase.GreenPhase);
                            FireEvent(item.controller, "Activate greensignal");
                            timer.Interval = 10000;
                            break;
                        case TrafficPhase.YellowPhase:
                            item.controller.SwitchPhase(TrafficPhase.RedPhase);
                            FireEvent(item.controller, "Activate redsignal");
                            if(item.index == 0) 
                            {
                                isNorthSouth = !isNorthSouth;
                            }
                            timer.Interval = 1000;
                            break;
                        case TrafficPhase.GreenPhase:
                            item.controller.SwitchPhase(TrafficPhase.YellowPhase);
                            FireEvent(item.controller, "Activate yellowsignal");
                            timer.Interval = 2000;
                            break;
                        default:
                            break;
                    }
                }

            }
            catch (Exception ex)
            {
                Console.WriteLine($"Exception: {ex}");
                throw;
            }
        }

Thema: Speichern und Laden eines 2dArrays
Am im Forum: GUI: WPF und XAML

Hallo

Mir fallen spontan 2 Punkte auf, die etwas komisch sind. Du liest den Filestream in der Load Methode nie. Und zum anderen könnte es bei deiner Save und deiner Load Methode knallen, wenn das Array kleiner ist als die die Schleifen durchläufe -> IndexOutOFRangeException. for schleifen sollten idr so aussehen:


for(int i =0; i < myArray.Length; i++) 
{
 // your code...
}

Daneben würde ich bei Load das Array zurück geben statt, als zu referenz übergeben. Und selbst wenn du lasse so lassen möchtest gib wenigstens ein boolean zurück, aber nicht void.

Grüße

Thema: Foreach und Switch Case
Am im Forum: Grundlagen von C#



Danke Abt, das war der entscheidene Hinweis. Ich hab mein Code um eine try/catch blog erweitert und es kam der erwartete Fehler im log.

Danke euch für eure Hilfe.


Thema: Foreach und Switch Case
Am im Forum: Grundlagen von C#

Hallo,

Ja das ist prinzipel richtig. Die foreach schleife habe ich, weil die Ampelanlage 4 Ampeln steuern soll, diese habe ich aktuell in einem Dictionary drin. Um die Phase zu wechseln muss ich einmal alle Ampeln aufrufen.

Ich habe im groben folgende Klassen:

  • Klasse für ein Lichtsignal mit den Properties für die Farbe, Status und Pin
  • Klasse für eine Ampel mit 3 Lichtsignale für Rot, Gelb und Grün
  • Controller Klasse für eine Ampel
  • Klasse welche die Gesamtanlage steuert und die Controller Klassen aktuell in einem Dictionary hält

Mein geposteter Code ausschnitt kommt aus der letzten Klasse.

@T-Virus:

Ja Laut Konsolen ausgabe scheint er nur einmal durch die Schleife zu gehen.
Log mit aktiven Switch Case:

Key count: 4
Current Key: North
Phase: RedPhase
Controller: ef0d21a7-c71d-4f72-9a1d-787afbc523f9
Controller: ef0d21a7-c71d-4f72-9a1d-787afbc523f9 send message: Activate redsignal and yellowsignal and has phase: RedYellowPhase
Key count: 4
Current Key: North
Phase: RedYellowPhase
Controller: ef0d21a7-c71d-4f72-9a1d-787afbc523f9
Controller: ef0d21a7-c71d-4f72-9a1d-787afbc523f9 send message: Activate greensignal and has phase: GreenPhase

Log ohne Switch Case:

Key count: 4
Current Key: North
Phase: RedPhase
Controller: 6d48cfb3-32e6-4e91-84a8-9e0419201c01
Current Key: East
Phase: RedPhase
Controller: 59b02032-bcca-44d2-990f-07b1dfd99476
Current Key: South
Phase: RedPhase
Controller: b7736796-010f-437d-9ebf-482e73622941
Current Key: West
Phase: RedPhase
Controller: 83581af1-15b4-4e2f-b81c-d00b9208ce46
Key count: 4
Current Key: North

Das läuft Übrigens auf dem Raspberry.

Thema: Foreach und Switch Case
Am im Forum: Grundlagen von C#

Hallo

Ich bin gerade dabei eine Ampelsteuerung für mein Raspberry PI zu programmieren. Jetz bin ich auf ein Problem gestoßen, das ich irgendwie nicht verstehe. Von meinen Timer wird folgendes aufgerufen:


private void ElapsedEvent(object send, System.Timers.ElapsedEventArgs args)
        {
            var keys = currentPhase.Keys;
            Console.WriteLine($"Key count: {keys.Count}");
            foreach (var key in keys)
            {
                Console.WriteLine($"Current Key: {key}");
                var phase = currentPhase[key];
                var controller = trafficLightControllers[key];
                Console.WriteLine($"Phase: {phase}");
                Console.WriteLine($"Controller: {controller.ControllerGuid}");
                switch (phase)
                {
                    case TrafficPhase.RedPhase:
                        currentPhase[key] = controller.SwitchPhase(TrafficPhase.RedYellowPhase);
                        MachineStateEventHandler?.Invoke(this, new MachineStateEventArgs("Activate redsignal and yellowsignal", currentPhase[key], controller.ControllerGuid));
                        timer.Interval = 2000;
                        break;
                    case TrafficPhase.RedYellowPhase:
                        currentPhase[key] = controller.SwitchPhase(TrafficPhase.GreenPhase);
                        MachineStateEventHandler?.Invoke(this, new MachineStateEventArgs("Activate greensignal", currentPhase[key], controller.ControllerGuid));
                        timer.Interval = 10000;
                        break;
                    case TrafficPhase.YellowPhase:
                        currentPhase[key] = controller.SwitchPhase(TrafficPhase.RedPhase);
                        MachineStateEventHandler?.Invoke(this, new MachineStateEventArgs("Activate redsignal", currentPhase[key], controller.ControllerGuid));
                        timer.Interval = 5000;
                        break;
                    case TrafficPhase.GreenPhase:
                        currentPhase[key] = controller.SwitchPhase(TrafficPhase.YellowPhase);
                        MachineStateEventHandler?.Invoke(this, new MachineStateEventArgs("Activate yellowsignal", currentPhase[key], controller.ControllerGuid));
                        timer.Interval = 2000;
                        break;
                    default:
                        Console.WriteLine($"Undefined: {key} or {phase}");
                        break;
                }
            }
        }

Das Problem ist jetzt das der Switch Case dafür sorgt das die Foreach Schleife nicht richtig durchlaufen wird. Es wird immer nur das erste Element durchlaufen.
Der Sowohl currentPhase als auch trafficlightControllers sind Dictionarys mit dem selben Key Typ.
Nehme ich den Switch case raus, funktioniert meine Foreachschleife Problemlos. Im www konnte dazu nix finden. Ich wollte einfach wissen ob das verhalten richtig mit dem Switch Case und der Foreach Loop richtig ist.

Thema: Array in Methode auslagern
Am im Forum: Grundlagen von C#

Ist das nur zur Übung gedacht oder soll das Irgendwo eingesetzt werden?
Fals letzteres zutrifft lass es bleiben und setze implementiere z.B. RSA oder AES oder etwas vergleichbares, dafür gibt es fertige Libarys.

Zu deinem Code:
Versuche weniger globale Variablen zu nutzen.
Sowohl die Crypt als auch die Decrypt Methode sollten statt void etwas zurück geben und einen Übergabe Parameter haben.

Hier mal ein Beispiel wie so eine Methode aussehen könnte:


public int Calculate(int x, int y)
{
     return x * y;
}
Die Methode erwartet 2 ints und gibt das Ergebnis zurück.

Thema: Vier gewinnt auswertung
Am im Forum: Code-Reviews

Zitat von chilic
Zum Beispiel könntest du eine Zeile (Spalte, Diagonale) komplett durchlaufen, dir merken wie viele gleiche Farben du bis zur aktuellen Position schon hintereinander gefunden hast und wenns die vierte mit gleicher Farbe ist, ist das Spiel zu Ende.

In meinen Vier gewinnt Spiel, zähle ich die gefunden Steine. Sind 4 gefunden springe ich raus.
Den Counter zurücksetzen tue ich nach jeder Spalte oder wenn ich eine andere Farbe gefunden habe

Hier meine umsetzung für den Vertikal Check.


private GameStatus CheckVertical(FieldStatus coincolor, FieldStatus[,] fieldstatus)
        {
            int counter = 0;
            for (int col = 0; col ≤ 6 ; col++)
            {
                for (int row = 0; row ≤ 5; row++)
                {
                    if (fieldstatus[row, col] == coincolor)
                    {
                        counter++;
                    }
                    if (fieldstatus[row, col] != coincolor)
                    {
                        counter = 0;
                    }
                    if (counter == 4)
                    {
                        return GameStatus.GameFinished;
                    }
                }
                counter = 0;
            }
            return GameStatus.UserEnabled;
        }

Thema: Wie erstelle ich Textblöcke analog der SelectedCells eines Datagrids?
Am im Forum: GUI: WPF und XAML

Hallo,

Mein Ansatz wäre das IValueConverter Interface zu implementieren.

Grüße

Thema: Wieso stoppt Windows Dienst nach erster Ausführung?
Am im Forum: Rund um die Programmierung

Ich nutze Dependency Injection um meinen Logger zu bekommen. Dafür nutze ich das Interface ILogger<T>, was eigentlich sogar der standard Weg ist bzw sein sollte. Den kann ich sogar mit NLog konfigurieren. Ob der auch mit Serilog konfigurierbar ist weiß ich nicht.


private readonly ILogger<MqttSubcriptionWorker> logger;

public MqttSubcriptionWorker(ILogger<MqttSubcriptionWorker> logger)
{
    this.logger = logger;
}

Thema: Netzwerk Protokoll - Basis
Am im Forum: Code-Reviews

Ich habe ein paar Änderungen durchgeführt. Unter anderem habe die AddPayload Methode umgeschrieben. Außerdem prüfe nun die länge des übergebens byte Arrays, ist dieses zu kurz werf ich eine exception. Ein zu kurzes Array kann gar nicht geparsed werden, da es nicht mal dem Header entsprechen kann... Bleibt nur das Problem, wie ich mit längenmässig validen und erfolgreich geparsten header umgehen, soll die trotzdem verkehrt sind.

/edit Ich habe das parsing der Enums für den Header etwas verbessert, Ich prüfe nun vorher mit IsDefined ob der Value überhaupt im Enum existiert.

Thema: Netzwerk Protokoll - Basis
Am im Forum: Code-Reviews

Hallo T-Virus

Danke für dein Feedback. Du hast bei einigen Punkten Recht da besteht Verbesserungsbedarf, keine Frage. Ich gucke mal was ich wie Umsetze, besonders was Error Handling und das Parsen angeht.

Der Urprünglich von mir angedachte Einsatz Zweck war für TCP/UDP. Meine Aussage war eher als Anregung zu verstehen. Der User kann doch bisweilen sehr Kreativ werden.

Also mein Gedanke war um die Daten versenden, war diese in einem Stream, z.B. die NetworkStream Klasse, zu schreiben. Da die Write und Read Methoden idr mit Byte Arrays aufgerufen werden, war es für mich logisch, dass meine Klassen Byte Arrays zurückgeben sollten.
Nachvollziehbar?

Ich habe noch ein paar Gedanken gemacht:
Sollte ich auf Serialisierung zurückgreifen?
Wie würdet ihr Verschlüsselung einbauen? Ich würde das ganze eher Flexibel haben wollen, damit selbst entscheiden kann was man nutzen möchte oder sollte ich das vorgeben?

Grüße

Thema: Netzwerk Protokoll - Basis
Am im Forum: Code-Reviews

Beschreibung:

Ja was soll ich sagen ursprünglich wollte ich eine Gui Anwendung mit einem Download/Patch Server programmieren. Geplant war das man über die Gui die ausgewählte aktuallisieren kann.
Beim implementieren der Netzwetkschnittstelle habe ich dann gemerkt, dass ich das meine Anwndung ein Protokol braucht, das auf TCP/UDP aufbaut, damit es kommunizieren kann. Wer hätte das gedacht...
Naja meine Idee zu dem Protokoll habe ich jetzt Github veröffentlicht. Dabei ist anzumerken, das ich das eher Snippet sehe und weniger als Projekt. Auch weil viele grundlegende Dinge noch fehlen bzw noch nicht implementiert sind:

-Security - fehlt bisher vollständig, Kommunikation ist unverschlüsselt

-Typ Validierung - der Header verwendet einen generischen Typ für den Message Typ(Type) das führt mit unterschiedlichen Implementationen zu fehlern - hier habe ich noch keine Idee wie ich das Problem lösen könnte.

Aufgrund dieser beiden Punkte möchte folgendes Klar stellen:
Diese Libary ist nicht für den Produktiveinsatz vorgesehen und sollte auch nicht in Produktivumgebungen eingesetzt werden.

Wer es dennoch tut ist selber schlud.

Was kann ich jetzt damit machen?
Meins kann als Basis zur Weiterentwicklung dienen. Dabei sollte man aber mindestens beiden oben genannten Punkte beachten.

Auf welches Protokoll kann ich aufbauen oder welchen Server kann ich nutzen?
TCP und UDP sollten gehen. Eventuell kann man auch auf Mqtt aufbauen oder auch eine Serielle Scnittstelle. Vielleicht findet auch jemand ein Anwendungsbereich als Websocket Protokoll. Wie auch immer mein Protokoll ist nur darauf ausgelegt byte Arrays zu Parsen und zu erstellen, die man von oder in Streams liest/schreibt, wie z.B. den NetworkStream.

Code:https://github.com/SuperSaurfang/GenericNetworkProtocol

Ich würde über Anregungen freuen
Grüße

Thema: IpAdress MapToIP Methoden liefern eventuell falsche Ergebnisse für IPv4 und IPv6?
Am im Forum: Netzwerktechnologien

Hallo,

Ich habe gestern festgestellt, das man die IPv6 Loopback Addresse nicht in die entsprechende IPv4 Loopback Adresse umwandeln kann bzw. das Ergebnis entspricht nicht dem was ich erwarten würde.

Die Loopback Addresseen sind ::1 für IPv6 und 127.0.0.1 für IPv4.

Wenn ich nun ::1 zu IPv4 mappe bekomme ich 0.0.0.1 als Ergebnis zurück, erwarten würde ich hier aber 127.0.0.1. Für Andere IPv6 Addressen scheint dies zu jedoch richtig zu Funktionieren.

Umgekehrt verhält sich die Methode MapToIPv6 bei IPv4 Addressen auch etwas seltsam.
So wird bei 127.0.0.1 folgendes einfach davor ::ffff: gehängt, das scheint generell bei jeder IPv4 Addresse der Fall zu sein.

Test App:


class Program
    {
        static void Main(string[] args)
        {
            var ipAddresses = Dns.GetHostAddresses("localhost");
            //var ipAddresses = Dns.GetHostAddresses(Dns.GetHostName());
            var ipAddress = ipAddresses[0];

            Console.WriteLine($"Loopback IPv6: {ipAddress.MapToIPv6()}");
            Console.WriteLine($"Loopback IPv4: {ipAddress.MapToIPv4()}");

            ipAddress = ipAddresses[ipAddresses.Length -1];

            Console.WriteLine($"Loopback IPv6: {ipAddress.MapToIPv6()}");
            Console.WriteLine($"Loopback IPv4: {ipAddress.MapToIPv4()}");

            Console.ReadKey();
        }
    }

Ausgabe für localhost:

Loopback IPv6: ::1
Loopback IPv4: 0.0.0.1
Loopback IPv6: ::ffff:127.0.0.1
Loopback IPv4: 127.0.0.1

Ausgabe für Hostname

Loopback IPv6: fe80::e83a:b1d0:426d:8f8d%21
Loopback IPv4: 66.109.143.141
Loopback IPv6: ::ffff:192.168.178.20
Loopback IPv4: 192.168.178.20
Ist das verhalten korrekt oder sollte ich das als Bug melden? Ich bin mir nicht sicher. Was meint ihr?

Thema: NuGet API von Docker Build nicht erreichbar
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo Leute,

Ich Probleme meine ASP.NET Core Webapi in den Docker Container zu bringen. Docker läuft bei mir unter Linux in einer VM auf Windows. Das Projekt habe ich unter Linux angefangen und unter Windows habe ich die Docker Ünterstützung für Linux hinzugefügt. Ich habe auch schon ein komplett neues Projekt erstellt ohne Code und ohne alles nur mit Docker Ünterstützung für Linux.

Es scheitert daran das ich beim Docker Build dotnet restore mit folgender Meldung fehlschlägt:


/usr/share/dotnet/sdk/3.1.301/NuGet.targets(128,5): error : Unable to load the service index for source https://api.nuget.org/v3/index.json. [/app/DockerTestApp.sln]
/usr/share/dotnet/sdk/3.1.301/NuGet.targets(128,5): error :   Resource temporarily unavailable [/app/DockerTestApp.sln]
The command '/bin/sh -c dotnet restore' returned a non-zero code: 1

Ich habe schon im Internet danach gesucht, aber keine Lösung für mein Problem gefunden. Zuerst dachte ich, das würde irgendein Netzwerkproblem mit der Docker Bridge sein. Aber dies kann ich eigentlich aus folgenden Gründen ausschließen:
1. Ich habe von Windows aus Zugriff auf Internet
2. Ich habe von der VM aus Zugriff auf das Internet
3. Die Beispiel Anwendung aus dem dotnet-docker Repo wird gebaut und ausgeführt in meinen Docker.


Ich habe mir auch den Container während des Builds vorgangs angesehen, die sln befindet sich in den Build Ordner.

Hier der Inhalt meines Dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY DockerTestApp/*.csproj ./DockerTestApp/
RUN dotnet restore

# copy everything else and build app
COPY DockerTestApp/. ./DockerTestApp/
WORKDIR /app/DockerTestApp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "DockerTestApp.dll"]

Weiß jemand weiter oder hab ich etwas vergessen?

Grüße

Thema: Webapi Datenbank Schnittstelle <-> MariaDB und MongoDB
Am im Forum: Datentechnologien

Hallo Leute,

Ich schreibe gerade eine .Dot Core WebApi, die auch eine Schnittstelle zur einer Datenbank bzw. zu den beiden im Titel Datenbanken genannten hat. Grundsätzlich funktioniert das auch, das ich eine der Beiden Datenbanken nutzen kann, je nach dem was in der Config eingestellt ist.
Meine Idee war dabei folgende:
Über eine Config Datei kann man festlegen welche Datenbank genutzt werden soll. Es ist nicht vorgesehen, beide Datenbanken parallel zu nutzen, es kann zur Laufzeit nur eine Datenbank genutzt werden. Wenn eine Andere Datenbank genutzt werden soll muss die Config angepasst werden und die Webapi neu gestartet werden.
Programmier Technisch habe ich das so gelöst, dass die Controller Klasse nur das Interface kennt, das je nach verwendeter Datenbank unterschiedlich implementiert ist. In der Startup Klasse wird je nach Config dann die entsprechenden Service Klassen aktiviert.

Grundsätze Frage: Was haltet ihr von der Idee unabhängig davon, dass das tatsächlich Funktioniert?

Nun zu meinen Problem:
Die MongDB verwendet ein komplett anderes Id System als eine SQL Datenbank, eine ObjectId, die für jedes "Object" in der Datenbank einzigartig ist. Während eine SQL Datenbank dafür idr. ein Integer als Primary Key und AI für eine Tabelle hat.
Meine Lösung wäre hier, das ich in der MongoDB noch eine Funktion implementiere mit der ich ein Feld hochzählen kann.

Grüße