RIA Services und Windows 8 mit OData

Es gibt aktuell zu viele Varianten Daten zu einer Windows 8 Store App (METRO) zu bringen. Dafür fehlt nach wie vor der direkte Zugriff auf einen SQL Datenbank.

In diesem Blog habe ich untersucht wie man einen RIA Service, bekannt aus Silverlight, mit Windows 8 verbindet. Es kommt Visual Studio 2012 zum Einsatz.

Zunächst habe ich ein Web Projekt angelegt. Bei Verwendung des MVC Templates scheint es Probleme zu geben, denen ich später auf den Grund gehe.

Im ASP.NET Web wurde die Datenbank Nortwhind.sdf in das Verzeichnis APP_DATA kopiert.

Als nächstes erzeugt man ein Datenmodell mit Entity Framework.

image

Man clickt sich durch die Dialoge (immer nur bestätigen)  bis man beim auswählen der Tabellen ist. Für das folgende Beispiel kommt die Customers zum Einsatz.

image

Im Entity Framework hat sich seit der Version 4.1 eine Änderung ergeben (Stichwort dbcontext ) die nicht kompatibel zu RIA Services ist. Deswegen muss man im Modell die Code Generation Eigenschaft ändern auf Default und die beiden .tt Dateien löschen.

 

image

Der Dialog wird nur angezeigt, wenn keine Tabelle im Model ausgewählt ist. Die .tt Dateien sieht man im Visual Studio Solution Explorer nur wenn “Show All Files” ausgewählt. Das Icon findet sich in der oberen Leiste des Visual Studio Explorer  ca in der Mitte, leicht rechts.

Weiter geht's mit der Erstellung des RIA Services. Das Template dazu ist  “Domain Service Class”.

 

image

Ganz wichtig ist den Odata Endpoint zu aktivieren, weil nur dann die Proxy Generierung im Windows 8 Projekt Erfolg haben wird.

Zum Test kann der RIA Service direkt im Webbrowser aufgerufen werden. Die URL  setzt sich zusammen aus Projektname- Domainserviceklasse .SVC. Der Pfadteil “Services” ist willkürlich, da ein HTTP Module den Request filtert.

http://localhost:19668/services/WebApplication1-domainservice1.svc/odata/

 

 

image

Mit Zusatz $metadata sieht man das Schema.

image

Nun kann man das Windows 8 Store Projekt zur Solution hinzufügen und dann per Add Service Reference den RIA Service hinzufügen.

image

Nun die Frage, wie programmiert man so was an. Doku habe ich keine gefunden die RIA Services und Winrt zusammen zeigt. Allerdings scheint der Proxy recht ähnlich zu funktionieren wie bei WCF Dataservices (noch ein Service Layer).

Zur Anzeige wird ein XAML Listview Control verwendet. Die Zeile mit DisplayMemberpath wird man normalerweise per XAML Deklaration erledigen.

Der erste VB.NET Code Block wird entweder bei Pageload oder auf Button Click ausgeführt. Eine Eigenart von RIA Services ist, der SET Anhang an den Tabellennamen. So ruft man auch die URL direkt auf.

 

Dim svc As ServiceReference1.DomainService1 = 
New ServiceReference1.DomainService1(
New Uri(http://localhost:19668/services/WebApplication1-domainservice1.svc/odata/))

Private
Sub Button_Click_1(sender As Object, e As RoutedEventArgs) listview1.DisplayMemberPath = "Company_Name" svc.BeginExecute(Of ServiceReference1.Customers) _ (New Uri("CustomersSet", UriKind.Relative), AddressOf fertig, svc) End Sub Public Async Sub fertig(ByVal result As IAsyncResult) Await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, Sub() listview1.ItemsSource = svc.EndExecute(Of ServiceReference1.Customers)(result).ToList End Sub) End Sub

Ich würde diese Weg wählen wenn, entweder eine RIA Service Schicht vorhanden ist, oder man auch Silverlight Clients bedienen möchte. Schließlich wird die Welt noch länger brauchen bis jeder ein Windows 8 Device hat.

Pingbacks and trackbacks (2)+

Kommentare sind geschlossen