HowTo: Databinding in WPF (& Silverlight 2) – Einstieg

In diesem HowTo geht es um den Einstieg in das Thema "Databinding" mit der Windows Presentation Foundation (was so eigentlich auch in Silverlight 2 geht).

Wer Databinding aus ASP.NET her kennt, wird sich in die WPF Databinding Möglichkeiten sicherlich verlieben.

Doch erstmal langsam – was ist eigentlich "Databinding"?

Jeder Entwickler kennt es: Im Code häuft man sich irgendwelche Daten an und versucht diese dann in das Frontend zu bekommen. Wenn nun der Nutzer die entsprechenden Felder im Frontend verändert, muss man ein händisches Mapping zwischen den UI Daten und den eigentlichen Daten vornehmen, damit die Änderungen auch gespeichert werden.

Das ist meist ein sehr mühseeliger Prozess, insbesondere da meist auch noch eine Validation gewünscht ist – darf in dem Feld jetzt ein String stehen? In dem Feld sollte nur eine Postleitzahl stehen etc.

Typische Szenarien – im Web ist dies durch das "zustandslose" HTTP schwierig umzusetzen – in ASP.NET wurde es versucht, allerdings meiner Meinung nach nur mit mäßigem Erfolg. In Windows (oder Silverlight) Applikationen sollte dies doch leichter möglich sein.

Genau darum dreht sich Databinding. Insbesondere in WPF gibt es einige Möglichkeiten und ich will hier nur mal den ersten Eindruck vermitteln.

Schritt 1: WPF Projekt anlegen

Als erstes legen wir ein WPF Projekt an:

image

Notiz am Rande: Das ganze kann man auch mit Expression Blend machen, allerdings werde ich mich hier erstmal nur auf Visual Studio 2008 konzentrieren.

Folgende Projektstruktur wird automatisch angelegt:

image

Wir halten uns vornehmlich in der "Window1.xaml" auf.

Schritt 2: Klassen anlegen

Damit wir in unserem Beispiel etwas machen können, benötigen wir 2 kleine Klassen:

"Person"

image

"Title"

image

Schritt 3: XAML Binding

Um das ganze Thema etwas zu verstehen, legen wir mal ein Binding direkt in der Window1.xaml an. So sieht das Ergebnis aus:

image

Und so der Code dazu:

image

Das sieht erstmal recht komplex aus – aber gehen wir Schritt für Schritt durch.

Wir wollen (in einem StackPanel) ein Label befüllen. Dazu befüllen wir es mit dem Binding Element. Über "Source" greifen wir auf eine "StaticResource" auf unser Element namens "MyTitleElement" zu.

Dabei holen wir uns den Wert des Feldes "Value" ab – was ich aber auch BlaBlub nennen hätte können.

Direkt im "Window.Resources" legen wir ein .NET Objekt der Klasse "Title" an (die wir im vorherigen Schritt angelegt haben) und geben ihm über x:Key einen Namen und über die Property "Value" (wie gesagt, hätte auch BlaBlub heißen können) das was wir rein haben wollen.

image

Der "Path" in dem Binding Element gibt am Ende die eigentliche Quelle an.

Damit wir im XAML solche .NET Objekte anlegen können, müssen wir einen xml Namespace hinzufügen. Über "clr-namespace:…" fügt man .NET Namespaces hinzu.

Um es nochmal hervorzuhebe: Das ganze ohne eine Zeile in der Codebehinde geschrieben zu haben.

Schritt 4: ListBox zur Anzeige von dynamischen Inhalten nehmen.

Um ein etwas komplexeres Beispiel zu zeigen, wollen wir nun mal mehrere "Person" Objekte in einer ListBox anzeigen.

So wird es hinterher aussehen:

image

Ich hatte jetzt keine große Lust mich erst mit der Formatierung rumzuschlagen ;) Primär gehts hier erstmal um Databinding. In einem anderen HowTo machen wir auch "schöne" Sachen.

Hier der Code dazu:

image

Wir legen wieder einen Namen an – damit wir im Codebehinde Zugriff darauf haben – und machen unser ItemTemplate – ein "DataTemplate".

Im Codebehinde reicht dann nur wenige Zeile:

