HowTo: Microsoft p&p – Web Service Factory / Service Factory (Teil 3: Praktisches "Hello World")

In den letzten Beiden (Teil 1, Teil 2 (und dem “Grundkurs für Software Factories”)) ging es um die Grundlagen und um die HOLs – jetzt setzen wir das mal selber um.
Ich werde das hier alles Schritt für Schritt zeigen und erklären – diesmal wirds sehr Bilderreich.

Das Szenario:
Ich möchte nur einen sehr einfachen Webservice erstellen – eine Art “Hello World” Beispiel. Wir möchten ein Buzzword (oder in Fachkreisen auch Bull***t) Katalog anfertigen.

Vorbereitung:

- GAT / GAX sowie natürlich Visual Studio 2005
- Service Factory
- Microsoft SQL Server (Express reicht aus)
- Microsoft SQL Server Management Studio

Schritt 1: MS SQL Datenbank erstellen

Wir verbinden uns zur MS SQL (Express) Datenbank und lassen die Standardwerte.
Zu Beachten ist: Das Microsoft SQL Server Management Studio sollte mit Administratorrechten laufen, sonst kommt es beim Anlegen der DB zu einem Fehler!

image

Dannach legen wir eine neue Datenbank an…

image

image

… und benennen diese “Buzzword” und lassen die restlichen Standardparameter und Optionen so.

image

Dannach legen wir uns eine neue Tabelle an…

image

image

welche zwei Spalten hat:

  • id: int (NULL nicht zulassen & Primärschlüssel & als ID festlegen) – einfache Zählvariable
  • name: nvchar(50) (NULL NICHT zulassen!) – das wird unser Lagerort für unser Wörter ;)

image

… und benennen diese “buzzwords“.

Schritt 2: Service Factory Projekt anlegen

Im Visual Studio erstellen wir jetzt unser “BlogPosts.Buzzwords” Projekt.
Beachtet: Bitte mit Administrator Rechten ausführen!

image

Die Solution Properties lassen wir ebenso…

image

… und schon haben wir unsere Projektstruktur:

image

Schritt 3: DB Verbindungsdaten hinterlegen

Um die Database Connection zu hinterlegen, gehen wir auf die Service Factory (Data Access) Eigentschaften des Hosts.

image

Geben dort als Connection Name “Buzzwords” ein und wählen den MS SQL Server als Datenquelle…

image

… und stellen unsere Verbindungseinstellungen ein.

image 

Schritt 4: BusinessEntities erzeugen

Also nächstes wollen wir direkt eine Klasse anhand der DB Struktur erstellen, also auf die BusinessEntities und dann “Create business entities from database”.

image

Das Hostprojekt und den passenden Connection name wählen…

image

… unsere Tabelle auswählen…

image

… und aus dem aus der DB stammenden “buzzwords” ein “Buzzword” machen - sieht im .NET Code schöner aus.

image

Resultat:

image

Schritt 5: In der Data Access CRUD Befehle erstellen

Um die Datenbank auch mit Daten zu befüttern kann man direkt CRUD Befehle erstellen:
Create/Read/Update/Delete.

image

Dazu werden stored procedures erstellt… 

image

… welche man am Ende als SQL File in dem Projektordner wieder sieht.

image

 Dies kann man nun per Kommandozeile oder per SQL Studio machen:

image

Einfach das SQL reinkopieren und ausführen, als Ergebniss erhält man alle Stored Procedures:

image

Schritt 6: Data Repository Klassen erschaffen

Um die Daten auch abzurufen, muss man Data Repository Klassen erstellen, dabei werden diese Anhand der Business Entities geniert.

image

Man selber wählt anhand der Stored Procedur ein Mapping zu den Entities (wie in dem Screenshot zu sehen). 

image

Resultat:

image 

Schritt 7: BusinessLogic erschaffen

Die BusinessLogic ist das Bindeglied zwischen dem was man machen will und den Repository Klassen. Dieser Code muss per Hand geschrieben werden – ist aber nicht viel, da das meiste bereits die anderen Klassen machen.

Beispielcode aus dem BuzzwordListManager:

