Bisherige Teile dieser Lecture
Falls Sie die bisherigen Teile dieser Lecture noch nicht kennen:
- Generische Datenspeicherung mit XML - Teil 1 (Einführung)
- Generische Datenspeicherung mit XML - Teil 2 (Generic Entity Data Storage)
- Generische Datenspeicherung mit XML - Teil 3 (XML Datei als Generic Entity Data Storage)
- Generische Datenspeicherung mit XML - Teil 4 (Arbeitsspeicher als Generic Entity Data Storage)
- Generische Datenspeicherung mit XML - Teil 5 (SQL Server als Generic Entity Data Storage)
- Generische Datenspeicherung mit XML - Teil 6 (Data Storage)
Kurze Rekapitulation was wir machen wollen
Nachdem wir alle wesentlichen Komponenten für einen generischen Data Storage implementiert haben, wollen wir diesen jetzt auch noch als WCF-Service verfügbar machen (vorausgesetzt wird ein Verständnis für die grundlegende Funktionsweise von WCF - dies zu vermitteln ist nicht Bestandteil dieser Lecture)
Übersicht zur geplanten Implementierung
Für den Verwender der Komponente sollte solch ein Service Data Storage genau gleich sein wie die bisher schon vorgestellten Data Storages. Von dem her ist auch die Implementierung analog zu diesen. Wir benötigen einen Service Data Storage, welcher intern einen Generic Entity Service Data Storage nutzt, welcher wiederrum die Daten mit einem Web-Service austauscht. Dieser speichert die Daten dann in einem der bekannten Generic Entity Data Storages:
Für die Implementierung mit WCF müssen wir für den Service einen ServiceContract
in Form eines Interfaces implementieren - das IDataStorageService
Interface. Außerdem
müssen die zu übertragenden Daten einen DataContract implementieren. Hier müssen
wir allerdings nur die Klasse GenericEntity
entsprechend erweitern. Aus diesem Grund
übertragen wir übrigens auch mit dem Service nicht die eigentlich zu speichernden Objekte sondern
serialisieren diese bereits clientseitig - sonst müssten bereits die zu speichernden Objekte den
DataContract definieren
Hier ein Überblick zu den benötigten Klassen der Client-Seite:
... und der Server-Seite:
Implementierung
Beginnen wir auf der Client-Seite mit der eigentlichen Implementierung. Die Klasse ServiceDataStorage
ist dabei trivial - wie alle anderen Data Storages übergibt sie ihrer Basisklasse lediglich einen Generic Entity
Data Storage
Interessanter ist die Implementierug der Klasse GenericEntityServiceDataStorage
. Allerdings ist auch
diese nicht allzu aufwendig. Im Konstruktor erzeugen wir uns über eine "Channel-Factory" ein Objekt vom Typ
IDataStorageService
. Die eigentliche Implementierung der Data Storage-Methoden sind dann nur noch
Wrapper-Aufrufe mit diesem Objekt. Die "Channel-Factory" bekommt die Informationen über den anzusprechenden Service
in Form eines "Endpoint Configuration Names" übergeben. Hier das wesentliche Code-Segment aus dem Konstruktor:
service = new ChannelFactory<IDataStorageService>(endpointConfigName);
service.Credentials.UserName.UserName = serviceUserName;
service.Credentials.UserName.Password = servicePassword;
DataStorageService = service.CreateChannel();
Eine kleine Ergänzung implementieren wir allerdings noch - der Zugriff auf die Methode "FindAppicationKeys" wollen wir nicht so einfach machen, wenn wir den Data Storage als Service veröffentlichen. Welche anderen Application Keys sonst noch im Data Storage verwendet werden geht den einfachen Verwender dieses Services nichts an. Aus diesem Grund führen wir hier Administrator-Credentials ein welche beim Aufruf dieser Methoden vorliegen müssen
Auch auf der Server-Seite ist die Implementierung trivial - der ServiceDataStorage
dient lediglich
als Wrapper für den eigentlichen Generic Entity Data Storage auf dem Server
Damit sind wir fertig mit der reinen Erweiterung unserer Komponente. Von Interesse wäre jetzt noch eine Beispiel-Konfiguration für solch ein Service-Szenario. Dieses schauen wir uns dann im nächsten Teil dieser Lekture an
Nächster Schritt
Damit sind wir eigentlich am Ende dessen, was mit dieser Lecture erreicht werden sollte. Wir haben eine Komponente entwickelt, mit Hilfe derer wir einfach und auf generische Art und Weise Objekte speichern können und wir können diese nun auch als WCF-Service veröffentlichen. Im abschließenden letzten Teil der Lecture stellen wir nun noch die Konfiguration einer Demo-Anwendung vor
... to be continued
Autor: Thomas Gysser | www.advadev.de
Keine Kommentare:
Kommentar veröffentlichen