image

Schlussbemerkung

Das ganze Thema Databinding ist natürlich noch um einiges Größer – doch vorerst mach ich hier erstmal Schluss. Das nächste HowTo wird sich dann um das richtige Databinding drehen – mit Dataupdates etc.

Natürlich könnt ihr auch in der MSDN oder hier nachschauen. Für jeden der sich interssiert, würde ich auch die Demos von der VSOne empfehlen.

PS: Ich arbeite mich selber erst in diese Themen ein, daher muss nicht unbedingt alles 100% stimmen. Es hilft mir zum Teil auch, dass ich dies mal aufgeschrieben habe. "Best Practices" sind es also (noch) nicht ;)

[ Download Democode ]

HowTo: Windows Presentation Foundation (Einstieg, Infos, Programme, Überblick)

Da ich mich auch langsam der WPF Programmierung zuwende, möchte ich einfach mal einen Einstiegs-HowTo schreiben. Inhalte sollen hier das grobe Konzept hinter WPF sein, was man dafür braucht, welche Programme man nimmt und was man sich mal anschauen kann.

WPF? .NET 3.0? Um was gehts?

Die Windows Presentation Foundation ist Teil des .NET 3.0 Frameworks und wurde auch unter .NET 3.5 weiterentwickelt – was konkret, schauen wir uns dann später mal an. .NET 3.0 kam ungefähr mit Vista auf und ist für XP, Windows Server 2003 und Vista entwickelt wurden.

Um es mal grob zu sagen, was man mit WPF machen kann: Endlich schicke Windows Applikationen! Windows.Forms sind leider in Bezug auf Design recht zickig – mit WPF will man endlich “sexy” Applikationen auch im Unternehmensumfeld kultivieren. Das hat Teilweise schon zu Erfolgen geführt.

Silverlight nutzt als Basis auch WPF – allerdings momentan noch sehr begrenzt, aber das Konzept bleibt gleich.

Was ist denn das Konzept?

Stellen wir uns eine perfekte Welt vor, wo der Designer mit den entsprechenden Tools arbeitet und das Ergebnis direkt an den Entwickler übergeben kann und dieser ohne große Konvertierung oder Neuimplementierung das Design mit Funktionen befüllen kann. Wie gesagt, wir gehen von einer perfekten Welt aus ;)

Genau hier setzt WPF an. WPF ist die “Oberflächensprache”, welche direkt in .NET verwendet werden kann. Von den Designtools wird normalerweise eine XAML Datei für ein Layout erstellt – das gesamte Design wird also in XML gegossen.
XAML selbst wird in eine .NET Objekt Hierarchie serialisiert – daher kann der Entwickler in seiner gewohnten Umgebung direkt drauf zugreifen.

Ein nettes Whitepaper gibts auch hier zum Runterladen.

Mhh… klingt schon mal nach einer netten Idee – was gibts denn für Tools?

Bei Tools möchte ich mal eine Trennung zwischen “ist für Designer geeignet” und “ist eher für Entwickler geeignet”. Der Unterschied liegt daran, dass die Entwickler Anwendungen meist nur die “Handeingabe” ermöglichen – das gefällt natürlich keinem Designer ;)

  • Designer:
  • Entwickler:
    • XAMLPad: Das Ursprungstool von Microsoft. Dieses ist enthalten im Windows SDK.
    • XAMLPadX V3: Eine Erweiterung welche ich auf diesem Blog gefunden habe. Es unterstützt auch Plugins. Leider ohne IntelliSense momentan.
    • Visual Studio: VS 2008 bietet große Unterstützung – für Visual Studio 2005 gibt es ein AddIn, welches allerdings auch mehr schlecht als recht ist.
    • Kaxaml 1.0: Ein Geheimtipp wie ich finde. Sehr schick umgesetzt und sogar mit IntelliSense – daher aus meiner Sicht momentan besser als XAMLPad oder XAMLPADX V3.

Scheint doch eine nette Auswahl zu sein, gibt es sonst irgendwelche Probleme mit WPF?

