Der lange Weg zu SOA, Teil 3

Implementierung mit WF und WCF

Am Ende des ersten Teils wurden die
Komponenten einer Infrastruktur zur IT-technischen
Unterstützung der Serviceorientierung
beschrieben. Die linke Seite in
Abbildung 4 beschreibt noch einmal diese
Komponenten, wobei das Messaging System
mit den Web Services kommuniziert
und die Dokumente den Interfaces der Web
Services entsprechend übersetzt. Bezüglich
der Servicekommunikation liegt eine lose
Kopplung vor. Kein Service muss die Adresse
oder das Datenformat (Schema) der
Services kennen. Die Service Orchestration
Engine
(SOE) steuert den Ablauf, und das
Messaging System arbeitet mit der Service
Orchestration Engine im Tandem zusammen.
Wird ein Dokument an das Messaging
System gesendet, genügt es, dieses zuerst an
die SOE zu übermitteln, die das Dokument
nach Elementen und deren Werten durchsucht.
Dann kann entschieden werden,
welche Folgeaktivität(en) entsprechend
dem im Prozess-(Orchestrierungs-)Modell
definierten Ablauf (Abbildung 4 Mitte)
ausgeführt werden sollen. Diese Information
erhält das Messaging System und ruft
die entsprechenden Web Services auf.

Abb. 4: Konzeptionelle Sicht einer SOA (linke Seite), des Prozessmodells (Mitte) und der Implementierung mit WF und WCF (rechte Seite)

.NET 3.5 bietet mit WF und WCF eine
leistungsfähige Workflow Engine und eine
Communication Engine. Die rechte Seite
von Abbildung 4 beschreibt die Implementierung
der linken Seite mit WF und WCF
aus sehr hoher Sicht. Dabei übernimmt WF
die Rolle der Orchestrierungs-Engine und
WCF die Rolle des Messaging Systems.
Der Workflow Designer von VS erlaubt es,
Prozesse grafisch zu modellieren und den
Workflow in verschiedenen Umgebungen
zu hosten. Eine aus Web Services bestehende
Composite Application kann entstehen,
indem zuerst der Prozessflow mit dem Designer
entworfen wird und den Workflow-
Aktivitäten Web Services zugewiesen werden.
Abbildung 5 zeigt den Prozess Flight
Request Handling
im WF-Designer.

Abb. 5: Der Workflow Flight Request Handling

Eine Orchestrierung mit dem WF-Designer
muss immer ein WebServiceInput-Objekt
beinhalten, das die Input-Schnittstelle
des gesamten Prozesses beschreibt und innerhalb
des Projektes kodiert werden muss.
Dies wird durch das programmatische Erstellen
des Input-Interfaces getan, welches
eine Methode enthält, die den Prozess-Input
nach außen darstellt (exposes). Die Input/
Output-Daten der Methode werden als
Klassen, Strings, Integer usw. definiert, wie
im vorhergehenden Absatz beschrieben.
Wenn die Methode dem WebServiceInput-Objekt zugewiesen wurde, muss eine interne
Property definiert werden, die die Daten
des WebServiceInput-Objekts Input-Parameter
zuweist. Diese interne Variable erhält
ihre Datenobjekte von der Input-Klasse
der ausgewählten Methode. Das bedeutet,
dass diese Property die Datenobjekte beinhaltet,
die programmatisch in das Interface
kodiert wurden. Visual Studio 2008 stellt
ein SendActivity-Objekt bereit, das Web
Services mittels WCF aufruft.

Eine Send-
Activity
innerhalb eines Prozesses muss
so konfiguriert werden, dass sie einen bestimmten
Web Service aufrufen kann. Um
das zu erreichen, muss zum Projekt durch
einen Eintrag der Adresse des aufzurufenden
Web Service eine Service Reference
hinzugefügt werden. Damit wird bereits
deutlich, dass es sich hier nicht um eine feste
Kopplung handelt, da die Orchestrierung
die Adresse des zu konsumierenden Web
Service wissen muss. Zusätzlich müssen
dem SendActivity-Objekt noch andere interne
Properties zugewiesen werden. Diese
interne Property beinhaltet die Web Service
Input/Output-Datenobjekte. Genauso
wie das Verhalten von direkten Service zu
Service-Aufrufen weiter oben diskutiert
wurde, werden die Properties der Orchestrierung
basierend auf dem Input/Output-Schema des ausgewählten Web Services
durch .NET erzeugt (mittels seiner WSDL)
Z.B. sind die Datenobjekte der GetEmployeeRoleWebmethode einer GetRole_
Input-
Property zugewiesen, während
ihre Outputdatenobjekte einer GetRole_OuputProperty zugewiesen sind. Diese
internen Properties der Orchestrierung
enthalten jetzt Datenobjekte, die basierend
auf der WSDL des Web Services mit der Methode
GetEmployeeRole generiert wurde.
Das führt zu einer weiteren Stufe der engen
Kopplung: Auch die internen Properties
innerhalb der Orchestrierung sind durch
den …

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.