17 February 2008 Astoria, ADO.NET Data Services, ADO.NET Entity Framework, ASP.NET 3.5 Extensions, SQL Server Compact Edition, System.AddIn, WCF Robert Muehsig

Wenn auch verspätet, hier die Details vom 2. Tag:

Am zweiten Tag der VSone ging es gleich wieder mit interessierten Vorträgen weiter.

Der erste Vortrag: Datenübertragung mit WCF

Hier ging es um die Windows Communication Foundation  - bekannt aus .NET 3.0. Zwar war das Thema jetzt nicht unbedingt neu, jedoch habe ich persönlich mit WCF noch sehr wenig (wahrscheinlich zu wenig) Kontakt gehabt. Jürgen Kotz ging intensiv auf die Serialisation der Daten ein - was der Unterschied zwischen den "DataContractSerializer", "XmlSerializer" und dem "NetDataContractSerializer" ist und warum der letzte eher ungeliebt ist.
Interessant fand ich die Möglichkeiten der "Vorwärtskompatibilität" oder Roundtripping von Services mit einem einfachen Trick: Das IExtensible Interface deckt solch einen (sehr wahrscheinlichen Fall) ab. Auch Versionierung mit dem Order Attribut wurde gezeigt.

Tools die nett sind: SvcUtil und der WCFConfigEditor.

Zweiter Vortrag: SQL Server Compact Edition

Ein recht kurzer, aber sehr gut gemachter Vortrag von Senaj Lelic. Hier drehte sich alles um den SQL Server in seiner kleinsten Ausführung: Der "Compact Edition". Wenn jemand mal eine (offline) Desktopanwendung geschrieben hat, kennt das Problem, dass irgendwo die Daten gespeichert werden müssen. Xml ist unsicher (jeder kann die Datei editieren) und irgendwie ist das alles nicht so ganz fein. Einen SQL Server ist allerdings zu fett - man will niemanden zumuten erstmal einen kompletten (selbst in der Express Version) Server zu installieren. Genau hierfür ist die Compact Edition gedacht.
Eingebaute Features:

- Kann mit dem Management Studio verwaltet werden
- "fühlt" sich wie ein großer SQL Server an (SQL, Transaktionen, Verschlüsselung)
- Lizenzfrei (und das bei einem MS Produkt!)
- Einfachstes Deployment: MSI, ClickOne oder man kann die ca. 7 DLLs aus denen die Compact Edition besteht auch einfach in sein Output Directory kopieren und die Anwendung läuft!
- Speichergröße: 2MB und Arbeitsspeicherverbrauch: 5MB!
- Datenbankgröße bis zu 4 GB
- Sync Framework ist integriert
- Seit .NET 3.5 soll es LINQ Support geben (das will ich allerdings erstmal selber ausprobieren ;) )

Ich denke ich werde mal eine nette WPF Applikation mit dem dem SQL Server Compact Edition zusammen bauen ;)

Dritter Vortrag: System.AddIn

Wer schon immer mal eine Plugin/Addin Möglichkeit in seiner Applikation einbauen wollte, der sollte System.AddIn mal näher anschauen. Christian Nagel hat dieses doch recht komplexe Thema gut erklärt - auch wenn ich zeitweise bei den ganzen Contracts, Interfaces und Views nicht durchgesehen habe, wurde es am Ende ein klares Bild. Der Pipeline Builder ist eine große Hilfe.
Ein schickes Beispiel am Ende war folgendes: Wir haben eine WPF Anwendung, welches als Host dient, und wollen nun über ein AddIn die Oberfläche mit irgendeinen WPF User Control erweitern. Das AddIn beinhaltete nur das User Control und man konnte es direkt in die Host Anwendung integrieren - ohne das direkte Referenzen darauf liefen - das AddIn lief sogar in einer anderen AppDomain. .NET Remoting macht es möglich.

Nächster Vortrag: ADO.NET Entity Framework

