Exkurs: SOAP mit WCF
Die Windows Communication Foundation, kurz WCF, ist ein Framework u.a. zur Implementierung sogenannter SOAP-WebServices. Ein Webservice ist dabei ein Aufruf von Funktionalität über Prozessgrenzen hinweg (Interprozesskommunikation). Dieser Aufruf kann über das Internet genutzt werden. Der Aufrufer / Nutzer des Webservice wird Client genannt. Webservice und Client benötigen nicht dieselbe Technologie und basieren auf einer möglichst geringen Kopplung.
Fachlich stellt ein Webservice eine Dienstleistung dar, wie zum Beispiel "Bestelle Buch". WCF-Dienste folgen dem Paradigma von Remote Procedure Calls, d.h. der Aufruf einer Prozedur in einem anderen Prozess, häufig über Rechnergrenzen hinweg.
SOAP-Services liegen einem Konzept zugrunde, das in folgender Abbildung dargestellt ist:
Dabei wird jeder Service durch eine WSDL (Webservice Description Language) beschrieben. Diese wird publiziert und in einer Service-Registry abgelegt. Auf Basis dieser WSDL kann ein Service-Consumer Client-Code generieren (entweder statisch oder dynamisch) und so den Serviceaufruf typsicher durchführen.
Jeder Service hat dabei einen sogenannten Endpunkt, über den der Service angesprochen werden kann. Derzeit werden Schleupen.CS Services (noch) IIS im gehostet und diese können direkt wie folgt per HTTP aufgerufen werden:
http://Schleupen/Schleupen.AS.MT.BIB.Services/Schleupen.AS.MT.BIB.Buecher.EntityService_3.2.BuchEntityService.svc.
Anmerkung: Da das SessionToken ggf. umgeschrieben wird, sollte der Aufruf von in der Service Registry registrierten Services immer über den Broker und somit nicht direkt aufgerufen werden.
In der Endpunktverwaltung registrierte Endpunkte können direkt aufgerufen werden.
Das folgende Diagramm zeigt, wie technisch die Kommunikation erfolgt. Ein Service Client verwendet einen generierten Proxy als Stellvertreter für den Ziel-Service. Dieser führt auf Protokollebene einen Aufruf per HTTP durch, wobei im HTTP-Header die sog. SOAP-Action angegeben wird und im Payload ein SOAP-Envelope transportiert wird. Dieser Envelope ist die eigentliche SOAP-Message im XML Format. Der Envelope stellt das sogenannte SOAP-Protokoll dar, welches auf das unterliegende Protokoll aufsetzt. Die eigentliche SOAP-Message bestehend aus Client- und Service-Sicht befindet sich im Body des Envelopes.
Eine WSDL beinhaltet alle Informationen über die verwendenten Typen, die durch ein Schema definiert werden.
Wird auf Basis einer WSDL C#-Code für WCF generiert, werden folgende Verträge definiert:
- ServiceContract - Beschreibt den Service samt der unterstützten Protokolle und der Endpunkt-URL, über den der Service aufgerufen werden kann und entspricht in der WSDL dem
service
-Tag - OperationContract - Beschreibt die möglichen Operationen, inkl. der möglicherweise zurückgegebenen Faults im Fehlerfall und entspricht in der WSDL dem Tag
operation
- MessageContract - Beschreibt die Nachricht, die aus Header und Body der SOAP-Message besteht und entspricht in der WSDL dem Tag
operation
- DataContract - Beschreibt die Typen des Nachrichten-Bodys die in einer WSDL unter
types
zu finden sind - FaultContract - Beschreibt die Typen, die im Fehlerfall transportiert werden und sind unter
fault
in der WSDL zu finden
Tipp: Als Leserichtung in einer WSDL empfiehlt sich das Lesen von unten nach oben!
Jeder in der Service Registry hinterlegte Schleupen.CS 3.0 Service hat eine eindeutige ServiceId.
Schleupen.CS.MT.BIB.Benutzerkonten.BuecherAusleihenActivityService_3.2
Fehlerbehandlung
WCF hat für auftretende Fehler im Standard einen spezifischen Mechanismus', die sogenannten FaultContracts. Tritt eine Exception auf, so wird diese auf einen FaultContract gemappt. Auf der nutzenden Seite kann diese Übersetzung entsprechend umgekehrt von FaultContract zu Exception erfolgen.
Ausblick: Web-APIs/REST
WCF wird zur serverseitigen Implementierung ab .NET Core und somit ab .NET 5 nicht mehr unterstützt. Da Web-APIs (REST) sich als Quasi-Standard etabliert haben, werden Services zukünftig als REST-APIs durch Schleupen.CS bereitgestellt.