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 Papst
Thema: Zugriff auf Property einer anderen Klasse/ViewModel
Am im Forum: GUI: WPF und XAML

Denkt bitte an die Regelung eine Frage pro Thread.

Jeder Datentyp kann nullbar gemacht werden, durch ein

Nullable<DateTime>
oder

DateTime?
.
Fraglich ist, ob das notwendig ist, aber das ist von Fall zu Fall zu entscheiden.

Du kannst in .Net Core mit WPF genauso MVVM machen, wie ich .Net Framework.

Thema: Wie kann ich bei der Projektvorlage WPF-App (.NET Framework) SerialPort nutzen?
Am im Forum: Grundlagen von C#

Toolbox klingt sehr nach Windows Forms.
Wenn du die Konfigurationsoberfläche für den Serialport suchst, die wirst du in WPF selber bauen müssen.

Ansonsten die Klasse System.IO.SerialPort bei einem .Net Framework Projekt direkt verfügbar sein und bei einem .Net Core Projekt über NuGet verfügbar sein.

Thema: Wie kann ich mit ASP.NET Core auf Ubuntu Zugriff auf UNC Pfade mit Credentials bekommen?
Am im Forum: Web-Technologien

Selbst wenn du die DLL unter Ubuntu hättest würde das nicht funktionieren.

Wenn du das nicht anders kapseln kannst (auf der Gegenseite) wirst du vermutlich etwas mit Samba unter Ubuntu machen müssen.

Thema: Wie entwickle ich am Besten ein Tool, das die Verbindung zum Application-Server prüft?
Am im Forum: Datentechnologien

Sofern die Verbindungstests deinen Anforderungen genügen und funktionieren kann man das so machen.

Allerdings solltest du das wie du es machst noch einmal überarbeiten.
-> Trenne Logik von UI [Artikel] Drei-Schichten-Architektur
-> Beim prüfen von Exception Strings bedenke, dass diese nur bei dir auf Deutsch sein könnten. Bei jemanden mit einem englischen Sprachpaket (OS) sind diese auf Englisch
-> Nutze keine "Magic Strings" zum kommunizieren, das ist UI Aufgabe, nicht Logik. Das lässt sich so z.B. nicht lokalisieren. Nutze z.B. Enums oder Ereignisbasierte "Benachrichtigungen"
-> Methoden können Rückgabewerte haben, dadurch kannst du dann später Wiederverwendbarkeit steigern.

Ich hätte vermutlich ein Interface definiert IConnectionTester o.ä. und dann davon drei Implementierungen bereit gestellt, je eine für SQL, WebDav und HTTP.
Denn die Intention und die Rückgabe sind exakt diegleichen, nur die Transportverbindung nicht. Damit hättest du es auch später einfacher, wenn du weitere Dienste testen willst (z.B. FTP oder SSH, ...)

Thema: Sollte man für eine wenig benutze aber interne App Azure nutzen? Wenn ja: Wie?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Wie du siehst ist das gar nicht so einfach zu beantworten und VPN ist nicht deine Anforderung, sondern eine technische Lösung um etwas zu erreichen.

Es macht in jedem Fall Sinn, dir wirklich über deine Anforderungen klar zu werden und dann dich nach Möglichkieten der Implementierung umzuschauen und dich hier ggf. beraten zu lassen anstatt blind auf eine Möglichkeit loszulaufen.

Thema: Sollte man für eine wenig benutze aber interne App Azure nutzen? Wenn ja: Wie?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Das kommt immer auf deine genauen Anforderungen an.
Und ein Forum kann dir da keine Beratung durch Experten ersetzen, die deine Anforderungen analysiert.

Es gibt, gerade für Fileshares andere sinnvolle Alternativen.. z.B. Sharepoint Online/Onedrive for Business.

Fragen, die du dir stellen solltest:
- Warum VPN? Stark Authentifizierte (z.B. https) Verbindungen können eine leichtgewichtige Alternative sein, die auch auf Mobilgeräten funktionieren.
- Warum Fileshares?

Thema: Chrome - Werden Websites über Bookmarks gecached?
Am im Forum: Web-Technologien

Hast du an das einfachste Gedacht?

Wie sieht denn die Bookmark aus? Ist das vielleicht der Redirect zum Identity Provider?

Thema: Wie ein JSON von einer URL in C# Forms auslesen und verarbeiten?
Am im Forum: Web-Technologien

Der Vollständigkeit halber: WebClient ist veraltet, nutze den HttpClient.
Steht auch in der Dokumentation zum WebClient: https://docs.microsoft.com/en-us/dotnet/api/system.net.webclient?view=netcore-3.1

