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 RED-BARON
Thema: Wie Kommunikation mit Datenbank aufbauen, Daten manipulieren und welche SQL-Version nehmen?
Am im Forum: Grundlagen von C#

Session 4 aus der Kollektion

https://www.youtube.com/playlist?list=PLw8ap9mWnEiJOB8Ib6w93YXUCwiVIa42e

Quellcode ist in der Videobeschreibungen verlinkt.

Thema: Android Device Manager kann nach dem Schliessen und Wiederöffnen voriges Device nicht starten.
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von dannoe
Versuch mal das SDK an einen Ort zu verschieben, in dem der Pfad keine Leerzeichen mehr enthält.
Musst natürlich dann die Pfade in VS und/oder der Umgebungsvariablen anpassen.

Könnte was dran sein.
Android-Studio installiert den SDK in
C:\Users\{username}\AppData\Local\Android\Sdk

Die AVD's liegen dann in
C:\Users\{username}\.android\avd

Scheint ein häufiges Problem zu sein
https://stackoverflow.com/questions/39645178/panic-broken-avd-system-path-check-your-android-sdk-root-value

Thema: Wie lokale Datei mit Dateien auf FTP Server vergleichen und nur untersch. Übertragen?
Am im Forum: Netzwerktechnologien

Öfters wird empfohlen Dienste nicht direkt erreichbar zu machen.

Wäre eine WebAPI hier nicht auch angebracht ?

Der kann die lokale Prüfsumme übergeben werden und der Vergleich
findet auf dem Server statt.

Thema: Wie Views und Windows mit WPF verwalten?
Am im Forum: GUI: WPF und XAML

hey Benutzer007,

möglicherweise findest Du hier einen Ansatz der Dir auch für weitere Problemstellungen eine Lösung bietet.

https://prismlibrary.com/docs/wpf/legacy/Navigation.html

https://github.com/PrismLibrary/Prism-Samples-Wpf/tree/master/17-BasicRegionNavigation

Thema: Kann man mySQL kostenlos in/für kommerzielle Anwendungen nutzen
Am im Forum: Smalltalk

kleines Missgeschick, wollte eigentlich die Zeitung lesen und die lese ich immer von hinten nach vorn.

Thema: Kann man mySQL kostenlos in/für kommerzielle Anwendungen nutzen
Am im Forum: Smalltalk

in den Beiträgen kam öfter vor, das MySQL-Protokoll ist auch von der GPLv2 betroffen.

Dem ist _nicht_ so ! Die Dokumentation in der auch das Client/Server Protokoll
beschrieben und erklärt wird ist nicht unter GPL !

https://dev.mysql.com/doc/internals/en/preface.html
This documentation is NOT distributed under a GPL license


Deswegen sind auch Libs wie diese möglich:
https://github.com/mysql-net/MySqlConnector

Thema: Kestrel Server von privatem Netzwerk aus erreichen
Am im Forum: Cross Platform Entwicklung - Mobile und IoT

android tethering over usb

tethering in den Netzwerkeinstellungen aktivieren
Ethernet over usb in den Entwicklereinstellungen setzen (Debugoptionen)

Gerät verbinden über USB. (WLAN und Mobiles Netzwerk ausschalten am Gerät)

Dein Rechner sollte jetzt ein neues Netzwerk melden.
commandline: ipconfig => IPv4 ablesen. Sollte Dir auffallen eine noch nie vorher gesehene Adresse zu entdecken. (neues öffentliches Netzwerk)

Ports/Anwendung in FW hinterlegen (eingehend)

Diese Adresse im Browser auf Deinem Gerät eingeben.

=> funktionierte bei mir wunderbar.

Thema: Unterschiede von Public, private, static, etc.
Am im Forum: Grundlagen von C#

brauchst kein Link, kauf Dir nen Fahrschein => Bücherei

Thema: Stacktrace unvollständig vom Fremdsystem
Am im Forum: Grundlagen von C#