Anschließend an den LINQ to SQL Vortrag, ging es heute um den großen Bruder - auch wieder von Christoph Wille. Das ADO.NET Entity Framework unterscheidet sich zum Teil gravierend von LINQ to SQL - die Unterschiede waren mir erst nicht ganz klar. Ich will es mal versuchen zu Erklären: Bei LINQ to SQL baut man seine komplette Datenbank einfach in Business Objekte um - das wird meistens so gemacht und klappt auch wunderbar (jedenfalls mit MS SQL). Das ADO.NET EF geht eher Objektgetrieben ran - wer mit seinen Business Objekten mehr machen will (Vererbung, Verschachteln etc.) ist hier wesentlich flexibler.
Infos gibts auf den Blog von Mike Taulty oder auch im CoDe Magazine (dort müsste noch mehr sein - ich habs auf die schnelle leider nicht gefunden). Auch interessant sind die ADO.NET Samples auf Codeplex.

Wer das ADO.NET Entity Framework testen will, benötigt die ASP.NET 3.5 Extensions (da es momentan beta ist und in einem rutsch mit den Extensions kam) und natürlich den Designer.

Das ADO.NET Entity Framework ist herstellerunabhängig - jeder kann einen Provider dazu schreiben.

Insbesondere das Entity Data Modell wurde anschaulich erklärt - was CSDL, MSL und SSDL ist. Im Grund ein Mapping (MSL) zwischen Objekten (CSDL) und Strukturen (SSDL).

Insgesamt wird das ADO.NET Entity Framework später sicherlich für viele Enterprise Applikationen eine interessante Option sein - LINQ to SQL wird deswegen aber nicht begraben. Da beides LINQ benutzt wäre sogar eine Migration später möglich - auch wenn man einige Methoden ändern müsste, weil LINQ to SQL z.B. ein DataContext benutzt und ADO.NET EF einen ObjectContext.

Wer jetzt etwas verwirrt ist, der sollte sich diese Seite anschauen: LINQ to Relational Data

Letzter Vortrag: ADO.NET Data Services ("Astoria")

Der letzte Vortrag auf der VSone - wieder mit Christoph Wille. Die ADO.NET Data  Services liegen ebenfalls mit bei den ASP.NET 3.5 Extensions dabei - nur hab ich sie noch nie benutzt.

Stellen wir uns vor: Wir haben unsere Datenbank schon komplett als LINQ to SQL (oder ADO.NET EF) Framework im Code verfügbar. Jetzt wollen wir diese Daten über REST (man spielt man eigentlich die ganze Zeit mit der URI rum) in AJAX, Silerlight oder anderen Clientanwendung verfügbar machen. Für ASP.NET AJAX Anwendungen müsste man in einem solchen Fall sehr viele Webservices schreiben. Mit "Astoria" geht das Out-of-the-box!

Man setzt einen ADO.NET Data Services auf und sagt welche Datenquelle genommen werden soll (unsere DataContext von LINQ to SQL z.B.) und legt dann noch fest, welche Tabellen frei zugänglich sein müssen. Wenn man dies ausführt wird ein WCF Service gestartet, der über die URI die jeweiligen Daten rausgibt:

http://meinTollerServer.de/Customers würde z.B. alle Customers anzeigen als XML (ATOM Format) oder JSON.
http://meinTollerServer.de/Customers(1) würde nur den Customer mit dem Primary Key "1" wiedergeben

Filterung, Sortierung und viele andere Optionen stehen auch noch zur Verfügung.

Das ganze geht mit "Astoria" - Daten löschen, ändern und erstellen geht natürlich ähnlich.

Sehr interessanter Ansatz um schnell die Daten zu verteilen ohne große Webservices zu generieren - zur Mix gibts neues!
In Desktopanwendungen kann man übrigends diese "URI" Abfrage mithilfe von LINQ zusammenbauen.

Fazit von der VSone

Eine sehr tolle Veranstaltung, welche eigentlich alle Gebiete (von Administratoren, Projektleitern oder Entwicklern) abdeckt - der Entwickler Track war sehr informativ und hatte viele Neuerungen gezeigt. Es hat sich also gelohnt :)


Written by Robert Muehsig

Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de

If you like the content and want to support me you could buy me a beer or a coffee via Litecoin or Bitcoin - thanks for reading!