Thema: Symbolleisten werden im VS2019 Community Edition nicht mehr angezeigt
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Am einfachsten setzt du alle Einstellungen zurück.https://docs.microsoft.com/en-us/visualstudio/ide/reference/resetsettings-devenv-exe?view=vs-2019

Thema: Wie kann ich zwei DataGrids aus einer Datenquellebediene und die Ansicht filtern?
Am im Forum: GUI: WPF und XAML

Dann sollte definitiv eine HTTP API dazwischen!

Die Datenbank sollte nicht über das Internet erreichbar sein!

Thema: Wie kann ich zwei DataGrids aus einer Datenquellebediene und die Ansicht filtern?
Am im Forum: GUI: WPF und XAML

Die Where() Erweiterungsmethode gibt keine Observable Collection wieder, sondern einen Enumerable<T> (im weitesten Sinne).

Wenn du davon eine Kopie(!) als ObservableCollection haben willst, müsstest du den Enumerable an den Konstruktor einer ObservableCollection übergeben: https://docs.microsoft.com/en-us/dotnet/api/system.collections.objectmodel.observablecollection-1.-ctor?view=netcore-3.1


var collection = new ObservableCollection<Model>(_liste.Where(... bedingung ...));
Das erzeugt wie gesagt eine Kopie der Liste (aber idr. keine Kopie deiner Objekte).

Natürlich stimmt mein Einwand mit "immer eine API nutzen" nicht in allen Fällen - aber ich würde behauptden, dass es in 99,9% sinnvoller ist, eine API und ggf. eine zentralisierte Datenbank als ein lokales(!) DBMS zu nutzen.
Bei lokalen Datenbanken bietet sich meistens an eine einbettbare Datenbank (wie z.B. SQLite) zu nehmen. Das raubt auch dem Rechner keine Ressourcen durch einen dauerhaft laufenden Daemon.

Bezüglich Services, Interfaces usw. kann ich nur Empfehlen, dass du dich mit den Grundlagen auseinanderzusetzen und in dem Zuge kannst du dir gleich das Dependency Injection (z.B. am Beispiel des von MS mit .NET Core mitgelieferten Framework) und das Repository Pattern anschauen.

Thema: Wie kann ich zwei DataGrids aus einer Datenquellebediene und die Ansicht filtern?
Am im Forum: GUI: WPF und XAML

Am besten: Gar nicht :)

Deine Desktop Applikation sollte keinen direkten Datenbank Zugang haben, sondern die Daten von einem Webservice konsumieren.

Thema: Wie kann ich das IsSelected-Event in einer DataGridRow abfangen?
Am im Forum: GUI: WPF und XAML

Ich bin mir nicht sicher, ob ein Style in beide Richtungen funktioniert.

Siehst du denn im Output Binding Fehler?

Das Datagrid sollte ein Event "RowSelected" o.ä. haben, das könntest du mit einem Command verbinden.

Thema: Im DataGrid nur die ID der ausgewählten Zeile auslesen?
Am im Forum: GUI: WPF und XAML

In erster Linie geht es um das separieren der Logik.
Dass du einmal implementierte Commands doppelt nutzen kannst ist aus meiner Sicht ein Nebeneffekt.

Thema: Im DataGrid nur die ID der ausgewählten Zeile auslesen?
Am im Forum: GUI: WPF und XAML

Events in MVVM behandelst du mit Commands.
Das OnClick Event bei z.B. einem Button kannst du direkt mit einem CommandBinding abfangen. Bei den anderen Events muss man etwas drum herum bauen (leider).

Im .Net Framework gab es daür das Paket System.Windows.Interactivity. Wie das bei .Net Core aussieht weiß ich nicht aus dem Kopf - aber vermutlich ähnlich.

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

In dem Zusammenhang hatte ich einmal Probleme mit zwei Dingen:
-> Zeitstempel im Container (unter Windows vor allem sehr schwierig: issue auf GitHub)
-> DNS Server IP fehlt dem Container

Thema: Wie deploye ich eine Blazor Webassembly App?
Am im Forum: Web-Technologien

Oberhalb des publish Verzeichnisses liegt das, was beim kopilieren der App erzeugt wird.
Sinnvollerweise muss das ja auch irgendwo sein :)

Übrigens, liegt das nur dort, wenn ich das standard publish Verzeichnis wähle.
Gebe ich ein anderes an, liegt dort nur die fertig App.


C:\Users\marco\source\repos\temp\BlazorApp1\BlazorApp1> rm -force -recurse bin
--> bin verzeichnis weg

