METRO APP mit WCF verbinden

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.

image

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.

image

 

image

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.

image

Kommentar schreiben