class BuzzwordListManager
{
    public List<Buzzword> Load()
    {
        BuzzwordRepository rep = new BuzzwordRepository(“Buzzword”);
        List<Buzzword> result = rep.GetAllFrombuzzwords();
        if (result == null)
        {
            // Not found
            throw new NotImplementedException();
        }
        return result;
    }
}

Resultat:

image

Schritt 8: Service – DataContract erschaffen

Jetzt kommen wir zu der Service Interface Schicht.
DataContracts sind im Prinzip wieder Klassen, welche der Webservice entweder als Request oder als Response weitergibt.
Dadurch muss man nicht seine eigene BusinessLogic veröffentlichen oder ist bei Änderungen der jeweiligen Seite nicht so abhängig.

image

Das Anlegen der Members geht über solch ein Grid, als Typen können die allgemeinen .NET Klassen genommen werden, aber auch andere DataContract Klassen. Die Klassen können auch kombiniert werden. Es gibt auch noch mehr Varianten, dies ist aber am Besten nachzulesen in der Hilfe.

image

Resultat:

image

Schritt 9: Service – ServiceContract erschaffen

Nachdem wir jetzt die Members des Service definiert haben, gilt es nun daran zu definieren, welche Schnittstellen der Service überhaupt haben soll.

image

Hier legt man ein Namen für das Interface fest, sowie der XML namespace etc.

image

Dannach definiert man die Operationen mit den Requests und den Response Objekten.

image

Resultat:

image

Schritt 10: Service – ServiceImplementation – Mapping des DataContracts auf die BusinessEntities

Nun kommen wir zum nächsten Punkt: Die Contracts sind soweit fertig, die BusinessLogic & Entities ebenfalls – allerdings fehlt noch das Mapping dazwischen: Dazu gibts Contract Translators.

image

Ein kleiner Fehler gibt es in dem Interface, welches aber bekannt ist:
Die Eingabefelder für das Mapping sind grau unterlegt, allerdings einfach mit der Maus auf das Feld klicken und dann Enter oder Leertaste drücken – schon kommt man zum Auswahlmenü.

image

Hier wählt man nun zwei Klassen aus, welche man mappen möchte. In unserem Fall ist das natürlich sehr einfach:

image

Im Anschluss erfolgt das Mapping der einzelnen Properties und eine TranslateBetweenXXXAndYYY entsteht.

image

Resultat:

image

Schritt 11: Service – ServiceImplementation

Jetzt kommen wir zum Hauptteil – und noch etwas Schreibarbeit:
Die Implementation des ganzen.

image

Dabei implementiert man den ServiceContract, welcher als Request / Response die Teile aus dem DataContract nimmt.
In der Implementation greift man auf den Translator zu, damit man die BusinessLogic nutzen kann. 

Beispielcode aus dem BuzzwordService:

public void Insert(BlogPosts.Buzzwords.DataContracts.Buzzword request)
{
Buzzword BuzzwordEntity =
TranslateBetweenBuzzwordAndBuzzword.TranslateBuzzwordToBuzzword(request);
BuzzwordManager Manager = new BuzzwordManager();
Manager.Insert(BuzzwordEntity);
}

Resultat:

image

Schritt 12: Service veröffentlichen

Als Abschluss veröffentlicht man den Service in der Host Anwendung.

image 

Dabei kann man noch verschiedene Optionen treffen – hier mal ein Basic Web Service.

image

Ebenfalls die Metadaten mit anklicken und das Ergebnis ist ein XXX.svc Datei.

Resultat:

image

Schritt 13: Testen des Services

Wenn man diese svc Datei nun im Browser anschaut, sieht man in der Mitte die WSDL des Webservice.

image

Diese WSDL kann entweder über das Programm getestet werden, oder…

image

… wir binden dies ganz einfach in ein Projekt ein:

image

Der Service implementiert momentan nur eine Load und Insert Methode – aufgrund der vorangeschrittenen Zeit werde ich dies als Beispiel zwar als Download anbieten, garantiere aber für nichts ;)

Testcode:

localhost.BuzzwordService Service =
new BlogPosts.Buzzwords.Client.localhost.BuzzwordService();
localhost.Buzzword request =
new BlogPosts.Buzzwords.Client.localhost.Buzzword();
request.Name = “Web 2.0″;
Service.Insert(request);

Resultat:

image

Jedenfalls der Testaufruf hat funktioniert – und das alles ohne viel Schreibarbeit.

Fazit:
Dieser Service ist natürlich äußerst einfach gestrickt und dieses HowTo sollte einen ersten Einblick gewähren, aber bereits während der Entwicklung dieses Services ging es sehr schnell voran. Sobald man erstmal sich überwunden hat, macht es weit weniger Aufwand als alles selber zu erstellen.
Wem die Wizards nicht gefallen, der kann sie entweder anpassen – oder auch alles manuell erstellen. In der Hilfe (direkt auf der Codeplex Seite ist das CHM File) ist dies neben der automatischen Generierung gut beschrieben.
Das heisst, man ist hier nicht auf irgendwelche “Hintergrund-Magie” angewiesen, sondern die Service Factory bietet eine sehr gute Unterstützung.

Download:

[DemoCode - DB Connection muss natürlich angepasst werden]

Links:

Blog
Software Factories verstehen
Service Factory – Teil 1 (Grundlagen & ASMX Variante)
Service Factory – Teil  2 (WCF Variante)
Service Factory HOLs @ Codeplex

Software
Visual Studio 2005
GAT / GAX
Service Factory
Service Factory @ Codeplex
SQL Server 2005
SQL Server 2005 Management Studio

Letzte Posts

  • image.png
    RavenHQ–RavenDB in der Cloud

    Ayende Rahien hat es heute verkündet – RavenHQ, der RavenDB Cloud Hoster (natürlich von und mit Ayende) ist ab heute raus aus der Beta und man kann es von überall aus nutzen. In der Betaphase waren nur Nutzer von AppHarbor zugelassen. Was ist RavenHQ? RavenHQ ist im Grunde ein gehostes RavenDB in den Rechenzentren von ...

  • image.png
    GitHub for Windows–erste Eindrücke

    Git ist schon eine tolle Sachen und eröffnet viele neue Möglichkeiten – allerdings ist der Einstieg recht hart und selbst wenn man die guten Hilfsanleitungen auf GitHub befolgt, kommt man am Anfang nur langsam vorwärt. Insbesondere ist das Tooling für Windows / .NET Entwickler auch nicht gerade “bekanntes Terrain”. GitHub to the rescue! Die GitHub ...

  • image.png
    Chocolatey–apt-get für Windows

    Durch Zufall bin ich auf das Tool “Chocolatey” gestoßen. Wer die Website sich anschaut, wird evtl. eine Verwandschaft mit NuGet ausmachen. Was macht Chocolatey? Chocolatey ist ein “Maschine Package Manager”, das bedeutet, dass man für seine Maschine einfach Tools runterladen und Updaten kann – direkt über die Konsole. Was ist der Unterschied zu NuGet? NuGet ...

  • image.png
    SASS, LESS & Coffeescript in Visual Studio mit der Web Workbench

    CSS und Javascript sind die “kleinste” Schnittmenge von allen Browsern für die Erstellung von Web-Applikationen. Leider geht dabei etwas komfort verloren, daher lieben alle Webentwickler jQuery! SASS und LESS sind zwei Varianten, wie man “schöner” CSS schreiben kann und Coffeescript versucht Javascript Entwicklung zu vereinfachen. Aber immer der Reihe nach… Was ist SASS? SASS steht ...

  • image.png
    Code-Inside Sample nun auf GitHub: Google Code zu GitHub Migration

    Seit einiger Zeit habe ich Beispielcode auf Google Code bereitgestellt. Einfach nur noch weg von Google Code O-Ton damals war: Ich hatte mich für Google Code entschieden, weil ich hoffe dass früher oder später die Google Code Suche nutzbar ist und es dadurch wenigstens ein kleiner Mehrwert entsteht. Allerdings wirft es momentan noch ein Fehler. ...

Support us!