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: SignalR Selfhosted Call geht nicht durch wegen CORS policy
Am im Forum: Web-Technologien

Das ist korrekt so, der Origin ist eine Kombination aus Protokoll, DNS Name/IP und Port. Deswegen muss alles drei übereinstimmen, sonst kommt diese Fehlermeldung.

Thema: SignalR Selfhosted Call geht nicht durch wegen CORS policy
Am im Forum: Web-Technologien

Hi,

steht in der Fehlermeldung mit drin: DU musst Credentials erlauben.
https://docs.microsoft.com/de-de/aspnet/core/security/cors?view=aspnetcore-2.2#credentials-in-cross-origin-requests

Thema: Erstes C#, MVVM und SQLite Projekt
Am im Forum: Code-Reviews

Den Namen deines Repository Interface würde ich generischer halten - warum steht das SQLite im Namen, das kann durchaus Technologie Unabhängig sein!

ObservableCollection kannst du in der GUI schicht durchaus verwenden. An einer DB macht es nur dann Sinn, wenn die DB dich über Änderungen informieren würde.

Thema: Migration alter c# Projekte in Visual Studio 2017
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Eine Installierbare exe - ist das ein Visual Studio Installer Project?

Das ist ab VS 2017 nicht mehr in VS integriert, sondern nur als Erweiterung verfügbar:https://marketplace.visualstudio.com/items?itemName=VisualStudioClient.MicrosoftVisualStudio2017InstallerProjects

Thema: Textbox nach Auswahl automatisch in Fokus setzen
Am im Forum: GUI: WPF und XAML

Wie hast du es denn bis jetzt probiert?

Für WPF empfiehlt sich das MVVM Entwurfsmuster ( [Artikel] MVVM und DataBinding ). Da würde dein Szenario ungefähr wie folgt aussehen:

im ViewModel werden deine 5 Textboxen durch String Properties repräsentiert. Der Enter Button wird als ICommand Implementierung getriggert und übergibt die 5 Strings an einen Service um sie dann wieder zu leeren.
Den Rest mach Datenbindung.

Thema: Wie kann ich mit EFCore, SQL Server (PaaS in Azure) am besten Spaltenattribute erstellen?
Am im Forum: Datentechnologien

Du hast wohl recht mit dem Anhaften. Die Assoziation war Column Attribut und Property Attribut :)
Für die Konfiguration nehmen wir die Fluent API.

Auf die Limitierungen der Migrations bin ich selber schon gestoßen, kann aber gerade nicht das Projekt umstellen auf ein anderes Verfahren mit dem ich zusätzlich noch keinerlei Erfahrung habe. Aktuell hoffe ich einfach auf nicht zu viele Schema Änderungen.

Schade mit dem Sql() call, plain calls würde ich gerne vermeiden.. ich werd mich bei Gelegenheit mal einlesen, vielleicht gibt es ja die Möglichkeit eine Erweiterung für die Fluent API zu schreiben.

Thema: Wie kann ich mit EFCore, SQL Server (PaaS in Azure) am besten Spaltenattribute erstellen?
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: PaaS SQL

Hallo zusammen,

wir verwenden einige SQL Datenbanken in Azure. Seitens unserer IT wurde jetzt für den SQL Server das Auditing aktiviert, so dass ich entsprechende Infos über mögliche Datenklassifizierungen in SQL Server bekomme.

Ehrlich gesagt habe ich mir um das Thema bisher keine Gedanken gemacht, ich denke aber dass es durchaus sinnvoll ist hier die passenden Spaltenattribute zu setzen.
Wie das theoretisch und praktisch "per Hand" funktioniert habe ich mir angeschaut (aus der Doku), würde das aber gerne entweder direkt an den POCO's von efcore oder mit einer Migration machen.

In der efcore doku habe ich weder etwas passendes auf Datenklassifizierung, noch auf etwas ähnliche wie "Custom Attributes" gefunden.
Hat jemand eine Idee, wie man das (ausser über einen Sql("...")) call in der Migration erledigen könnte?

Thema: FileStream findet Datei nicht, obwohl sie vorhanden ist
Am im Forum: Grundlagen von C#