WPF hat einen (meiner Meinung nach) großen Nachteil gegenüber einer klassischen Windows.Forms Applikation – leider fehlen viele Controls welche man gewohnt war. Andere Kritikpunkte, welche sicherlich erst bei einem näheren Blick auffallen, sind hier gut beschrieben. Performance ist durch die Komplexität insbesondere im 3D Bereich auch nicht so ganz leicht – hier einige Informationen über die Performance von WPF.

Microsoft arbeitet daran und hat auch wie hier ein offenes Ohr für Kritik.

Was gibt es für Demoapplikationen, Referenzen und sonstige Infos?

Microsoft selbst hat einige Demoapplikationen zum Downloaden angeboten: WPF Samples
Insbesondere möchte ich dieses PDF empfehlen – hier wird die Outlook 2003 Oberfläche mit WPF nachgebaut und man sieht Schritt für Schritt wie etwas gemacht wird.

Auch seit kurzem zum Download verfügbar: Das Syndicated Client Expericences Starter Kit Beta + MSDN Reader. Hierbei handelt es sich im Allgemeinen um einen schicken RSS Feedreader mit WPF.

Microsoft bietet auch einige Hands-on Labs an, welche lesenswert sind, sowie Expression Blend Tutorials und Videos.

Wer nach Tutorials sucht, wird ebenfalls auf vielen Seiten fündig – z.B. hier.

Aus der Blogszene kommt auch einige interessante Infos, z.B. aus dem deutschen Blogumfeld von Norbert Eder:

Es gibt noch viele weitere interessante Posts (unter anderem einige bei Norbert), z.B. ein WPF ICQ Client oder Vista Glass Effekt in WPF – ansonsten auch die anderen Blogs welche in diesem Post waren.

Lohnt sich WPF?

Diese Frage kann man so sehr schlecht beantworten – in der Windows Client Entwicklung ist WPF ein sehr großer Schritt nach vorn – auch wenn es momentan noch Schönheitsfehler hat. Mit Silverlight erobert WPF auch das Web, daher kann es nie verkehrt sein, sich mit dieser Technologie auseinander zu setzen. Microsoft setzt z.B. interen WPF für die Expression Produkte ein, aber auch für die Zune Software. Auch gibt es Komponenten in Vista mit WPF – in Windows “7″ wird gemunkelt, dass wohl mehrere Applikationen (Wordpad, Paint, Calc) mit WPF “neu” gemacht werden.

Ein Blick schadet also auf die WPF Entwicklung sicherlich nicht – daher auch dieser Post der als Einstieg dienen soll.

HowTo: WPF Windows mit dem Vista Glass Effekt ausstatten

Eine optische Verbesserung (jedenfalls für mich) stellt in Vista der so genannte Glass Effekt dar. Wer nun mit WPF arbeitet, wird vielleicht denken, dass solch ein Effekt direkt mit geliefert wird (immerhin ist .NET 3.0 in Vista fest integriert) – jedoch geht dies nicht so einfach.

Im Internet bin ich auf diesen Blogpost gestoßen – da das nicht schwierig aussah und auch schick war, ich aber nach einem simplen Beispiel suchte, habe ich mir schnell selber etwas zusammengetippt.

Hier das Ergebnis mal als Screenshot:

Ein Standard WPF Window:

image

Das Aero Window:

image

Was muss man dafür machen:

Wie in dem Blogartikel oben erwähnt, legt man folgende Klasse mit dem Source Code an:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Media;
using System.Windows;
using System.Windows.Interop;

namespace WPFAero
{
    public class GlassHelper
    {
        public static bool ExtendGlassFrame(Window window, Thickness margin)
        {
            if (!DwmIsCompositionEnabled())
                return false;

            IntPtr hwnd = new WindowInteropHelper(window).Handle;
            if (hwnd == IntPtr.Zero)
                throw new InvalidOperationException("The Window must be shown before extending glass.");

            // Set the background to transparent from both the WPF and Win32 perspectives
            window.Background = Brushes.Transparent;
            HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent;

            MARGINS margins = new MARGINS(margin);
            DwmExtendFrameIntoClientArea(hwnd, ref margins);
            return true;
        }

        [DllImport("dwmapi.dll", PreserveSig = false)]
        static extern void DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS margins);

