Um dieses Beispiel nachvollziehen zu können, empfiehlt sich die Lektüre des How to “erzeuge einen WCF Service mit der Nordwind Datenbank”. Darüber hinaus habe ich vor einiger Zeit einen Artikel geschrieben wie man Select Update, Delete und Insert mit einem WCF Service und Client abbildet.
In diesem Blog wird ganz rudimentär eine Liste von Kunden angezeigt. Wie immer mit einem METRO VB.NET Client. Persönlich glaube ich, das dies in Zukunft immer seltener mit WCF als Service Schicht geschehen wird. SOAP ist einfach schwergewichtig. Aber wir haben sie in den letzten Jahren geschaffen und so sollte man auch wissen wie man einen einbindet.
Wenn sich der WCF Service in der gleichen Solution befindet, reicht es im METRO Projekt. Add Service Reference per Context Menü auszuwählen. Nach einem Click auf Discover muss der Service sichtbar sein.
Daran ist auch nichts wirklich Neues. Glaubt man.
Ein erster Blick hinter die Kulissen offenbart, es gibt kein config File mehr. Jetzt geschieht Konfiguration im Code. Die Datei Reference.vb (.cs) sieht man nur wenn man im Solution Explorer show all files ausgewählt wurde.
Die Service Methoden werden asynchron und Task basierend angelegt. Der Code Schnipsel stammt aus dem Interface.
<System.ServiceModel.OperationContractAttribute(Action:=http://tempuri.org/IService1/GetCustomer,
ReplyAction:="http://tempuri.org/IService1/GetCustomerResponse")> _
Function GetCustomerAsync() As
System.Threading.Tasks.Task(Of System.Collections.ObjectModel.ObservableCollection(Of ServiceReference2.Customers))
Die Konfiguration wird dann im Code an passender Stelle durchgeführt, Für mein Beispiel lasse ich alles so wie es ist.
''' <summary>
''' Implement this partial method to configure the service endpoint.
''' </summary>
''' <param name="serviceEndpoint">The endpoint to configure</param>
''' <param name="clientCredentials">The client credentials</param>
Partial Private Shared Sub ConfigureEndpoint(ByVal serviceEndpoint As System.ServiceModel.Description.ServiceEndpoint,
ByVal clientCredentials As System.ServiceModel.Description.ClientCredentials)
End Sub
Wer partout Änderungen vornehmen will dem empfehle ich die MSDN Doku WCF und WinRT.
Mein Beispiel braucht jetzt nur mehr den ASYNC und AWAIT Trick. Der Service wird instanziiert und dann GetCustomers asynchron angestoßen und die Rückgabe an das ListView übergeben.
Private Async Sub UserControl10_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
Dim svc As New ServiceReference2.Service1Client
Dim d = Await svc.GetCustomerAsync
listview1.ItemsSource = d
listview1.DisplayMemberPath = "Company_Name"
Textbox1.text = d.Count
End Sub
Alle MVP, MVC oder MVVM Fans werden mich für obige VB.NET Code Zeilen hassen. Aber es funktioniert, ist lesbar und der Rest kommt später.