Der Windows Explorer macht das beim erstellen einer Datei üer Kontextmenü -> Neu -> Textdatei

und zwar genau dann, wenn "Erweiterungen bei bekannten Dateitypen" in den Ordneroptionen aktiviert ist.

Thema: Panel aus Klasse heraus neuladen klappt nicht
Am im Forum: GUI: Windows-Forms

Du müsstest das Panel so definieren, dass es von der anderen Klasse aus zugegriffen werden kann.

Allerdings vermischt du dabei UI mit Logik Aufgaben. Besser wäre, du stellst von deiner Klasse aus eine Collection (z.B. ObservableCollection<T>) als Public Property zur Verfügung, auf dessen Änderung deine Form reagieren kann und das Panel neu rendert.
Die ObservableCollection<T> bietet dabei bereits Events an, die bei Änderung aufgerufen werden. Das hat den Nachteil, dass wenn du mehrere Sachen änderst, jedesmal das Panel neugeladen werden könnte. Daher wäre hier eine mögliche Lösung, eine normale Collection zu verwenden und ein eigenes Event zu definieren.

Thema: Nomenfilter erstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von emuuu
Ich würde mir ja mit Split('') ein Array erstellen

Das ist gar nicht notwendig, denn string ist bereits ein char-Array, dass man einfach iterieren kann.

Thema: Referenz auf String speichern
Am im Forum: Grundlagen von C#

Hi,

das hat etwas mit dem Unterschied von Referenz- und Werttypen zu tun. Für Werttypen, wie string einer ist, ist es einfach nicht vorgesehen soetwas zu machen.

Die einfachste Möglichkeit genau das zu erreichen, was du dort vorhast, ist mit einer Model Klasse zu arbeiten:


class ZeichenkettenModel 
{
   public string Zeichenkette { get; set; }
}


ZeichenkettenModel test = new ZeichenkettenModel();
test.Zeichenkette = "Hallo";

// Aufruf
new Testfenster(test);

Damit hast du eine Referenz, mit der du arbeiten kannst. Solltest du die Klasse dann noch einmal erweitern musst du nicht nicht einmal groß etwas erfinden um das zu tun - was bei der Übergabe von einem String allerdings notwendig wäre.

Thema: Async/await innnerhalb eines LINQ Mappings
Am im Forum: Rund um die Programmierung

Hi,

danke für eure Meinungen. Ich werde wohl auf die Bulk Abfrage gehen, also:


var ids = input.Data.Select(x => x.Id);
Dictionary<Guid, Guid> idMap = await service.GetAllAsync(ids);

@Abt: Noch ist es keine HTTP Api, sondern ein EFCore Context, der im zweiten Schritt abgefragt wird.

Thema: Async/await innnerhalb eines LINQ Mappings
Am im Forum: Rund um die Programmierung

Hi gfoidl,

du hast Recht, hier habe ich allerdings vorgesorgt. Der Service besteht aus zwei Services mit dem gleichen Interface, die sich gegenseitig aufrufen können. Der "vordere" fungiert dabei als Cache Proxy. Dieser hält die Informationen kurzzeitig vor, gerade weil ich Bursts dieser Anfragen erwarte und nicht auf die DB warten möchte.

Mir bleibt also die Wahl:
-> Frage alle Details der passenden Kategorie ab (fragt wesentlich mehr Daten als benötigt ab)
-> Frage explizit für die eingehenden Id's die "Id2" ab (im Bulk)
-> Frage async im Select ab

Architektonisch gefällt mir Option 1 am besten, ähnliche Abfragen habe ich schon, würde also der Linie treu bleiben.

Thema: Async/await innnerhalb eines LINQ Mappings
Am im Forum: Rund um die Programmierung

Hmm, also den Service synchron programmieren oder mittels GetAwaiter().GetResult() ?

Ich wollte eigentlich gerne vermeiden synchrone Methoden in dem IO Belasteten Service anzubieten. Aktuell hängt da ein DB Call (ggf. mit Cache) dahinter, perspektivisch soll da ein HTTP Call zu einer API hinterhängen.