        [DllImport("dwmapi.dll", PreserveSig = false)]
        static extern bool DwmIsCompositionEnabled();
    }

struct MARGINS
{
  public MARGINS(Thickness t)
  {
    Left = (int)t.Left;
    Right = (int)t.Right;
    Top = (int)t.Top;
    Bottom = (int)t.Bottom;
  }
  public int Left;
  public int Right;
  public int Top;
  public int Bottom;
}

}

Aero wird über die “dwmapi.dll” gebildet – am Ende ruft man eine einzelne statische Methode auf, welche man das Window übergibt.
Auf Codeproject habe ich dann noch eine andere Erweiterung dafür gefunden: Glass Effekt als Attached Property (Adding Glass Effect to WPF using Attached Properties)

Somit wäre es möglich, einem Window im Xaml direkt den Glass Effekt zuzuweisen:

<Window x:Class="GlassEffectDemo.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:src="clr-namespace: GlassEffectDemo"
    src:GlassEffect.IsEnabled="True"
    Title="GlassEffect demo" Height="300" Width="300">
    <Grid>
    </Grid>
</Window>  

Wichtiger Hinweis: Aero gibt es nur auf Vistabasis und auch nur bei aktivierem Aero (sollte klar sein)

Wäre interessant zu erfahren, ob es bei diesem aktivieren Aero zu irgendwelchen WPF Schwierigkeiten kommen kann – getestet habe ich es noch nicht ;)

Das Demoprojekt könnt ihr wie immer Downloaden – Visual Studio 2008 & Vista ist aber Voraussetzung.

[ Download Democode ]

Buchempfehlung: Programming WCF

WCF kam mit .NET 3.0 und ist in der Öffentlichkeit nur sehr wenig vertreten – WPF hat über Silverlight an Aufmerksamkeit gewonnen, was man jedoch mit WCF alles machen kann, wissen viele nicht.

WCF ist mächtig und ermöglicht es, Server-Client Anwendungen sehr gut abzubilden. Dabei spielt auch der SOA Gedanke eine große Rolle. WCF kann auch mit nicht-.NET Services kommunizieren und ist daher die Technik wenn es darum geht Services bereit zu stellen.

Diese Möglichkeiten werden in dem Buch “Programming WCF” vorgestellt, darunter sind Themen wie:

  • Grundkonzepte von WCF
  • Erstellen von Services (Abstraktionsebenen, ServiceContracts, DataContracs etc.)
  • Wie sieht es auf der Clientseite aus?
  • Hosten von Services
  • Sicherheitseinstellungen in mehrere Szenarien (Intranet, Internet, B2B, Anonym)
  • Konfigurationseinstellungen von WCF
  • undundund…

Das Buch geht sehr detailiert vor und zeigt auch einige Code Beispiele, welche das Arbeiten damit erleichtern.

Als Kritikpunkt muss ich allerdings erwähnen, dass ich an manchen Stellen ein direkt praktisches Beispiel gern gesehen hätte. Es gibt trotzdem genügend Code Beispiele an den man die Grundlagen sehr gut sehen kann – durch die vielen Details findet man immer wieder interessantes.

Besonders empfehlenswert ist dieses Buch für Service-Entwickler und die, die es werden wollen.

[ Amazon Link ]

HowTo: Visual Studio 2005 für .NET 3.0 (WPF, WCF, WF) rüsten

Zwar ist das .NET Framework in der Version 3.0 schon eine Weile raus, allerdings ist Toolunterstützung noch nicht ganz ideal.
Es gibt zwar die Expression Serie, allerdings kostet der Spaß auch was. Eine andere Möglichkeit ist die Beta von Visual Studio 2008.

Wer allerdings weiter mit Visual Studio 2005 nutzen möchte, benötigt folgende 2 Addons:

Für WindowsPresentationFoundation & WindowsCommunicationFounation

Nach der Installation gibt es neue Projektvorlagen für das .NET Framework 3.0:

image

Was besonder hervorzuheben ist, ist der Splitscreen zwischen der XAML und der Designansicht. 

image

Zwar gibt es in der Toolbox Controls zur Auswahl – aber ich kann sie irgendwie nicht per Drag`n`Drop reinziehen – schade (oder ich mach was falsch).