da bin ich wieder, test.exe auf Produktionsrechner zeigt - kompletten - Stacktrace.

Zitat
Wenn da System.Linq im Stacktrace vorkommt (was es tun wird), liegt der Fehler
trotzdem in der Expression

richtig. so isses ja auch ( gewollt gewesen ).

Warum die test.exe den kompletten erwarteten Stacktrace ausgibt - mit Enumerable.MoveNext ... aber die Anwendung.exe nicht - hm gute Frage.

Evtl. bei an die 4000LOC ... kommt vll. mal was durcheinander^^ und tatsächlich ist der Fehler in ganz anderer Zeile.

Es gibt kein vernünftigen Grund, warum System.Linq Symbole nur in einer kleinen
test.exe aufgelöst werden können sollen und in einer 10 MB.exe nicht.

Antwort Eingangsfrage: Nein. :)

Zurück auf Start.

Thema: Stacktrace unvollständig vom Fremdsystem
Am im Forum: Grundlagen von C#

Zitat von witte
Vllt solltest Du auch keine Klassen bauen die über 3000 LOC haben...

nicht mein Code - Kollege hat den Fehler Anfang Februar als gefixt dokumentiert und gestern erst wieder - die einzige Änderung an der Datei war, dass mein Kommentar an der Zeile entfernt wurde !
Zitat von MrSparkle
Hi RED-BARON,

der Fehler tritt an dieser Stelle auf:

p.Nr == row.Nr

Mit deiner Änderung verhinderst du nur, daß die Exception ausgelöst wird.

Ausgeführt wird der Code aber erst beim Durchlaufen der foreach-Schleife. Da ist der StackTrace auch sehr eindeutig. Deine eigentliche Frage kann ich daher nicht nachvollziehen.

Mit der Änderung wollte ich erzwingen und nichts verhindern - ich vermute an der Stelle knallt es - einzig der Stacktrace fehlt mir um es "sehen" zu können.


Pille hat freilich Recht:
(p => p == null); hat nichts mit dem realen Fall zu tun. Im Test wollte ich sehen was passiert wenn:

foreach (var item in results)
{
      results = null;
}

Habe mehrere testfälle erstellt. Und jetzt eine Konsolenanwendung die ich mal versuche am Produktionsrechner auszuführen und bei der "row" null ist. Wenn da System.Linq im Stacktrace vorkommt ... liegt der Fehler womöglich doch wo ganz anders.

Danke an alle die mitgehirnt haben :)


@Geaz : 100% ( meine aktuelle Annahme ! ) .... der Beweis fehlt mir nur noch :) - da bin ich aber dran

Thema: Stacktrace unvollständig vom Fremdsystem
Am im Forum: Grundlagen von C#

Danke ich nehme keine Pillen :)

das würde einschließen, dass die PDB nicht zum EXE passt - das läßt sich leicht
provozieren und mit Glück erhalte ich einen Stacktrace _ohne_ Angabe von Zeilen oder komplett Schrott.

Das Problem ist mir wohl bekannt und würde es zunächst einmal ausschließen.
Im Beitrag habe ich die Stacktraces etwas vereinfacht um für fremde Augen es lesbarer zu machen. Im realen Fall vergleiche ich schon die passenden Quellcodestände zur ausgelieferten Exe.

und auch da komme ich eben auf die Zeile

foreach (var item in x)
unmittelbar nach

var x = X.Where(p => p.Nr == row.Nr);

Im Normalfall _sollte_ "row" nicht null sein - dieser Fall lässt sich aber häßlich reproduzieren - deswegen setze ich es im Code gleich selbst auf null !
Ergebnis: es knallt nicht in

var x = X.Where(p => p.Nr == row.Nr);
sondern wie im Fehler auch hier

foreach (var item in x)

Mir ist das auch logisch. Das was ich probiere und die Folge davon.