Würdest du den den Service so abändern, IEnumerable anstatt einer Id entgegennimmt und dann eine IDictionary zurückgibt, dass ich im Mapping verwenden kann?

Thema: Async/await innnerhalb eines LINQ Mappings
Am im Forum: Rund um die Programmierung

Hallo zusammen,

ich möchte gerne ein Objekt um weitere Informationen anreichern. Dafür verwendet ich ein Mapping mittels LINQ:


var t = item.Select(async x => new { x.Id, x.Value, Id2 = await service.GetAsync(x.id) });

Mein Problem gerade: Von welchem Typ ist t? --> t ist IEnumerable<Task<anonymous>>
Das ist etwas unpraktisch, denn wenn ich an die Datenobjekte herankommen möchte müsste ich


var result = Task.WhenAll(t);
machen.

Gibt es da nicht eine elegantere Lösung? SelectAsync() wäre schön :D.
Auf Stackoverflow gibt es noch Vorschläge mit der .Result Property, das würde ich gerne vermeiden.

Thema: [Gelöst] String aufteilen, Ziffern konvertieren und Werte ersetzen
Am im Forum: Grundlagen von C#

Hi,

wenn du den Wert bereits als double hast, kannst du ihn einfach teilen. Das was du da hast ist ein Fix-Komma-Wert, also ein Wert der an einer bestimmten Stelle ein Komma hat, das aber nur per Definition dort ist:

1159.0 / 100 = 11.59

Was du auf jeden Fall beachten solltest ist, dass du ggf. einmal andere Werte als die erwartenden Zahlen in deinen Algorithmus bekommst, das solltest du abfangen (Was z.B., wenn dir jemand keine Zahlen sondern Buchstaben gibt).
Dafür bietet sich die Methode double.TryParse an.

P.S.: Wenn du die Wahl hast, ich würde keine Daten in die Nummern hineinkodieren, sondern diese separat in einer Datenbank pflegen. Spätestens, wenn sich mal etwas ändert musst du dann dein System nicht anpassen und weitere Parser erstellen.

Thema: MultiArray aus JSON in ein Objekt Deserialisieren
Am im Forum: Grundlagen von C#

Das liegt daran, dass "?=a" ein Array von Arrays mit unterschiedlichen Typen ist, du aber ein Array of SystemSeed daraus machen willst.
Entweder, du gehst da in mehreren Schritten heran (z.B. erst in ein Array deserialisieren und dann in ein Objekt verwandeln) oder schaust dir die JsonConverter von JSON.NET an.

Thema: Wie mache ich ein Objekt in einem anderen Objekt bzw. Klasse am besten verfügbar?
Am im Forum: GUI: Windows-Forms

Hi,

für eine GUI Applikation empfiehlt es sich immer auf das drei Schichten Architektur zu setzen. [Artikel] Drei-Schichten-Architektur

Vor allem bei länger laufenden Operationen (=> Datei einlesen, verarbeiten, speichern), bietet sich Nebenläufigkeit, also async an:
[FAQ] Warum blockiert mein GUI?

Thema: TextBox Dynamisch in TabControl Page aufrufrn
Am im Forum: GUI: Windows-Forms

Hallo Norbert,

die Fehlermeldung sagt, dass du versucht einer Variable eines bestimmten Typs einen anderen, nicht kompatiblen zuzuweisen (Das ist wie Äpfel und Birnen vergleichen). Das sind Grundlagen.
Vielleicht hilft dir das weiter: [FAQ] Wie finde ich den Einstieg in C#?

Eine Collection ist dabei immer die Mehrzahl von dem eigentlichen Typ, deine Variable erwartet allerdings genau ein Control, nicht eine ControlCollection.

Thema: TextBox Dynamisch in TabControl Page aufrufrn
Am im Forum: GUI: Windows-Forms

Hi,

so können wir dir fast nicht helfen.
-> Was funktioniert denn nicht?
-> Hast du mal mit dem Debugger ( [Artikel] Debugger: Wie verwende ich den von Visual Studio? ) geschaut, wie sich deine Zugriff auflösen, was die Objekte z.B. beim Aufruf von Controls["..."] zurückgibt?

