Alle Beiträge von: 2013

Eine Liste dynamisch nach einem Datumsintervall filtern

Eine weitere Hilfsfunktion aus der Blogbeitragsserie Hilfreiche Funktionen in C# .NET. Die folgende Funktion habe ich implementiert, um eine Liste von Entityobjekten dynamisch anhand eines Spaltennamen und einem bestimmten Intervall filtern zu können.

Da die Datumsspalten in manchen Projekten in der Datenbank unterschiedlich benannt sind, war es lästig, immer wieder eine Funktion für den speziellen Fall zu implementieren. Hierfür musste eine dynamische Funktion her, welche relativ einfach anwendbar ist. Genau aus diesem Grund habe ich diese statische Erweiterungsfunktion implementiert: (mehr …)

Große Listen in Teilabschnitten iterieren

In letzter Zeit kommt es öfter vor, dass große Datenmengen durchiteriert werden müssen. Dabei kommt man manchmal an die Grenzen des Möglichen. Gerade bei wenig RAM kann es passieren, dass dieser bei großen Datenmengen nicht ausreicht und man in eine OutOfMemoryException läuft.

Mit diesem Artikel starten wir eine kleine Artikelserie in unserem Blog. Wir nennen diese „Hilfreiche Funktionen in C# .NET“. Wir werden hier nach und nach kleine Hilfsfunktionen vorstellen, welche wir geschrieben haben, um uns das Leben ein wenig einfacher zu machen.

Das kann man durch das sogenannte „Chunking“ verhindern. Chunking bedeutet, dass man nicht alle Datensätze in den RAM lädt und iteriert, sondern die Datenmenge in kleinere Teilstücke aufteilt und iteriert. (mehr …)

RAM-Benutzung der eigenen Anwendung zurücksetzen

Heute stand ich vor einem sehr interessanten Problem. Meine Anwendung hat über die Laufzeit so viel RAM verbraucht, dass der Rechner allgemein recht langsam wurde. Und das trotz einer ordentlichen Ausrüstung.

Als kleinen Quick-And-Dirty-Behelf habe ich mir dann eine Funktion zurechtgefrickelt, welche den RAM-Verbrauch für den aktuell laufenden (also den eigenen) Prozess zurücksetzt. (mehr …)

E-Mailadresse per LDAP für einen bestimmten Benutzer vom Active Directory holen

Du benutzt in deiner Anwendung als Authentifizierung bzw. Usererkennung direkt den im Active Directory angemeldeten Benutzer? Einfach, oder? Schwieriger wird es, wenn du an dem Punkt angelangst, an welchem du plötzlich die E-Mail-Adresse dieses Users benötigst.

Jetzt komplett auf eine eigenständige Benutzerverwaltung umzustellen wäre aufwendig und unnötig. Darum kann man mit folgender Funktion die Mailadresse für den aktuell angemeldeten Benutzer über LDAP abrufen:

Wichtig ist hier, dass man dem SearchFilter nur den Usernamen gibt. Man muss also mit Split vorher den Domänennamen entfernen.

Man kann diese Funktion auch benutzen, wenn man nicht selbst am Active Directory bzw. der Domäne angemeldet ist. Dann muss man lediglich dem DirectoryEntry noch einen validen Domänenbenutzer und das zugehörige Passwort übergeben. Näheres zu diesem Fall findet man in der MSDN.

Laufende Anwendung aus dem Programmcode heraus neu starten

Diese Woche musste ich eine Lösung finden, eine mit „Console.ReadLine()“ wartende Konsolenanwendung aus einem Thread heraus neu starten zu können. Da diese Funktionalität alles andere als trivial ist, dachte ich mir, dass ein Artikel darüber für den einen oder anderen sehr praktisch sein könnte.

Senden von virtuellen Tastendrücken an die Konsolenanwendung

Wenn man aus einem Thread heraus die wartende Konsolenanwendung ansprechen will, geht das nur indem man ihr vorgaukelt, dass der Benutzer eine Tastenkombination eingegeben hat. Ich habe mich hier für die Kombination „r“ + Eingabe entschieden. Den Sinn bei „r“ für einen Neustart (englisch „restart“) muss ich hier nicht weiter erläutern. Um diese virtuellen Keypresses benutzen zu können, muss man sich aus der user23.dll die Funktion „PostMessage“ importieren. (mehr …)

MS SQL 2008 RS, ein Wartungsplan kann nicht geändert werden.

Letztens stand ich vor dem Problem, die einzelnen Wartungspläne auf unserem SQL-Serven anpassen zu müssen. Dies gestaltete sich jedoch schwieriger als gedacht. Das Problem bestand darin, dass die einzelnen Wartungspläne nicht zu ändern waren. Ein Klick auf „ändern“ im SQL Management Studio, führte einfach zu keiner Reaktion.

(mehr …)

SSL-Zertifikat auf Windows Server mit IIS7 einrichten – Howto

In manchen Situationen ist es unerlässlich, ein SSL-Zertifikat für seine Webseite zu haben. Bei uns war es zwingend notwendig, da wir ein Impressum auf unserer COMEGU Facebookseite benötigten. Im folgenden Artikel beschreibe ich die notwendigen Schritte und Problemlösungen, um schnell und effizient ein SSL-Zertifikat auf einem Windows-Server mit IIS7 installieren zu können.

Zertifikat generieren

Zuerst besorgt man sich ein SSL-Zertifikat von einer bevorzugten Zertifizierungsstelle. In meinem Beispiel gehe ich von einem Zertifikat von Startcom aus.

Hat man den Prozess dort erfolgreich abgeschlossen, hat mein 2 Dateien. Eine domain.crt und eine domain.key. Diese beiden Dateien benötigt man, um eine Zertifikatdatei zu erstellen. “Domain” steht hier  nur als Platzhalter für die eigene Domain.

Für die Erstellung benötigt man das Tool „openSSL“. Dieses Tool wird benutzt um aus den beiden oben genannten Dateien eine „PFX“-Zertifikatdatei zu generieren. Das macht man mit folgendem Befehl in der Kommandozeile: (mehr …)

CSharp – Interop Excel Prozess richtig beenden

Wer kennt sie nicht die Plagerei mit Interop Excel und den Com-Objekten. Da implementiert man an einer komplexe Verarbeitungen über mehrere Worksheets und denkt sich, endlich geschafft. Aber Vorsicht – mal einen Blick in den Taskmanager geworfen? Wenn man viel bei der Implementierung mittels Debug-Modus getestet hat, findet man schnell mal eine Handvoll Excel Prozesse. Daraufhin schweift der Blick prompt zur Taskleiste. Wo man zur Überraschung nicht eine geöffnet Excel Anwendung vorfindet.

Durch den Einsatz der Microsoft.Office.Interop Libraries kommt das Component Object Model von Microsoft zum Einsatz. Dabei hat man Objekte und Referenzen erschaffen die sich schnell im eigenen Code-Abschnitt heimisch füllen und die beiden Welten COM und .Net verküpfen. Darüber hinaus machen sie sich auch gerne zusammen mit einer gesamten Excel-Instanz im RAM breit. Das kann schnell zu unangenehmen Memory Leaks führen. (mehr …)