Aber was Du schreibst ist nicht ganz von der hand zu weisen, denn es gibt sehr wohl auch von _anderen_ Produktionssystemen Fehlermeldungen die den Stacktrace bis System.Linq ausweisen - allerdings auch mal mit und mal ohne Zeilenangaben.
Fehler
Ausnahme: System.ArgumentNullException: Value cannot be null.
Parameter name: source
at System.Linq.Enumerable.Select[TSource,TResult](IEnumerable`1 source, Func`2 selector)
at System.Linq.Enumerable.Min[TSource,TResult](IEnumerable`1 source, Func`2 selector)

Thema: Stacktrace unvollständig vom Fremdsystem
Am im Forum: Grundlagen von C#

Hallo,

2 Fehlermeldungen und meine Frage vorweg:
Ist es möglich, dass der Stacktrace aus System.Linq auf einem Produktionssystem nicht ausgegeben wird. Wenn ja - unter welchen Bedingungen ist dies denkbar ?


Meldung Fremdsystem ( StackTrace unvollständig ??? )

Progr.: ExecuteModifyCommand
Context:
Ausnahme: System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei ProjektName.ViewModel.ExecutePasteCommand(Object arg) in C:\ProjektName\ViewModels\ViewModel.cs:Zeile 3030.
bei Cinch.SimpleCommand`2.Execute(T2 parameter)


Meldung Eigensystem

Progr.: <ExecuteModifyCommand>b__1be
Context:
Ausnahme: System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei ProjektName.ViewModel.<>c__DisplayClass1ce.<ExecuteModifyCommand>b__1be(ViewModel p) in D:\ProjektName\ViewModels\ViewModel.cs:Zeile 3029.
bei System.Linq.Enumerable.<>c__DisplayClass6_0`1.<CombinePredicates>b__0(TSource x)
bei System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
bei ProjektName.ViewModel.ExecuteModifyCommand(Object arg) in D:\ProjektName\ViewModels\ViewModel.cs:Zeile 3030.
bei Cinch.SimpleCommand`2.Execute(T2 parameter) in D:\ProjektName\CinchV2\Commands\SimpleCommand.cs:Zeile 61.

der dazugehörige Quellcode:


2029:	var x = X.Where(p => p.Nr == row.Nr);
3030:	foreach (var item in x)  // NULL-Ref-Exception 
3031	{ ... }


Ich habe einiges ausprobiert und konnte eine NullReferenceException nur dadurch erzwingen, dass "row" zu null gesetzt wird. Was im Programmablauf
durchaus eine realistische Annahme ist - jedoch nicht berücksichtigt wurde !


Im Quellcode von .NET habe ich nachgesehen
https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs


public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) {
            if (source == null) throw Error.ArgumentNull("source");
            if (predicate == null) throw Error.ArgumentNull("predicate");
            if (source is Iterator<TSource>) return ((Iterator<TSource>)source).Where(predicate);
            if (source is TSource[]) return new WhereArrayIterator<TSource>((TSource[])source, predicate);
            if (source is List<TSource>) return new WhereListIterator<TSource>((List<TSource>)source, predicate);
            return new WhereEnumerableIterator<TSource>(source, predicate);
        }

Es wird effektiv immer ein Objekt zurückgegeben, was nicht null sein kann.

Weiter habe ich mit Tests wie diesem versucht die Ausnahme zu erzwingen was nicht gelang. Was mich nicht verwundert, wenn innerhalb von foreach die Referenz auf die zu durchlaufende Enumeration gehalten wird.


        [TestMethod, ExpectedException(typeof(NullReferenceException))]
        public void EnumerableNullReferenceException()
        {
            var _List = new List<object>();
            _List.Add(null);
            _List.Add(null);

            var results = _List.Where(p => p == null);
            foreach (var item in results)
            {
                results = null;
            }
        }

Herzlichen Dank !!!
Ein einfaches "JA" auf meine Eingangs gestellte Frage - würde mir weiterhelfen.

Thema: Kann ich eine App aktualisieren ohne App Store?
Am im Forum: Cross Platform Entwicklung - Mobile und IoT

- Webspace kostenlos.org besorgen
- Ftp-Client einloggen
- dann bist Du sicher in der Root
- deine app.apk dahin kopieren ( nix neuer Ordner, nix script, nix Datenbank )
- Download-Adresse http://kostenlos.org/app.apk

- Android: "HttpClient" googlen - findest schon^^

Thema: Kann ich eine App aktualisieren ohne App Store?
Am im Forum: Cross Platform Entwicklung - Mobile und IoT

Hallo Abt,

ja richtig.

API 9 und größer
apkFile.setReadable(true, false); // minimum API-Level 9 !

API 8 und kleiner
Runtime.getRuntime().exec("chmod 777 " + apkFile.getPath());


Edit: achso *g*... ähm, ja - fast unverändert. Die letzte Änderung knapp 10 Jahren ...

Thema: Kann ich eine App aktualisieren ohne App Store?
Am im Forum: Cross Platform Entwicklung - Mobile und IoT

ja genau.

also Ordner kannst Du einfach "update" definieren - dann ist das in der root deiner App.

"apkFile" für den Download also "update/app.apk" z.B.

Ich hab nochmal nachgesehen bei mir. Is bissel chaotisch - aber der Installer
muss natürlich die *.APK auch _lesen_ können, was nur der Fall ist, wenn die
Rechte auf der Datei entsprechend gesetzt sind.

Verwende ich so unverändert seit Android 1.6 (API 4)


	public static void install(Context context, File apkFile) {
		if (apkFile.exists()) {
			int currentapiVersion = android.os.Build.VERSION.SDK_INT;
			if (currentapiVersion ≥ android.os.Build.VERSION_CODES.GINGERBREAD){				
				apkFile.setReadable(true, false); // minimum API-Level 9 !
			}else{
				try {
					Runtime.getRuntime().exec("chmod 777 " + apkFile.getPath());
				} catch (IOException e) {					
					e.printStackTrace();
				}
			}
			
			Intent intent = new Intent();
			intent.setAction(android.content.Intent.ACTION_VIEW);				
			//intent.setDataAndType(Uri.parse("file://" + apkFile.getPath()), "application/vnd.android.package-archive");
			intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");			
			intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			context.startActivity(intent);
		}
	}

Thema: Fitness App erstellen Xamarin oder WebApp
Am im Forum: Cross Platform Entwicklung - Mobile und IoT

Thema müsste heißen:

Fitness App erstellen Pest oder Cholera ?

Du willst den gesamten Markt abdecken ? Warum dann iOS ...
und nicht zunächst die restlichen 80% mit Android ?

Dir glaubt eh keiner - dass Du 5 Jahre entwickelt hast nur weil deine
App 25 MB groß ist ...

Mach es nativ und wird glücklich - muss ja nicht gleich der NDK sein ...

Thema: Xamarin (Android): Zugriff auf SQLite aus zweiter App
Am im Forum: Cross Platform Entwicklung - Mobile und IoT

ich kann heute so beschissen schlafen

hab Dir mal ein Beispiel rausgefischt ...
https://developer.xamarin.com/guides/android/platform_features/intro_to_content_providers/part_3_-_creating_a_custom_contentprovider/

Thema: Kann ich eine App aktualisieren ohne App Store?
Am im Forum: Cross Platform Entwicklung - Mobile und IoT

Hallo

doch geht ( bei mir seit fast 10 Jahren so ) - alle Android-Versionen

- deine App verbindet sich mit deinem Server
- fragt nach einer neuen Version
- startet den Download
- installiert die APK per Installer

in etwa so:
https://stackoverflow.com/questions/4967669/android-install-apk-programmatically

Thema: Zusammenfügen / Merge von mehreren Datenquellen ... Ausgangsquelle XML
Am im Forum: Datentechnologien

mit DataTable.Merge könnten zumindest die 3 Dateien zunächst
zusammengeführt werden.
https://msdn.microsoft.com/de-de/library/fk68ew7b(v=vs.110).aspx
Nur der PK muss über 7 Spalten definiert werden ...
Von der Ergebnistabelle aus auf die beiden anderen mit Select und PK ...
zugreifen, die Strings zusammensetzen - fertig.

Nur sollen doppelte Einträge nicht doppelt sein - sicherlich.

Evtl. kann helfen die Spalte: CompatibilityNotes umzubenennen ...
CompatibilityNotes1, CompatibilityNotes2, CompatibilityNotes3
und mit MissingSchemaAction bei Merge arbeiten

Oder Sqlite nutzen "group_concat"
https://stackoverflow.com/questions/18778844/group-concat-in-sqlite

Wenn Du Dataset.Merge() in Betracht ziehst - wirst wohl nicht an MS SQL 2016 gebunden sein :)

Thema: Parallelitätsverletzung Exception abfangen und verarbeiten
Am im Forum: Datentechnologien

Zitat von caoimhin
Das Problem an dem ich nun hänge ist, dass wenn ich die DataRow per Code anpasse, sich zwar der Wert in selbiger an den der DB anpasst, der DataRowVersion.Original Wert allerdings immer noch der ursprünglich geladene ist, welcher dann zu der Fehlermeldung führt.

DataTable.Load mit PreserveChanges

https://msdn.microsoft.com/de-de/library/system.data.loadoption(v=vs.110).aspx

kann das Problem lösen. Der DataReader für die Load-Methode ist das
Ergebnis einer Abfrage die genau nur den Datensatz mit der gewünschten
ID holt. Das funktioniert aber alles nur dann so schön, wenn diese ID auch
als Primary-Key im DataTable definiert ist !

Im Ergebnis befinden sich danach die Werte aus Datenbank im DataRowVersion.Original-Wert.

Es gibt 3 Optionen
https://msdn.microsoft.com/de-de/library/system.data.conflictoption(v=vs.110).aspx

wobei CompareAllSearchableValues tatsächlich nur "SearchableValues" einbezieht und das
schließt alle Spalten die als "IsLong" markiert sind in den
Metadaten aus !

Das Problem lässt sich nur durch Verzicht auf DbCommandBuilder und DbAdapter vermeiden,
so dass dann auch "binary blob"- oder varchar-Spalten verglichen werden können.

Nur dann kann für jede Zeile ein individuelles Update erfolgen und ermöglicht
werden, dass 2 Arbeitsplätze den gleichen Datensatz aktualisieren können
wenn jeweils unterschiedliche Felder verändert wurden.

Jede andere Konfliktlösung muss entweder vom Anwender bestätigt oder
durch vorher festzulegende Regeln definiert werden.

Thema: SQLite-Abfrage mit Datumsfeld
Am im Forum: Datentechnologien

ja, die Frickelei war der Initialfehler - danach hilft nur noch drop table :)

Thema: SQLite-Abfrage mit Datumsfeld
Am im Forum: Datentechnologien

natürlich kann DataProvider damit umgehen - aber nur weil Du
anders als Thron die Werte als C# DateTime-Typ angibst und der
Provider daraus einen für Sqlite validen Datetime-STRING baut und
in die Tabelle einträgt. Das was Du in der Demotabelle stehen hast
sieht nicht so aus: 09.07.2017 00:00:00 sondern so: 1900-01-01 02:01:01.

Thron hat aber in seiner Tabelle stehen:
09.07.2017 00:00:00 und 14.12.2017 00:00:00

und nicht wie von Abt missverständlich angenommen wurde, es würde sich dabei um die angezeigten UI-Werte handeln - bzw. es sind die UI-Werte welche
1:1 in die Tabelle geschrieben wurden.

Bei den Formaten die Thron in der Tabelle hat hustet der DataProvider,
spätestens wenn er mit 0000-01-01 00:00:00 konfrontiert wird, was ein
valider Sqlite-Datum-Zeit-Wert ist aber kein Wert der in den c# DateTime Typ passt.

Selbst wenn Du bei Erstellung auf die Angabe DateTime verzichtest oder austauschst
cmd.CommandText = "CREATE TABLE Test( [ID] INTEGER PRIMARY KEY AUTOINCREMENT, [Name] Text, [Date] DateTime)";

funktioniert der Aufruf von
var dt = reader.GetDateTime(2);
korrekt, da erst hier der gewünschte Zieltyp implizit angefordert wird.

sqlite3.cs

 
    internal override void [B]Bind_Text[/B](SQLiteStatement stmt, int index, string value)
    {
      byte[] b = ToUTF8(value);
      int n = UnsafeNativeMethods.[B]sqlite3_bind_text[/B](stmt._sqlite_stmt, index, b, b.Length - 1, (IntPtr)(-1));
      if (n > 0) throw new SQLiteException(n, SQLiteLastError());
    }

    internal override void [B]Bind_DateTime[/B](SQLiteStatement stmt, int index, DateTime dt)
    {
      byte[] b = ToUTF8(dt);
      int n = UnsafeNativeMethods.[B]sqlite3_bind_text[/B](stmt._sqlite_stmt, index, b, b.Length - 1, (IntPtr)(-1));
      if (n > 0) throw new SQLiteException(n, SQLiteLastError());
    }

    internal override DateTime GetDateTime(SQLiteStatement stmt, int index)
    {
#if !SQLITE_STANDARD
      int len;
      return ToDateTime(UnsafeNativeMethods.sqlite3_column_text_interop(stmt._sqlite_stmt, index, out len), len);
#else
      return ToDateTime(UnsafeNativeMethods.sqlite3_column_text(stmt._sqlite_stmt, index), -1);
#endif
    }

Thema: SQLite-Abfrage mit Datumsfeld
Am im Forum: Datentechnologien

Für Sqilte gibt es nur ein halbes Duzend Datentypen und DATETIME gehört
definitiv nicht mit dazu. https://sqlite.org/datatype3.html

Wenn Du die Werte 09.07.2017 00:00:00 und 14.12.2017 00:00:00
im Datensatz stehen hast sind diese vom Typ: TEXT

Insbesondere dann, wenn die Tabelle mit Create Table Fahrzeuge JDT_StartDate DATETIME, .... erstellt wurde.
Alle Sqlite unbekannte Typen werden auf TEXT umgebogen.


Deswegen funktioniert die Abfrage nicht - auch nicht mit Parametern.

Was Du brauchst sind gültige TimeStrings https://sqlite.org/lang_datefunc.html
und diese TimeStrings kommen in Felder des Typ: TEXT

INSERT INTO Fahrzeuge (JDT_StartDate, JDT_EndDate, JDT) VALUES('2017-07-09 00:00:00', '2017-12-14 00:00:00', 'A-FD 2017')

SELECT * FROM Fahrzeuge WHERE JDT_StartDate < '2017-11-03 00:00:00' AND JDT_EndDate > '2017-11-03 00:00:00';

So funktioniert das ( ungeprüft ) und weiter wie in anderen Beiträgen hier im Forum zu lesen - Datum-Zeit-Angaben als UTC speichern und die Zeitzone dazu nicht vergessen.

Sqlite kann zwar die Zeitzone mit speichern - weil der Datum-Zeit-Wert eine TEXT ist :-)

2013-10-07 04:23:19.120-04:00

Andere Datenbansysteme können das aber genau wieder _nicht_ weil die
spezielle Typen für Datum-Zeit-Werte haben. Aus gründen der Kompatibilität
also besser ein Zeitzonen-Spalte pro Datum-Zeit-Wert erstellen.

JavaScript-Programmierer würden sich an einer solchen _gültigen_ Anweisung
zur Tabellen Erstellung nicht stören

CREATE TABLE tableName (f1 MEINEOMA ,f2 DEINOPA)

vola - funktioniert. In die OMA/OPA - Datenbank Typen passen auch Datum-Zeit-Werte oder Fließkommazahlen rein ... :)

CREATE TABLE tableName (f1 DATETIME ,f2 FUCKSQLITE)

INSERT INTO tableName (f1, f2) VALUES('Lustig ist das Zigeunerleben...', 'Zeitangaben sind doof')

Thema: Multi-Thread-Server-Client: Inwiefern beeinflussen Threads die Geschwindigkeit des Servers?
Am im Forum: Netzwerktechnologien

sorry hab es wohl falsch verstanden.

"Dabei wird jeder TcpCient in einen eigenen Thread ausgelagert und sendet (Stream.Write) in endlosschleife Daten an den jeweiligen Client."


"Ich hoffe ich habe das jetzt irgendwie richtig verstanden:

1.) Warten bis eine TCP-Verbindung aufgebaut wird
2.) Auslagern in einen Thread"

"

while(isRunning){
   try{
     TcpClient c = listener.AcceptTcpClient();
     threads.Add(new ServerThread(c));//ServerThread hält aktuell die Verbindung immer offen und wäre sende bereit...
    }
    catch(Exception ex){
         isRunning = false;

         //Besonderer Fehler wenn der Thread geschlossen wird...
         if(System.Runtime.InteropServices.Marshal.GetLastWin32Error() != 10004)
                 Console.WriteLine(ex);
     }
 } 
"

und so geht es durch den ganzen Thread.

Es sollte dennoch möglich sein ohne Blockierungen mehrere Verbindungen
in einem einzigen Thread verarbeiten zu können. Deswegen der Link zu
Asynchronous IO.


jetzt hab ich auch das Beispiel aus MSDN gefunden:
https://msdn.microsoft.com/de-de/library/fx6588te(v=vs.110).aspx

Die Asynchronous IO per Netzwerkkarte erfordert keinen Thread in der Anwendung auch das Betriebssystem muss keinen Thread zwangsläufig erstellen. Wie im oben verlinkten Video am Bsp. der Festplatte erläutert wird.

Thema: Multi-Thread-Server-Client: Inwiefern beeinflussen Threads die Geschwindigkeit des Servers?
Am im Forum: Netzwerktechnologien

Für jede Verbindung ein neuer Thread ist nicht wirklich optimal

https://www.youtube.com/watch?v=U5bTvc4yv5U&t=5514s

Die Anzahl möglicher Threads pro Prozess ist begrenzt - und die Grenze liegt nicht bei 10.000

Die Anzahl erzeugter Threads werden besser überwacht und begrenzt.

Asynchronous Socket Programming in C#

Threading

Viel Spaß und Erfolg

Thema: Coding Styles Horror
Am im Forum: Smalltalk

ja, übersehen - unter dem IF() steht, dass kein Eintrag existiert und jetzt ein neuer angelegt werden soll. Deswegen funktioniert 1. Variante auch nicht.
2. Variante funktioniert und ja 3 Variante würde nie funktionieren. - deswegen sag ich auch besser nichts dazu - sonst wird's wieder falsch.

Ich hätte es realisiert mit
if(!liste.Any()) oder list.count()==0 - damit das ! nicht übersehen wird auch wenn es weniger performat sein mag
{
// es existiert kein Eintrag, jetzt neu anlegen ?
}

was das IsSelected überhaupt soll - ich weiß es nicht.
Wenn ein Eintrag in der Liste ist der selektiert ist .... kommt auch die
Frage ob jetzt ein neuer angelegt werden soll, weil keiner existiert.

Das Variante 2 funktioniert im Sinne des Programmes ist reiner Zufall
und kann über die Selektierung vom Nutzer selbst bestimmt werden ...

Aber auch wieder nicht - weil diese Prüfung beim Öffnen der Ansicht/Laden
kommt und da hat niemals nie jemand was selektiert ...

Thema: SQL-Befehl (String) aus Klasse und Attribute erstellen
Am im Forum: Code-Reviews

SQL-Befehl (String) aus Klasse und Attribute erstellen ist evtl. nur der erste Schritt. Im zweiten Schritt wird das bauen des Befehls mit der tatsächlichen
Struktur der Tabellen abgeglichen. So dass "alte" Clients mit neuer Datenstruktur genauso sinnvoll arbeiten können wie neue Clients mit alter Struktur.
Für unsere mobile App gilt genau diese Anforderung, da niemals es möglich sein kann, dass die zentrale Applikation und erst recht nicht die mobilen Geräte
gleichzeitig mit einem Update versorgt werden können.
Ich weiß nicht ob die aktuellen Frameworks oder Provider so etwas unterstützen. Zu Zeiten von Android 2.1 habe ich nichts passendes gefunden.

Thema: Coding Styles Horror
Am im Forum: Smalltalk

hallo, ich finde es nicht lustig - es ist zum Heulen ...

if ((list.Count(p=>p.IsSelected) -1) == 0 )
=> Liste leer.
??

!! => Fix: (eingecheckt, Wochen später ...)

if ((list.Count(p=>p.IsSelected) -1) < 0 )
=> Liste leer.

wenn ich jetzt sage, dass die "-1" überflüssig ist, befürchte ich bleibt

if ((list.Count(p=>p.IsSelected)) < 0 )
=> Liste leer.
??

stehen und der Fehler ist wieder drin ....... es sei denn, in der Liste ist
ein "Blind"-Objekt enthalten, was immer da drin ist. Leider weit und breit
kein Kommentar und der Rest vom Code sieht genauso aus ...

Thema: SslStream AuthenticateAsClient überträgt manchmal Root Zertifikat nicht mit
Am im Forum: Netzwerktechnologien

und es vollkommen ausgeschlossen, dass die Server bei denen es funktioniert
die Root-CA des Clientzertifikates _nicht_ kennen ?

Mein Gedanke dazu, ein Server sendet auch nicht die CA des Serverzertifikates
beim SSLHandshake. Der Client ist im Besitz der vertrauenswürdigen CA und
validiert das Serverzertifikat. Die vertrauenswürdige CA kommt aber auf anderen Wegen
OS-Update, Browser-Update o.ä. auf den Client. Nicht beim
SSLHandshake. Das hatte ich heute erst in Bearbeitung - allerdings mit Java.


Und irgendwas ist seltsam bei den Mitschnitten - oder ?
Length: 2064 => Length: 1470 => Length: 1467
Length: 2968 => Length: 2964 => Length: 2961 => Length: 1464 + 1491
Wenn das zweite Beispiel vollständig ist, dann ist das erste unvollständig

1464 + 3 + 1491 + 3 = 2961 + 3 = 2964 + 3 = 2968 == vollständig ?
1467 + 3 = 1470 + 3 != 2064 == unvollständig ?

Wenn das Clientzertifikat unmittelbar von einer Root-CA signiert wurde
reicht es nur das Zertifikat allein zu senden. Ansonsten muss die komplette
Chain gesendet werden - ohne Root-CA. Es würde die komplette Verschlüsselung obsolete
machen, wenn gegen die gesendete Root-CA validiert werden würde.
Dann wäre JEDES Zertifikat valide und Man-in-Middle der Normalfall.

"Yes, the whole chain (except the root) should be sent. I'll test (first) and commit your fix. Thanks."

https://bugzilla.xamarin.com/show_bug.cgi?id=16974

Thema: Fehlerbehandlung mit Try/Catch innerhalb einer asynchronen Methode
Am im Forum: Grundlagen von C#

glaub nicht, schau mal hier

http://stackoverflow.com/questions/16626161/a-good-solution-for-await-in-try-catch-finally


static async Task f()
{
    ExceptionDispatchInfo capturedException = null;
    try
    {
        await TaskThatFails();
    }
    catch (MyException ex)
    {
        capturedException = ExceptionDispatchInfo.Capture(ex);
    }

    if (capturedException != null)
    {
        await ExceptionHandler();

        capturedException.Throw();
    }
}

vor c#6 braucht man async/await wohl kaum verwenden