Thema: SelectedItem auf einer ListBox bringt immer "System.DataRowView" statt dem Value
Am im Forum: GUI: Windows-Forms

Hi,

ich kenne mich mit WinForms nicht gut aus (in das Forum hätte es wohl auch besser gepasst), würde aber an deiner Stelle mal folgendes machen: Schau im Debugger, was für Möglichkeiten die dein SelectedItem bietet.
==> [Artikel] Debugger: Wie verwende ich den von Visual Studio?


Edit: Sorry, auf dem Schlauch gestanden... DataRowView ist eine View einer Zeile.. da müsstest du eigentlich mit ((DataRowView)SelectecItem)["Spalte"] an den Wert kommen.

P.S. das was du da baust ist eine riesige Sicherheitslücke, zum einen weil der Nutzer direkten Datenbankzugriff hat (ohne, dass du kontrollieren kannst, was er macht) und weil du die Tür für SQL Injection ganz weit aufmachst. Querys baut man nicht mit String Concat zusammen, sondern mit SQL Parametern.

Thema: Mehrere Tabs erstellen in WPF
Am im Forum: Rund um die Programmierung

Das TabControl wäre das richtige für den Anwendungsfall. Jedes Tab hat einen Header (ggf. mit eigenem Template) und jeweils einen Inhalt der dargestellt wird, wenn der Tab ausgewählt ist.

Thema: Kommunikation zwischen Webpage und Forms
Am im Forum: Web-Technologien

Tip: fange gleich mit an Sicherheit in deinem Konzept zu berücksichtigen. Später geht es vielleicht nicht mehr so gut und man lässt es dann weg.

Ich sehe an deinem Code nichts, wo du versuchst die POST Daten auszuwerten. Das wird vermutlich das Problem sein.

Du würdest es dir einfacher machen, wenn du anstatt des HttpListeners eine fertige Lösung nimmst, z.B. ASP.NET Core mit Kestrel oder NancyFx.
Du solltest dabei aber immer bedenken, dass privilegierte Ports (ich meine das ist alles unter 10k) nicht durch jeden Benutzer geöffnet werden kann. Wenn es doch HtppListener sein soll bietet Windows da eine Möglichkeit das unter Port 80 zu machen, mittels "Temporary Listen Addresses":


 $"http://+:80/Temporary_Listen_Addresses/{_redirectSubPath}/";
Das funktioniert aber meine ich ausschließlich lokal.

Thema: Aus Performancegründen: Wie kann ich MySQL & SQlite miteinander syncronisieren?
Am im Forum: Datentechnologien

Um meine Fragen noch einmal zu konkretisieren:
-> Hast du Indizes auf den Datumsspalten in der MySQL
-> Wie lange dauert genau eine solche Anfrage, wenn du sie nicht über dein Programm, sondern über z.B. PHPMyAdmin laufen lässt (lokal auf dem Server)
-> Hast du einmal Zeiten gemessen? (Query Laufzeit direkt auf dem Server, vs. Laufzeit in deinem Programm)

Wenn du nur wissen willst, ob ein Tisch frei ist würde sich vielleicht eine COUNT() Abfrage anbieten, die die Reservierungen zählt, die in einem bestimmten Zeitbereich für einen Tisch liegen, allerdings auch hier wieder der Punkt -> Hast du Indizes auf den Datumsspalten?

Thema: Aus Performancegründen: Wie kann ich MySQL & SQlite miteinander syncronisieren?
Am im Forum: Datentechnologien

Hi,

hast du denn einmal geprüft, woran es wirklich liegt?
Benötigt die Selektion in MySQL so lange oder liegt es am Transportweg?

Wenn es am Transportweg liegt (was ich mir fast nicht vorstellen kann, ausser du hast eine echt langsame Internetanbindung) dann könnte die SQLite helfen.
Liegt es an der Abfrage wird es vermutlich nur langsamer werden durch die SQLite (vorausgesetzt, der DB Server liegt nicht unter zuviel Last).
Was dir da helfen könnte wäre ein passenderes DB Layout (evtl. fehlen ja auch nur Indizes??) in der MySQL.

