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テ歹rst 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_thumb.png
    NuGet Package Restore & Build Server wie z.B. AppVeyor

    NuGet ist ja mittlerweile weit verbreitet, aber eine Frage stellt sich natテシrlich immer noch: Checkt man die NuGet Packages ein oder nicht? In meinem kleinen Side-Projekt, welches auf GitHub liegt und ich テシber AppVeyor auch bauen lasse nutze ich das Package Restore Feature von NuGet, d.h. in meinem Repository befindet sich kein NuGet Package mehr, […]

  • image.png
    Microsoft Account Login via ASP.NET Identity

    Der Microsoft Account ist die zentrale Identifikationsstelle in der 窶廚onsumer-Microsoft-Welt窶, allerdings ist das Einbinden eben dieser in die eigene Applikation eher schwierig. Das 窶廰ive SDK窶 ist nun unter dem OneDrive Dev Center zu finden und ganz professionell wurden auch alle Links zum alten Live SDK damit unbrauchbar gemacht. Beim Microsoft Account ist es auch unmテカglich […]

  • image.png
    Zeitgesteuerte Azure WebJobs – so einfach kann Azure sein

    Das noch in Entwicklung befindliche Azure WebJob SDK bietet einige coole Features zum Verarbeiten und Bereitstellen von Daten. Bekanntes Beispiel ist das Sample welches auf eine Azure Queue lauscht und sobald ein Item da vorhanden ist anfテ、ngt dies zu verarbeiten. Szenario: Zeitgesteuerte Aktivitテ、ten 窶 ohne Queue und co. Mein Szenario war allerdings wesentlich trivialer: Ich […]

  • image.png
    Get Involved in OSS! Ja, aber wie geht das denn mit GitHub?

    Auch im .NET Lager gibt es Bewegung im OSS Bereich und es gibt verschiedene Arten wie man bei einem Open Source Projekt 窶廚ontributed窶. Was zテ、hlt alles zu 窶廚ontribution窶? Unter 窶廚ontribution窶 lテ、uft eigentlich alles 窶 ob es Fragen/Probleme zu dem Projekt via Issues ist oder Dokumentation nachreicht oder ob man darテシber bloggt oder das Projekt vorstellt. […]

  • HowTo: Web.config samt eigener ConfigSection zur Laufzeit ändern

    In dem HowTo geht es darum wie man die Web.config zur Laufzeit テ、ndert und was es dabei zu beachten gilt. Das ganze klappt auch mit komplexeren ConfigSections. Eigene ConfigSection? Vor einer ganzen Weile habe ich mal テシber das Erstellen einer eigenen ConfigSection geschrieben 窶 im Grunde nutzen wir jetzt fast dieselbe Config. Zur Laufzeit? Startet […]

Support us!