Archiv für die Kategorie „C#“

Streaminhalt im Debugger

Mittwoch, 17. Februar 2010

Sitzt man mal wieder vor dem Debugger und interessiert sich, was nun eigentlich für Daten in diesem Stream stehen, dann hilft das Immediate Window. Aber selbst damit ist es mir bisher nicht unbedingt einfach gefallen.

Folgendes Snippet erfüllt den Job aber als Einzeiler:

File.WriteAllText("c:\\streamOut.txt", new StreamReader(meinStream).ReadToEnd());

Zu beachten ist, dass je nach Typ von meinStream die Position anschließend zurück gesetzt werden muss oder auch, das dies gar nicht möglich ist und daher die weitere Programmausführung fehlerhaft wird.

Seltsamer Fehler beim Start einer Silverlight-Anwendung.

Mittwoch, 9. September 2009

Nach “F5” kommt erst dieses Fenster:

image

Und dann dieses:

ArgumentException occured: Der Kulturname "uploads" wird nicht unterstützt. Parametername: name

Es handelt sich um eine Silverlight-Anwendung mit den .Net RIA Services. Bilder sind auch involviert. Der Fehler kommt, egal ob die Anwendung im Internet Explorer oder im Firefox startet, allerdings nur einmal nach einem Rebuild. Folgende Starts haben den Fehler nicht und klicke ich auf “Continue” funktioniert meine Anwendung auch ganz normal.

Ich habe schon im ganzen Projekt nach “uploads” gesucht ohne Erfolg sowie das komplette Projekt vor und nach dem ersten Start gedifft, aber auch hier keine Auffälligkeiten.

Ungewöhnlich ist auch, dass die Nachricht der Exception auf Deutsch ist, obwohl Visual Studio, Silverlight SDK und die .Net RIA Services auf Englisch installiert sind.

Ich konnte das Problem bisher nicht lösen, daher die Bitte, wer was weiß, sich bei mir zu melden. Habe ich eine Lösung, werde ich ein Update schreiben.

(weiterlesen…)

.Net RIA Services – kurz erklärt

Montag, 27. Juli 2009

image

Ich hab mich etwas mit den .Net RIA Services beschäftigt und möchte nun einen groben Überblick geben. Wir stellen uns also eine 3-Schichten Architektur vor, bestehend aus Silverlight 3, ASP.net und einem quasi beliebigem Data Access Layer.

Der Data Access Layer erzeugt aus einer Datenbank Objekte, welche nun in der mittleren Schicht sind (im Bild “Order”) und bietet auch die Standard CRUD-Funktionalität. In der Regel kann man diese Objekte nicht ohne weiteres an den Client übergeben.

Hier kommen nun die .Net RIA Services ins Spiel und generieren in der Silverlight-Applikation eine identische Klasse und ein asynchrones Kontextobjekt, um mit der Serviceschicht zu interagieren.

Alles was man noch tun muss, ist in der Mittelschicht eine Serviceklasse zu schreiben, die alle Funktionen zur Verfügung stellt, die der Client nutzen können soll. Dies können die normalen CRUD-Operationen sein, spezielle Servicemethoden, die mit den Objekten interagieren oder ganz allgemein beliebige Funktionen.

Reichert man die Klassen durch Metadaten an, bekommt man die Validierung der Daten auf beiden Schichten “fast geschenkt”:

[Range(0, 120, ErrorMessage = "Sprechende Fehlermeldung!")]
public int? Age { get; set; }

Hat man dies z.B. so bei einer Person definiert, wird der Nutzer bereits beim Eingeben der Daten auf dem Client mit einer sprechenden Fehlermeldung auf seinen Fehler hingewiesen. Zusätzlich wird aber auch auf der Mittelschicht eine erneute Validierung der Daten vorgenommen. Dies ist eine sehr schöne Ausprägung des DRY-Prinzips.

Außerdem werden alle Dateien mit dem Dateinamen *.shared.cs oder *.shared.vb in den Client kopiert, was Shared Code ermöglicht. Dies kann man nutzen, um generierte Properties anzulegen.

Das Ganze erleichtert den Entwicklungsprozess von viel langweiliger Arbeit und gibt einem mehr Zeit, für die wesentlichen Aspekte!

Weiterführende Links:

Präsentation auf der Mix09

Download von Setup und Dokumentation