Bitte beachte, dass aus Sicherheitsgründen ein lokaler Client nicht direkt mit der DB kommunizieren sollte, sondern soetwas wie eine HTTP Api dazwischen liegen sollte.
Ausserdem solltest du unter keinen Umständen SQL Abfragen per String-Verkettung erstellen, sondern mit Parametern arbeiten: [Artikelserie] SQL: Parameter von Befehlen
Auch würde ich an deiner Stelle mit Klammerungen arbeiten, damit du genau bestimmen kannst, welche deiner WHERE Bedingungen wie verknüpft werden. Um deinen Query zu verstehen müsste ich jetzt nachschlagen, was höher priorisiert ist (AND oder OR), mit Klammern wird es lesbarer.

Thema: GetProperties / Serialisierung ändert die Reihenfolge der Properties
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

wenn du nur die Reihenfolge der Properties beeinflussen musst, warum erstellst du dir da nicht einen eigenen Converter für JSON.NET ?
https://www.newtonsoft.com/json/help/html/CustomJsonConverter.htm
Das wäre jetzt meine erste Idee.

Wenn du unbedingt mit Reflection arbeiten willst, dann kannst du die Properties doch einfach sortieren, bevor du den Json String zusammenbaust (Abgesehen davon, dass strings mit += zusammensetzen gerade in schleifen problematisch ist).

Thema: Migration: DbContext befindet sich in einem anderen Projekt, das Projekt wird nicht gefunden.
Am im Forum: Datentechnologien

Hast du in deiner Projektmappe denn ein Projekt, dass ThePLCProject.Model.SQLite heißt?

Das Powershell CmdLet sucht nach dem Projekt, dass du angibst um hier den Datenbank Context erstellen zu lassen.
Ein paar Informationen gibt es dazu in der doku:https://docs.microsoft.com/de-de/ef/core/managing-schemas/migrations/projects

Thema: DateTime-Werte in ein DateTime zusammenführen
Am im Forum: Grundlagen von C#

DateTime.TimeOfDay ist tatsächlich die bessere Lösung. Kannte ich gar nicht - habe ich noch nie gebraucht etwas derartiges :)

Thema: DateTime-Werte in ein DateTime zusammenführen
Am im Forum: Grundlagen von C#

Das DateTime Struct ist nach der Initialisierung mit einem Wert nicht mehr beschreibbar.
D.h., wenn du die Zeit oder das Datum verändern willst, muss du ein neues DateTime Objekt erstellen.

Das kannst du über zwei Wege:
-> Über die Add*() Methoden (z.B. AddHours())
-> Durch addieren eines TimeSpan Objektes

Dabei musst du beachten, dass ein DateTime Objekt immer beides enthält: Datum und Zeit, willst du eine Uhrzeit auf ein bereits bestehendes DateTime Objekt festlegen, kannst du die Property Date des Nutzen.

z.B. so:


DateTime termin = DateTime.Now; 
DateTime zeit = DateTime.Now.AddHours(1.0);

DateTime terminUndZeit = termin.Date.AddHours(zeit.Hour).AddMinutes(zeit.Minutes).AddSeconds(zeit.Seconds);

Thema: Vom Seriellen Port empfangene Daten in eine Textbox schreiben
Am im Forum: Grundlagen von C#

Ist dein Problem, dass beim auslösen des SerialPort.DataReceived Events noch nicht alle Daten, die du benötigst im Buffer liegen?

Wenn dem so ist, dann musst du dir einfach das zwischenergebnis merken und die Auswertung erst dann starten, wenn alles da ist. --> Das wäre durch eine eigene Klasse zum Handling mit dem SerialPort einfacher gelöst.

Merke: Ein DataReceived Event könnte auch zwei unterschiedliche Informationen vom µC enthalten.

Da du aber nicht genau sagst, was der Fehler oder das Fehlverhalten ist können wir nur ein wenig reinstochern...

Interessant wäre:
-> Was kommt an?
-> Was sollte ankommen?