29.07.2009, 08:00 Uhr

Silverlight fürs Unternehmen - die .NET RIA Services

Wer Silverlight oder allgemein RIAs nur mit HD-Video, Browser-Games und anderen eher belanglosem Zeitvertreib in Verbindung bringt, muss in naher Zukunft umdenken, denn nach dem Willen von Microsoft sollen in Zukunft auch oder vor allem typische Business-Anwendungen auf der Silverlight-Plattform entstehen, die ihre Daten via REST- und ADO.NET-Data Services über das Internet holen.
RIAs sind im Kommen. Während aktuelle Rich Internet Applications (RIAs) in erster Linie HD-Videos ins Web bringen, Katalogseiten multimedial anreichern oder die Auswahl eines Gebrauchtwagens erleichtern, sollen sie in Zukunft auch auf dem Unternehmensarbeitsplatz eine feste Rolle spielen und im Browser nicht nur das Abrufen, sondern auch Bearbeiten und Erfassen von im Arbeitsablauf anfallenden Daten ermöglichen.Vom Desktop ins Web und wieder zurückEntwickler, die bislang klassische mehrschichtige Anwendungen entwickelt haben, bei denen eine Windows-Anwendung das Front-End darstellt, müssen bei einer Silverlight-Anwendung vor allem beim Datenbankzugriff komplett umdenken. Während bei einer Windows-Anwendung das komfortable und inzwischen überaus vertraute ADO.NET-Modell zur Verfügung steht, das in der Regel über einen O/R-Mapper wie z.B. NHibernate oder Open Access angesprochen wird, stehen bei einer Browser-Anwendung weder eine Datenbank noch ein mit ADO.NET vergleichbares Programmiermodell zur Verfügung. Eine Silverlight-Anwendung hat aktuell im Wesentlichen drei Möglichkeiten, um über das Internet auf eine Datenbank zuzugreifen:1. Über die mit .NET 3.5 SP1 eingeführten ADO.NET Data Services2. Über einen WCF-Service3. Allgemein über ein Web-ServiceAuch wenn alle drei Techniken relativ einfach zu handhaben ist, es ist zusätzlicher Code erforderlich, der unter Umständen in jedem Client erneut codiert werden muss. Ein weiterer Aspekt, der bei einer traditionellen Desktop-Anwendung im Allgemeinen keine Rolle spielt ist der asynchrone Abruf der Daten, der durch den Umstand resultiert, dass die Abfrage über HTTP abgewickelt wird. Die ADO.NET Data Services bieten zwar alle Möglichkeiten, um typische CRUD-Datenbankoperationen (Create, Read, Update und Delete) über HTTP komfortabel durchführen zu können, sie stellen aber nur das absolut notwendige Mindestmaß an Funktionalität zur Verfügung. Es fehlt eine ,,API", durch die Entwickler bei einer Silverlight-Anwendung (oder allgemein bei einer Client-Anwendung), die auf Unternehmensdaten zugreifen soll, das sprichwörtliche Rad immer nicht immer wieder neu erfinden müssen und durch sie gleichzeitig einen Satz von Entwurfsmustern erhalten, mit deren Hilfe sie die immer wieder kehrenden Anforderungen implementieren können. Diese neue ,,API" stellt Microsoft über die noch im Teststadium befindlichen .NET RIA Services zur Verfügung, die auf der Mix09-Konferenz im März dieses Jahres erstmals vorstellt wurden, und die aktuell in einer July CTP vorliegen. Die finale Version soll nach den derzeitigen Plänen in der ,,ersten Hälfte 2010" freigegeben werden und auf .NET 4.0 und VS 2010 aufsetzen (aber kein Bestandteil des .NET Frameworks werden). .NET RIA Services im ÜberblickDie .NET RIA Services sollen die Umsetzung mehrschichtiger Anwendungen mit einer Datenbank im Hintergrund sowohl für Silverlight- als auch für ASP.NET-Anwendungen auf eine neue, einheitliche Grundlage stellen. Anstatt den Datenzugriffscode in jeder Client-Anwendung immer wieder aufs Neue implementieren zu können, greifen Entwickler über eine DomainService-Klasse, die in der Server-Anwendung den Zugriff auf die Datenbank/Datenquelle kapselt, auf die Daten zu, wobei die Abfragen mit den Möglichkeiten von LINQ äußerst komfortabel gestaltet werden können und z.B. SQL nicht erforderlich ist. Die .NET RIA Services werden in einem umfangreichen Dokument ausführlich beschrieben, das Microsoft auf der Downloadseite der .NET RIA Services zur Verfügung stellt [1]. Das Dokument enthält auch ein kleines Schritt für Schritt-Beispiel, das den Einsatz der .NET RIA Services zeigt. Ein wenig besser eignet sich ein ,,Walk through"-Beispiel [2]. Abbildung 1: Dank der .NET RIA Services muss die Anwendungslogik für unterschiedliche Clients nur noch einmal geschrieben werdenDie Entwickler der .NET RIA Services gingen von der Voraussetzung aus, dass eine moderne, mehrschichtige Internet-Anwendung auf der einen Seite unterschiedliche Clients (Silverlight, ASP.NET, Standard-Clients mit HTML/JavaScript oder WCF) besitzt, die über die Anwendungslogik, die auf einem Webserver läuft, mit einer Datenbank oder allgemein einer ,,Datenablage" kommunizieren. Für den Datenaustausch kommen unterschiedliche Protokolle und Formate, wie REST, SOAP, JSON usw. zum Einsatz. Mit Hilfe der .NET RIA Services kann die Anwendungslogik für den Datenbankzugriff so implementiert werden, dass sie unabhängig vom Client wird und auch auf der Serverseite eingesetzt werden kann. Ein Blick hinter die KulissenIm Mittelpunkt steht eine Domainklasse, die auf dem Server (bzw. der Mittelschicht) einen Satz von Operationen anbietet, die entweder von einem Assistenten nach Auswahl der Datenbank generiert oder vom Entwickler nachträglich hinzugefügt wurden. Die aktuelle CTP unterstützt zwar nur das Entity Framework und LINQ to SQL, die finale Version soll praktisch mit jeder Form von Datenmodell zusammenarbeiten, das in modernen Webszenarien eine Rolle spielt, und z.B. NHibernate genauso unterstützen wie die Amazon Elastic Cloud Computing Services (EC2) und natürlich die Microsoft Azure Plattform. Auch soll Silverlight in Zukunft nicht der einzige Client bleiben. Neben APS.NET- sollen die .NET RIA Services z.B. auch WPF-Desktop-Clients zur Verfügung stehen.Die Domain Services-Klasse stellt domainspezifische Operationen zur Verfügung. Sie leitet sich von einer datenproviderspezifischen, generischen Klasse wie z.B. LinqToSqlDomainService ab und wird mit dem DataContext einer konkreten Datenbank parametrisiert::[EnableClientAccess] public class NwService : LinqToSqlDomainService Das [EnableClientAccess]-Attribut bewirkt, dass die .NET RIA Services nach Auswahl einer Datenquelle verschiedene Klassen für den Client anlegen. Dazu gehört die DomainContext-Klasse, die grundlegende Dienste für das Durchführen von Operationen, für die Objektidentität und Änderungsverfolgung zur Verfügung stellt. Außerdem stellt sie ein bindungsfähiges EntityList-Objekt zur Verfügung. Abbildung 2: Die .NET RIA Services fügen für Silverlight die Vorlage Silverlight Business Application hinzu Ein kleines Beispielprojekt kann wie folgt umgesetzt werden:1) Es wird ein neues Silverlight Application-Projekt angelegt, das in eine ASP.NET-Webanwendung eingebettet ist. Das Silverlight-Projekt (Client) stellt die Client-Schicht dar, die Web-Anwendung (Server) die Mittelschicht. Wurde die .NET RIA Services CTP installiert, steht die Option Enable .NET RIA Services zur Auswahl, die gesetzt wird. Dieses RIA-Link führt dazu, dass eine Brücke zwischen dem Client und dem Server eingerichtet wird und beide die im Rahmen der DomainService-Klasse zur Verfügung gestellte Anwendungslogik gemeinsam nutzen können. Damit liegt eine reguläre Silverlight-Anwendung vor, die "RIA Services enabled" ist.2) Im zweiten Schritt wird beim Server die Datenschicht in Gestalt einer ADO.NET Entity Data- oder LINQ to SQL-Vorlage hinzugefügt, die mit einer oder mehreren Tabellen einer Datenbank verbunden wird.3) Jetzt kommen die .NET RIA Services in Spiel, in dem zum Server eine Domain Service Class hinzugefügt wird. Es wird ein Dialogfeld geöffnet, in dem das Entity Framework- oder LINQ to SQL-Datenmodell ausgewählt wird. Abbildung 3: Die DomainService-Klasse wird mit einer Datenquelle verbundenDas Ergebnis ist eine Klasse, die sich von der LinqToEntitiesDomainService- oder LinqToSqlDomainService-Klasse ableitet, und die unter anderem eine Methode zum Abrufen der Datensätze anbietet. In dieser Klasse wird die Anwendungslogik implementiert bzw. hinzugefügt (z.B. kann das Abrufen der Datensätze unter Anwendung domainspezifischer Kriterien modifiziert werden). Die Domainservice-Klasse, die jederzeit erweitert werden kann, ist die offizielle Schnittstelle zu den Daten der Mittelschicht. Die Daten stehen in derselben Form sowohl in der Client- als auch in der Mittelschicht zur Verfügung.Die große Frage ist natürlich, wie greift der Silverlight-Client auf die Daten zu? Über WCF, über ADO.NET DataServices, über eine ganze neue und noch geheime Technik? Weder noch. Das unscheinbare Setzen der Option Enable .NET RIA Services im Client-Projekt bewirkt, dass unter anderem eine DomainService-Klasse generiert wird, die lediglich im Projektmappen-Explorer zunächst nicht sichtbar ist. Sie enthält unter anderem eine Properties, gegen die z.B. ein DataGrid gebunden werden kann. Intern erfolgt der Datenaustausch mit dem Server über die RIA-Bibliothek natürlich mit HTTP, doch die Details müssen den Entwickler nicht interessieren. .NET RIA Services - Brücke zu UnternehmensdatenSilverlight wird in naher Zukunft auch für Unternehmensanwendungen eine wichtige Rolle spielen. Mit dem DataForm-Control, das aus einem Datensatz automatisch eine Eingabemaske generiert, die u.a. eine Eingabevalidierung umfasst, wurde ein erster Schritt getan. Mit den .NET RIA Services folgt das Verbindungsstück zur Datenbank. Die .NET RIA Services verbinden einen (Silverlight-) Client mit einem (ASP.NET-) Backend und generieren Proxy-Klassen, die der Client benutzt, um über Funktionsaufrufe in der Anwendungslogik domainspezifische Operationen für Daten(bank)-abrufe und -Aktualisierungen und andere Service-Operationen durchzuführen und eine Datenbindung nutzen zu können, die nicht jedes Mal erneut implementiert werden müssen. Zurzeit liegen die .NET RIA Services noch nicht in endgültiger Form vor, das wird voraussichtlich erst nach der Fertigstellung des .NET Framework 4 und Visual Studio 2010 der Fall sein. Der bei der Entwicklung von RIA-Anwendungen bislang übliche Beta-Zustand wird damit wieder einmal ein wenig verlängert..Entwickeln mit den RIA Services - Tipps für EntwicklerMit VS 2008 SP1, den Silverlight 3 Tools, dem (optionalen) Silverlight 3 Toolkit (das u.a. das DataForm-Control enthält) und der Juli CTP der .NET RIA Services steht alles zur Verfügung, was zur Umsetzung eines ersten Prototyps benötigt wird. Ein wichtiger Tipp: Man sollte unbedingt mit der englischen Version von VS 2008 arbeiten, da leider nur diese Version sowohl von den aktuellen Silverlight 3 Tools und den .NET RIA Services unterstützt wird. Auch die Parallel-Installation eines deutschsprachigen VS 2008 SP1 mit einem englischsprachigen Pendant wird vom Autor nicht empfohlen, auch wenn sie von Fall zu Fall funktionieren mag. Ein weiterer Tipp besteht darin, bei der Web-Anwendung in den Projekteigenschaften eine feste Portnummer einzustellen, da sich dies im Zusammenspiel mit einem Silverlight-Client als vorteilhaft bzw. notwendig herausgestellt hat. Ein erstes Erfolgserlebnis beschert das gewissenhafte Durcharbeiten des "Walkthrough: Creating your first .NET RIA Services Application".Kasten: Neuerungen bei Silverlight 3 für Business-Anwendungen>Validation Framework (über Attribute)>Navigation Framework (solange ein Kind-Fenster geöffnet ist, kann das Elternfenster nicht geschlossen werden)> Pager-Control für die seitenweise Darstellung von Datensätzen (Teil des Silverlight 3 Toolkits)>Verbessertes DataGrid (Grouping)>DataForm-Control (Teil des Silverlight 3 Toolkits)>Object to Object-Databinding>Out of Browser-Modus>Speichern unter-DateidialogLinks[1] http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=76bb3a07-3846-4564-b0c3-27972bcaabce&displaylang=en[2] http://code.msdn.microsoft.com/RiaServicesPeter Monadiemi


Das könnte Sie auch interessieren