Jedenfalls kann man immerhin mal in dem XAML austoben:

image

Die restlichen Teile sind so ziemlich normale Projektvorlagen (zu WCF) bzw. bieten diesen XAML Splitscreen.

Für WindowsWorkflowFoundation

Auch hier gibts neue Projektvorlagen:

image

… und auch wie bei den anderen Extensions, gibt es auch hier eine Besonderheit:

image

Der Workflow Designer erlaubt es aus einer fülle von Controls sich seinen Workflow zu erstellen:

image 
(… und noch mehr Controls, welche nicht zu sehen sind)

Fazit:

Für WPF Entwickler würde ich entweder VS 2008 und insbesondere wenn es tolle GUIs werden sollen zu Expression Blend raten – zwar kann man alles per Hand machen, allerdings ist es nicht wirklich elegant und macht sehr viel Arbeit.
Tiefergehend in die WF Entwickler habe ich noch nicht reingesehen, sodass ich dies noch nicht beurteilen kann – für WCF Anwendungen sind die Vorlagen eigentlich auch nicht zwingend notwendig, aber eine nette Spielerei.

Links:

Expression Serie
Visual Studio 2008
Visual Studio 2005 extensions for .NET Framework 3.0 (WCF & WPF), November 2006 CTP
Visual Studio 2005 extensions for .NET Framework 3.0 (Windows Workflow Foundation)

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

HowTo: Microsoft p&p – Web Service Factory / Service Factory (Teil 2: WCF Variante)

Im ersten Teil ging es eher um den allgemeinen Teil der Service Factory und der ASMX Part - in dem zweiten Teil dreht es sich mehr um die “neue” Variante, welche auch in Zukunft verstärkt eingesetzt wird: Windows Communication Foundation.

In Anlehnung an die HOLs werde ich erstmal die Struktur daran erklären.

 

Start:

image

Die Struktur ist “ähnlich” dem ASMX Model:

  • Coho.ClubServices.Membership.BusinessEntities:
    • Geschäftsobjekte – mit den werden wir direkt Arbeiten
  • Coho.ClubServices.Membership.BusinessLogic:
    • Eine Logik halt – hier können Berechnungen oder Analysen etc. stattfinden
  • Coho.ClubServices.Membership.DataAccess:
    • Datenzugriffschicht
  • Coho.ClubServices.Membership.DataContract:
    • Eine Zwischenschicht, welche ein Mapping zwischen den eigentlichen BusinessEntities und dem Service ermöglicht
  • Coho.ClubServices.Membership.FaultContract:
    • FaultContracts erlauben ein Model für Exceptions – falls irgendwas schief geht, kann der FaultContract antworten
  • Coho.ClubServices.Membership.ServiceContract:
    • Definiert die Schnittstelle, welche den Service ausmachen
  • Coho.ClubServices.Membership.ServiceImplementation:
    • Hier erfolgt die Implementierung des ServiceContracts.
  • Coho.ClubServices.Membership.Host:
    • Der letztendliche Host des Services

Wie man bereits sieht, ist die Struktur zum Teil gleich, zum Teil anders benannt bzw. es gibt halt noch den FaultContract für Exceptions.
Neu ist hingegen, dass mit WCF wesentlich mehr Möglichkeiten geben sind, als mit Standard ASMX Webservices.

Ende (nach Excercise 10):

image

Wie bereits im ersten Teil gezeigt, wurden auch hier die Strukturen vereinfacht:

In der BusinessLogic sind neben der eigentlichen Lokig nun auch die Entities und die Zugriffsschicht zu finden.
Der FaultContract wurde ebenso entfernt – wie gesagt: Man muss nicht alles nutzen. Es ist nur ein Beispiel.

Praktische Anwendung:

Die praktische Anwendung werde ich im nächsten HowTo Stück für Stück beschreiben.

Links:
HowTo – Teil 1
Windows Communication Foundation @ Wiki
Hands on Lab @ Codeplex

Artikel

Amazon Web Service:
HowTo: Produktsuche mit den Amazon Web Services