C:\Users\marco\source\repos\temp\BlazorApp1\BlazorApp1> dotnet build -c release
--> bin/Release/netstandard2.1/ voll mit kompilat

C:\Users\marco\source\repos\temp\BlazorApp1\BlazorApp1> rm -force -recurse bin
--> bin verzeichnis weg

C:\Users\marco\source\repos\temp\BlazorApp1\BlazorApp1> dotnet publish -c release
--> bin/release/netstandard2.1/ voll mit kompilat
--> bin/release/netstandard2.1/publish/ beinhaltet App

C:\Users\marco\source\repos\temp\BlazorApp1\BlazorApp1> dotnet publish -c release -o c:\tmp
--> c:\tmp hat den Inhalt wwroot & web.config
Gleiches passiert auch, wenn ich per VS FolderProfile Publish Profil irgendwohin publishe.

Thema: C#Web API Object in Json format anzeigen.
Am im Forum: Web-Technologien

Es gibt zehntausende Artikel, die beschreiben, wie man eine solche APi am besten aufbaut.

Nutzt du ASP.NET Core oder ASP.NET?
Wenn du die Möglichkeit hast, solltest du versuchen auf ASP.NET Core zu setzen.

Die Action könnte ungefähr so aussehen:


public async Task<IActionResult> GetAll()
{
  var pages = await _repository.GetAllAsync();
  return Ok(pages.ToDictionary(p => p.URL, p => new PageDescription {
    PageName = p.Name,
    [...]
  }));
}

Besser:
  • kapsele das Mapping (.ToDictionary), dann wird der Code lesbarer. Entweder in eine eigene Methode oder in eine Bibliothek wie AutoMapper.
  • Nutze nicht ToDictionary sondern ein eigenes Objekt


Generell davon ein Dictionary zurückzugeben, kann ich weder ab- noch dazuraten. Best practises gibt es im Internet bestimmt ausreichen oder jemand mit mehr API Erfahrung kann hier etwas dazu schreiben.
Ich würde es vermeiden, wenn es geht.

Thema: C#Web API Object in Json format anzeigen.
Am im Forum: Web-Technologien

Die geschweiften Klammern beschreiben ein Objekt, die eckigen ein Array.
Du musst also deine Daten transformieren, bevor du sie zurück gibst.

Die Daten können zwischen API und Datenbank durchaus ganz unterschiedlich aussehen.

Wenn du die Daten in das Format bringen willst, könntest du ein Dictionary<string, T> verwenden.

Thema: Datenbank für Mitgliederverwaltung in einem Verein
Am im Forum: Datentechnologien

Ich persönlich würde bei EF nicht mit Vererbung arbeiten, sondern lieber mit optionalen 1:1 Entitäten oder sogar noch einer Abstraktionsebene mehr (je nach deinen Anforderungen).

Ich hatte das einmal in einem Projekt und es macht es unheimlich schwierig die Datenbank "von Hand" anzuschauen, weil - je nach gewählten Schema für die Vererbung - mehrere Tabellen entstehen.
Ich weiß aktuell nicht einmal ob EFCore Vererbung schon kann.

Bei Optionalen 1:1 Entitäten könntest du für jede Funktion (Rollen) eine eigene Entität anlegen und diese auf ein Mitglied referenzieren lassen. Das hätte den Vorteil, wenn mal jemand zwei Funktionen (Rollen) hat, du dies auch abbilden kannst.
Ob das so notwendig und richtig ist, hängt natürlich von deinen Anforderungen ab - das kannst du nur selber beantworten - wenn du keine Eigenschaften hast, die nur ein Lehrer hat, ist das so ggf. nicht sinnvoll.

Thema: Neues in C#9 - Records, Native Sized Numbers und mehr Syntax-Zucker..
Am im Forum: Szenenews

@Coder007: der Compiler kennt die Zielplattform nicht, deswegen kann er das nicht alleine.
Anders als bei z.B. C wird nicht Maschinencode erzeugt beim kompilieren von C#

Thema: JSON Dynamic Property Deserialize
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Du könntest das mit einem Dictionary machen.


class Root {
 public Dictionary<string, Mirror> Container { get; set; }
}

Thema: Wie Inhalte in einer App verschlüsseln?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Wenn du - wie im ersten Kommentar - selber eine Datei verschlüsselst, was machst du mit dem Schlüssel für die Datei?
Das verschiebt dein Problem nur ein Stückchen weiter.

Der Credential Manager ist an das Benutzerkonto des angemeldeten Benutzers gebunden. Das verschiebt das Problem natürlich auch nur, dafür aber an die Anmeldung des Benutzers.

