WCF 1x1 Northwind Beispiel

Es ist ehrlich schon lange her, das ich eine WCF Service geschrieben habe, Mit Silverlight  kommt ja immer RIA Services zum Einsatz. Diese werden aber von WinRT nicht unterstützt. Jedenfalls keine Proxy Generierung und andere Annehmlichkeiten.

Um also nicht alles per Hand machen zu müssen, wird sich mein nächstes Beispiel um WCF als METRO Client kümmern. Leider habe ich auf dem Gerat grad keinen WCF Service zur Hand. Also Step by Step einen WCF Service auf Basis der Nordwind Datenbank und der Kunden Tabelle gebaut. Es kommt Visual Studio 2012 und Entity Framework zum Einsatz.

Zunächst erst mal die Datenbank. Ich habe mich für SQLCompact entschieden. Sollte eigentlich mitinstalliert werden, Mit dem Setup der Datei  SSCEVSTools-ENU.msi wird dann im Verzeichnis C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v4.0\Samples die Northwind.sdf erzeugt.

Windows 8 METRO Anwendungen kennen kein ADO.NET und auch kein WCF direkt. Datenbank Server Zugriffe müssen immer über einen Service Layer hindurch. Der METRO Solution wird dann ein Web Projekt hinzugefügt. Hier habe ich ein MVC Projekt gewählt.

image

In Web  Projekt wird dann ein Verzeichnis APP_DATA erzeugt in das die Datei Northwind.SDF Datei kopiert wird,

Als nächstes wird ein Entity Framework Modell aus der Datenbank erzeugt. Das vor allem um Zeit zu sparen.

image

Für das  Modell wird die Customer Tabelle ausgewählt.

Wer sich mit WCF beschäftigt hat, weis das es jetzt an den Contract geht, eigentlich ein einfaches Interface. Silverlight Enabled WCF Services brauchen das Interface nicht codiert.

Der Service liefert eine Liste der Kunden haben vom Typ Customers mit der Methode GetCustomers. Und die Funktion AddCustomer, fügt einen neuen Kunden ein. Rückgabe ist die Anzahl aller Kunden.

<ServiceContract()>
Public Interface IService1

    <OperationContract()>
    Function GetCustomer() As List(Of Customers)

    <OperationContract()>
    Function addCustomer(ByVal cust As Customers) As Integer

Man mag über Interfaces denken was man will, wenn man eines hat ist es sehr einfach zu implementieren. Im Service (scv) einfach implements IService1 tippen und schon steht der Funktionsrumpf im Code.

Dank Enties muss im WCF Service kaum noch VB.NET Code getippt werden.

Public Class Service1
    Implements IService1
    Public Sub New()
    End Sub

    Public Function addCustomer(cust As Customers) As Integer Implements IService1.addCustomer
        Dim ctx As New NorthwindEntities
        ctx.Customers.AddObject(cust)
        ctx.SaveChanges()
        Return ctx.Customers.ToList.Count
    End Function

    Public Function GetCustomers() As List(Of Customers) Implements IService1.GetCustomer
        Dim ctx As New NorthwindEntities
        Return ctx.Customers.ToList

    End Function
End Class

Die Liste der Kunden wird mit einem zwei Zeiler aus dem EF Modell geholt. Man könnte natürlich auch per SQLConnection die Daten holen und in einem eigenen definierten Kunden Objekt ablegen. Braucht eben nur rund 30-50 Zeilen Code, mindestens.

Den WCF Service kann man im Browser aufrufen und schon mal schauen ob das Hosting und die WSDL passt.

http://localhost:12933/Service1.svc

Man kann auch den in Visual Studio 11 enthaltenen WCF Test Client verwenden. Dieser scheint aber mit dem Datentyp Customers aus dem EF Model Probleme zu haben, so das der Funktionsaufruf GetCustomer nicht möglich ist.

image

Pingbacks and trackbacks (1)+

Kommentare sind geschlossen