eBay API:
HowTo: eBay API (Grundvoraussetzungen)
HowTo: eBay API (Suchen mit eBay…)
HowTo: eBay API (Aktuelle Suchbegriffe…)

Google Maps API:
HowTo: Google Maps API (Grundvoraussetzungen)

HTML / Javascript:
HowTo: Webanwendung debuggen (Javascript & HTML debuggen mit den entsprechenden Tools)
HowTo: Mauseingaben & Javascript (Wie bastelt man ein Paint mit Javascript?)
HowTo: Xml mit Javascript Parsen (Zugriff auf Nodes & Attribute)
HowTo: Objektorientierte Programmierung / OOP in Javascript (Eine einfache Klasse erstellen)
HowTo: Javascript Event “onscroll” nutzen
HowTo: Javascript Mouse Over – Mousepositionen für Details

Microsoft ASP.NET:
HowTo: Microsoft ASP.NET AJAX (Grundlagen)
HowTo: Microsoft ASP.NET AJAX (Praktischer Anfang)
HowTo: Microsoft ASP.NET AJAX (Clientseitiger Aufruf von Webmethoden)
HowTo: Microsoft ASP.NET AJAX (PageMethods – Webmethoden aufrufen ohne ASMX Datein)
HowTo: Json-Services erstellen (…oder wie erstell ich dynamisch Javascript?…oder Web 2.0 ohne AJAX?)
HowTo: Dynamische vCards als Link zum Importieren anbieten
HowTo: Microsoft AJAX Client API nutzen

Microsoft .NET:
HowTo: Datein per FTP über mit .NET runterladen und speichern
HowTo: Interfaces/Schnittstellen verstehen – mal auf simple Art und Weise
HowTo: XML erstellen mit XmlAttributes
HowTo: PDF’s erstellen unter .NET mit NFop

Microsoft Silverlight:
HowTo: Microsoft Silverlight 1.0 (Grundlagen)
HowTo: Microsoft Silverlight 1.0 (Praktischer Anfang)
HowTo: Microsoft Silverlight 1.0 (Spiegeleffekte erzeugen)
HowTo: Microsoft Silverlight 1.0 (dynamische Spiegeleffekte)
HowTo: Microsoft Silverlight 1.0 (Bilder “kippen” samt Spiegeleffekt)
HowTo: Microsoft Silverlight 1.0 (Webanwendungen mit dynamischen SilverlightHosts verschönern)
HowTo: Erstellen eines Silverlight 1.0 Videoplayers mal auf einfache Weise
HowTo: Silverlight mit dem “object” Tag als embedded HTML anbieten

Microsoft Patterns&Practices Software Factories:
HowTo: Microsoft Patterns&Practices Software Factories verstehen
HowTo: Microsoft Patterns&Practices – Web Service Factory / Service Factory (Teil 1: Grundlagen & ASMX Variante)
HowTo: Microsoft Patterns&Practices – Web Service Factory / Service Factory (Teil 2: WCF Variante)
HowTo: Microsoft Patterns&Parctices – Web Service Factory / Service Factory (Teil 3: Praktisches “Hello World”)

Microsoft Office SharePoint 2007:
HowTo: Automatisierte Backups mit dem Microsoft Office SharePoint 2007

Microsoft Visual Studio:
HowTo: Visual Studio 2005 für .NET 3.0 (WPF, WCF, WF) rüsten

AJAX:
HowTo: AJAX
HowTo: AJAX und ASP.NET Webservices (und die Sache mit dem GET)

Windows Live ID:
HowTo: Windows Live ID Web Authenticaton (Grundlage & Installation)

Microsoft Virtual Earth:
HowTo: Microsoft Virtual Earth (Praktischer Einstieg)

XML:
Guide: XML (Einführung)
Guide: XML (Basiswissen)
Guide: XML (DocumentType Definitions DTDs)
Guide: XML (XML Schema – Teil 1)
Guide: XML (XML Schema – Teil 2)
Guide: XML (XML Schema – Teil 3)

.NET & Datenbankverbindungen:
HowTo: Datenbankverbindungen – .NET & MS SQL 2005
HowTo: Datenbankverbindungen – .NET & MySQL

Oracle:
HowTo: Oracle 10g und die Oracle Developer Tools unter Vista