Die WCF Dataservices sind aktuell in der Version 5.0 angekommen und damit auch kompatibel zu Entity Framework mit dem seit 4.1 neuen Typ dbcontext. Das bedeuted in Visual Studio 2012 und einem webprojekt kann ein EF Model direkt als Quelle für den WCF Dataservice verwendet werden.
Der VB.NET Code für den minimal Service sieht wie folgt aus.
Public Class WcfDataService1
' TODO: replace [[class name]] with your data class name
Inherits DataService(Of NorthwindEntities)
' This method is called only once to initialize service-wide policies.
Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
' TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
' Examples:
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead)
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All)
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3
End Sub
End Class
Damit lässt sich die Customers Tabelle in der Datenbank lesen und aktualisieren. Anders als beim
RIA Service ist der Aufruf in der URL per REST direkt mit Customers (Case sensitiv) durchzuführen.
Die Proxy Generierung im Windows 8 Projekt ist dann sogar per Discover im Add Service Reference Dialog möglich.
Der VB.NET Code im Windows 8 WinRT ist nahezu ident zu RIA Services Nutzung.
Dim svc As New ServiceReference2.NorthwindEntities(
New Uri("http://localhost.fiddler:19668/wcfdataservice1.svc"))
Private Sub Button_Click_1(sender As Object, e As RoutedEventArgs)
listview1.DisplayMemberPath = "Company_Name"
svc.BeginExecute(Of ServiceReference2.Customers) _
(New Uri("Customers", 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 ServiceReference2.Customers)(result).ToList
End Sub)
End Sub