Thema: SyncFusion TreeGrid Itemsource aus Combobox wählen?
Am im Forum: GUI: WPF und XAML

Was fehlt dir?
Eine DataSource mit allen möglichen Monaten? --> die wirst du dir selber erstellen müssen.

Thema: TcpListener.Start() Verhalten in Docker
Am im Forum: Netzwerktechnologien

Richtig, ich bin eigentlich davon ausgegangen, diese Beschränkung im Container nicht zu haben (warum auch immer ich auf diese Idee kam - vermutlich, weil Kestrel problemlos Port 80 öffnen kann :) ) und wurde eines besseren belehrt.

Thema: TcpListener.Start() Verhalten in Docker
Am im Forum: Netzwerktechnologien

Problem noch nicht gefunden, aber zumindest eine Lösung. Highports funktionieren.

Es scheint also eine Limitierung zu sein, dass der Kernel/OS (so genau kenne ich mich, vor allem bei Linux, in den Schichten nicht so aus) das Socket öffnen verhindert.
Interessanterweise gibt es keine Exception.

Die Docker Logs geben leider nur die Logausgaben der eigenen Software her, von dort habe ich schon den genauen Punkt (also .Start()) herausgefunden.

Der Server im Container horcht jetzt auf 105021502, das wird dann von Docker auf 502 gemapped. Funktioniert.

Thema: TcpListener.Start() Verhalten in Docker
Am im Forum: Netzwerktechnologien

Hi,

das mit Kestrel kenne ich tatsächlich. Ich verwende allerdings einen fertigen Protokollstack, der auf TcpListener aufbaut.
Die Option wäre dafür gewesen entweder einen Interop Layer oder einen eigenen Protokollstack zu entwickeln (bzw. zu der Lib beitragen).
Es handelt sich dabei um Modbus/TCP mit der Lib NModbus.

Vorhin kam mir noch die Idee, dass ein Problem des OS sein könnte.. dass ich auf Linux (--> im Container) mit einem normalen Prozess nicht den Port öffnen darf.

Thema: TcpListener.Start() Verhalten in Docker
Am im Forum: Netzwerktechnologien

Hallo zusammen,

ich bin aktuell etwas ratlos, vielleicht hat das einer von euch schon einmal ähnlich erlebt.
Ich habe eine Applikation, die im untersten Level für den Transport einen TcpListener verwendet um einen Server zu stellen.

Dabei habe ich ein klassisches Works on my machine Problem:
Ich rufe TcpListener.Start() auf, das läuft im Debug oder in Release auf der Entwicklungsmaschine sauber durch und er baut danach den Server auf.
Lasse ich das ganze als Docker paketieren und auf der gleichen Maschine in einem Container laufen, blockiert er in der Ausführung innerhalb des .Start() aufrufes (also lange vor einem AcceptClient, dass innerhalb der Anwendungsschicht in einer Lib läuft)... sonst haben andere Entwickler immer nur bei AcceptClient die Probleme :)

VG
Papst

Thema: Wie kann ich Xml Code direkt in C# Code schreiben?
Am im Forum: Grundlagen von C#

Du kannst das in C# genau so machen. Du musst lediglich dafür sorgen, dass du Interpolationen und Zeilenumbrüche in Strings haben darfst.

-> Interpolation geht mit $
-> Zeilenumbrüche mit @


int variablen = 15;
string multiLineInterpolation = @$"hallo
ich kann
mehrere zeilen und {variablen} oder auch {(variablen == 15 ? true : false)} Ausdrücke enthalten";

Wobei die Element Erzeugung per Objekt deutlich sauberer ist, als XML Code im Quellcode zu haben und diesen zur Laufzeit zu parsen. Dann lagere ihn lieber in eine extra Datei aus.

Abt hat mal was zu XML gebloggt, bezüglich XDocument vs. XmlDocument: https://schwabencode.com/CSharp/CSharp-XML-Tutorial

Thema: html-Quellcode wird nicht vollständig angezeigt
Am im Forum: Web-Technologien

Das könnte verschiedene Ursachen haben, z.B. könnte der HTML DOM durch JavaScript manipuliert werden, was der WebClient nicht mitbekommt, denn dieser kann lediglich HTTP Requests durchführen.

Vergleiche doch einmal den Output von curl auf die Zielseite mit dem, was der WebClient für dich herunterlädt.
Sollte das gleich sein liegt es nicht an deinem Code, sondern daran dass an der Website nachträglich der DOM geändert wird.

P.S.: WebClient gilt als veraltet. HttpClient ist sinnvoller zu nutzen