close

Anmelden

Neues Passwort anfordern?

Anmeldung mit OpenID

Heutige Vorlesung Wozu WSDL? Wie wird WSDL verwendet? Web

EinbettenHerunterladen
Heutige Vorlesung
ƒ Prinzipieller Aufbau von WSDL-Beschreibungen
ƒ Beschreibung von Protokoll-Bindungen in WSDL
ƒ Vor- und Nachteile von WSDL
Lernziel
WSDL
ƒ Google-WSDL lesen und erweitern können
© Klaus Schild, 2004
1
Wozu WSDL?
© Klaus Schild, 2004
2
Wie wird WSDL verwendet?
Schnittstelle
Nachfrager
Dienst
publizieren
Schnittstelle
Anbieter
Nachfrager
Dienst abrufen
Dienst abrufen
ƒ Client möchte bestimmten Web-Dienst abrufen
ƒ aus WSDL-Beschreibung können automatisch Stubs
generiert werden
ƒ Client benötigt hierfür Beschreibung der Schnittstelle:
ƒ Stubs abstrahieren von WSDL, SOAP und Protokoll
ƒ Struktur des Aufrufes: Name, Eingangsparameter,
Ergebnis
ƒ Protokoll und Adresse
ƒ erleichtert Einbindung des Dienstes zur
Entwicklungszeit erheblich
ƒ theoretisch damit auch dynamische Einbindung zur
Laufzeit möglich
ƒ ähnlich wie Java-IDL, jedoch unabhängig von
Plattformen, Programmiersprachen und Protokollen
© Klaus Schild, 2004
3
Web Services Description Language
© Klaus Schild, 2004
4
Abstrakte vs. konkrete Syntax
abstrakte Syntax
ƒ XML-Standard
Web-Dienst
Operationen
doGoogleSearch
SOAP-Anfrage
SOAP-Antwort
Web-Adresse
http://api.google.com/search
/beta2
© Klaus Schild, 2004
Dienst
publizieren
Anbieter
ƒ beschreibt Netzwerkdienste
als Kommunikationsendpunkte
(Ports), die bestimmte
Nachrichten austauschen
ƒ nicht auf SOAP-Nachrichten
beschränkt
abstrakte Syntax
Operation
Anfrage
Antwort
konkrete Syntax
ƒ aktuelle Version 1.1 (2001)
ƒ kein offizieller W3C-Standard,
sondern W3C-Note von
IBM/Microsoft)
5
Operation
SOAP-Anfrage
SOAP-Antwort
© Klaus Schild, 2004
ƒ unabhängig von
Nachrichtenformaten und
Protokollen
konkrete Syntax (Binding
Binding)
ƒ Abbildung einer abstrakten
Syntax auf konkrete
Nachrichtenformate (wie
SOAP) und Protokolle (wie
http)
ƒ verschiedene Realisierungen
einer abstrakten Syntax
möglich
6
1
Abstrakte und konkrete Schnittstelle
Web-Dienst
Port
Web-Dienst
ƒ abstrakte Schnittstelle (Port
Port
Type):
Type Menge von
abstrakten Operationen
abstrakte Schnittstelle
Operation
Anfrage
abstrakte Schnittstelle
Operation
Anfrage
ƒ konkrete Schnittstelle
(Binding
Binding): Abbildung auf
konkrete Protokolle und
Nachrichtenformate
Antwort
konkrete Schnittstelle
Antwort
konkrete Schnittstelle
ƒ Dienst kann verschiedene
Realisierungen haben:
Operation
SOAP-Anfrage
SOAP-Antwort
Operation
SOAP-Anfrage
Web-Adresse
Port = konkrete Schnittstelle
+ Web-Adresse
SOAP-Antwort
z.B. SOAP/HTTP- und
SOAP-SMTP-Bindung
© Klaus Schild, 2004
ƒ WebService):
Web-Dienst (Service
besteht aus mindestens
einem
Kommunikationsendpunkt
(Port)
Web-Adresse
7
© Klaus Schild, 2004
8
Grundstruktur
Die WSDL-Beschreibung von
Operations
PortTypes
Bindings
Ports
doGoogleSearch
GoogleSearch
Port
SOAP/HTTP
doGetCachedPage
http://…
http://…
Web-Adresse
Web-Adresse
SOAP/SMTP
konkreteManifestation
Manifestationin
inSOAP
SOAP
konkrete
doSpellingSuggestion
abstrakteSyntax
Syntax
abstrakte
© Klaus Schild, 2004
Service
9
© Klaus Schild, 2004
10
XMLXML-Syntax
XMLXML-Syntax
<?xmlversion="1.0"?>
version="1.0"?>
<?xml
<definitionsname="GoogleSearch"
name="GoogleSearch"
<definitions
<?xmlversion="1.0"?>
version="1.0"?>
<?xml
<definitionsname="GoogleSearch"
name="GoogleSearch"
<definitions
ƒ definitions: Wurzel-Element
ƒ definitions:
definitions Wurzel-Element
targetNamespace="urn:GoogleSearch"
targetNamespace="urn:GoogleSearch"
…
…
xmlns="http://schemas.xmlsoap.org/wsdl/">
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>…</types>
<types>…</types>
targetNamespace="urn:GoogleSearch"
targetNamespace="urn:GoogleSearch"
types:Definition
Definitionvon
vonDatentyp
Datentyp
ƒƒ types:
types
…
…
(normalerweisemit
mitXML-Schema)
XML-Schema)
xmlns="http://schemas.xmlsoap.org/wsdl/">
(normalerweise
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>…</types>
portType:abstrakte
abstrakteSchnittstelle,
Schnittstelle,d.h.
d.h.Menge
Menge
<types>…</types>
ƒƒ portType:
portType
<messagename="doGoogleSearch">…</message>
name="doGoogleSearch">…</message>
vonOperationen,
Operationen,die
dieabstrakte
abstrakteNachrichten
Nachrichten
von
<message
austauschen
<messagename="doGoogleSearchResponse">…</message>
name="doGoogleSearchResponse">…</message>
austauschen
<message
<portTypename="GoogleSearchPort">…</portType>
ƒ message:
message:abstrakte
abstrakteNachricht
Nachricht
<portType
ƒname="GoogleSearchPort">…</portType>
<messagename="doGoogleSearch">…</message>
name="doGoogleSearch">…</message>
<message
<messagename="doGoogleSearchResponse">…</message>
name="doGoogleSearchResponse">…</message>
<message
<portTypename="GoogleSearchPort">…</portType>
name="GoogleSearchPort">…</portType>
<portType
ƒ message
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"
<binding
type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
…</binding>
…</binding>
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"
<binding
binding:Abbildung
Abbildungeines
einesportTypes
portTypesauf
auf
ƒƒ binding:
binding
type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
konkreteProtokolle
Protokolleund
undNachrichtenformate
Nachrichtenformate
konkrete
…</binding>
…</binding>
service:Menge
Mengevon
vonports
ports(jeweils
(jeweilsbinding
binding++
ƒƒ service:
service
<servicename="GoogleSearchService">…</service>
name="GoogleSearchService">…</service>
<service
</definitions>
</definitions>
© Klaus Schild, 2004
mailto:
<servicename="GoogleSearchService">…</service>
name="GoogleSearchService">…</service>
<service
Web-Adresse)
</definitions> Web-Adresse)
</definitions>
11
© Klaus Schild, 2004
12
2
Dokumentwurzel
Datentypen
<?xmlversion="1.0"?>
version="1.0"?>
<?xml
<definitionsname="GoogleSearch"
name="GoogleSearch"
<definitions
<definitionsname="GoogleSearch"
name="GoogleSearch"
<definitions
targetNamespace="urn:GoogleSearch"
targetNamespace="urn:GoogleSearch"
…
…
xmlns="http://schemas.xmlsoap.org/wsdl/">
xmlns="http://schemas.xmlsoap.org/wsdl/">
targetNamespace="urn:GoogleSearch"
targetNamespace="urn:GoogleSearch"
…
…
xmlns="http://schemas.xmlsoap.org/wsdl/">
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>…</types>
<types>…</types>
<messagename="doGoogleSearch">…</message>
name="doGoogleSearch">…</message>
<message
….
….
</definitions>
</definitions>
<messagename="doGoogleSearchResponse">…</message>
name="doGoogleSearchResponse">…</message>
<message
<portTypename="GoogleSearchPort">…</portType>
name="GoogleSearchPort">…</portType>
<portType
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"
<binding
type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
…
…
</binding>
</binding>
ƒ Wurzel-Element immer definitions aus dem
Namensraum für WSD (kein W3C-Namensraum)
ƒ WSDL-Beschreibung kann Namen haben.
<servicename="GoogleSearchService">…</service>
name="GoogleSearchService">…</service>
<service
</definitions>
</definitions>
ƒ WSDL-Beschreibung kann eigenen Ziel-Namensraum
definieren.
© Klaus Schild, 2004
13
Datentypen
Datentyp für
<types>
<types>
<schemaxmlns="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.w3.org/2001/XMLSchema"
<schema
…
…
</schema>
</schema>
targetNamespace="urn:GoogleSearch">
targetNamespace="urn:GoogleSearch">
</types>
</types>
ƒ Datentypen, die beim Austausch von Nachrichten
relevant sind
ƒ Verwendung von XML-Schema empfohlen, jedes andere
Typsystem aber auch erlaubt
ƒ Beachte: XML-Schema kann auch verwendet werden,
wenn die Nachrichten nicht in XML übertragen werden.
© Klaus Schild, 2004
15
14
-Suchresultat
<types>
<types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
<xsd:schema
xmlns:typens="urn:GoogleSearch"
xmlns:typens="urn:GoogleSearch"
targetNamespace="urn:GoogleSearch">
targetNamespace="urn:GoogleSearch">
<xsd:complexTypename="GoogleSearchResult">
name="GoogleSearchResult">
<xsd:complexType
<xsd:all>
<xsd:all>
<xsd:elementname="estimatedTotalResultsCount"
name="estimatedTotalResultsCount" type="xsd:int"/>
type="xsd:int"/>
<xsd:element
<xsd:elementname="resultElements"
name="resultElements"type="typens:ResultElementArray"/>
type="typens:ResultElementArray"/>
<xsd:element
<xsd:elementname="searchQuery"
name="searchQuery"type="xsd:string"/>
type="xsd:string"/>
<xsd:element
<xsd:elementname="startIndex"
name="startIndex"type="xsd:int"/>
type="xsd:int"/>
<xsd:element
<xsd:elementname="endIndex"
name="endIndex"type="xsd:int"/>
type="xsd:int"/>
<xsd:element
…
…
</xsd:all>
</xsd:all>
komplettes XML-Schema
XML-Schema
ƒƒ komplettes
</xsd:complexType>
</xsd:complexType>
</schema>
ƒ
Ziel-Namensraum
(normalerweise identisch
identisch
</schema>
ƒ Ziel-Namensraum (normalerweise
</types>
mit Ziel-Namensraum
Ziel-Namensraum von
von WSDL)
WSDL)
</types>
mit
© Klaus Schild, 2004
16
Abstrakte Nachrichten
Abstrakte Nachrichten
<definitionsname="GoogleSearch"
name="GoogleSearch"
<definitions
targetNamespace="urn:GoogleSearch"
targetNamespace="urn:GoogleSearch"
…
…
xmlns="http://schemas.xmlsoap.org/wsdl/">
xmlns="http://schemas.xmlsoap.org/wsdl/">
<messagename="doGoogleSearchResponse">
name="doGoogleSearchResponse">
<message
<partname="return"
name="return"type="typens:GoogleSearchResult"/>
type="typens:GoogleSearchResult"/>
<part
</message>
</message>
<types>…</types>
<types>…</types>
<messagename="doGoogleSearch">…</message>
name="doGoogleSearch">…</message>
<message
ƒ definiert abstrakte Nachricht mit Namen (Referenz)
ƒ Definitionen werden in portType oder binding verwendet
<messagename="doGoogleSearchResponse">…</message>
name="doGoogleSearchResponse">…</message>
<message
<portTypename="GoogleSearchPort">…</portType>
name="GoogleSearchPort">…</portType>
<portType
ƒ können verschiedene logische Bestandteile (part
part)
haben, z.B.:
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"
<binding
type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
…
…
</binding>
</binding>
Parameter eines entfernten Prozeduraufrufs
ƒ jedes dieser Bestandteile hat ebenfalls einen Namen
<servicename="GoogleSearchService">…</service>
name="GoogleSearchService">…</service>
<service
abstrakte Nachrichten,
Nachrichten, vom
vom WebWebƒƒ abstrakte
</definitions>
Dienst empfangen
empfangen oder
oder gesendet
gesendet
</definitions>
Dienst
© Klaus Schild, 2004
© Klaus Schild, 2004
ƒ Reihenfolge der logischen Bestandteile unerheblich
17
© Klaus Schild, 2004
18
3
Nachrichten mit strukturiertem Inhalt
Wie abstrakt ist eine abstrakte Nachricht?
zwei unterschiedliche Modellierungen
ƒ message beschreibt abstrakte Syntax
1. nur ein Bestandteil (part), diesem wird komplexer
Datentyp zugeordnet:
ƒ Konkrete Schnittstelle (binding) bildet abstrakte Syntax
auf bestimmte Protokolle und Nachrichtenformate ab.
<messagename="doGoogleSearchResponse">
name="doGoogleSearchResponse">
<message
<partname="return"
name="return"type="typens:complexType"/>
type="typens:complexType"/>
<part
</message>
</message>
ƒ Dennoch kann abstrakte Nachricht einer konkreten
Realisierung (binding) sehr ähnlich sein.
typens:complexType könnte z.B. 2 Parameter enthalten
abstrakt eine
eine abstrakte
abstrakte
Wie abstrakt
Wie
Syntax ist,
ist, zeigt
zeigt also
also erst
erst die
die
Syntax
konkrete Schnittstelle
Schnittstelle (binding).
(binding).
konkrete
2. mehre Bestandteile (parts), denen jeweils ein Element
aus types zugeordnet wird:
<messagename="doGoogleSearchResponse">
name="doGoogleSearchResponse">
<message
<partname="param1"
name="param1"element="typens:param1"/>
element="typens:param1"/>
<part
<partname="param2"
name="param2"element="typens:param2"/>
element="typens:param2"/>
<part
</message>
</message>
© Klaus Schild, 2004
19
© Klaus Schild, 2004
20
Abstrakte Schnittstelle
Abstrakte Schnittstelle
<definitionsname="GoogleSearch"
name="GoogleSearch"
<definitions
targetNamespace="urn:GoogleSearch"
targetNamespace="urn:GoogleSearch"
…
…
xmlns="http://schemas.xmlsoap.org/wsdl/">
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>…</types>
<types>…</types>
<messagename="doGoogleSearch">…</message>
name="doGoogleSearch">…</message>
<message
<messagename="doGoogleSearchResponse">…</message>
name="doGoogleSearchResponse">…</message>
<message
<portTypename="GoogleSearchPort">
name="GoogleSearchPort">
<portType
<operationname="doGoogleSearch">
name="doGoogleSearch">
<operation
<inputmessage="typens:doGoogleSearch"/>
message="typens:doGoogleSearch"/>
<input
<outputmessage="typens:doGoogleSearchResponse"/>
message="typens:doGoogleSearchResponse"/>
<output
<messagename="doGoogleSearch">…</message>
name="doGoogleSearch">…</message>
<message
<messagename="doGoogleSearchResponse">…</message>
name="doGoogleSearchResponse">…</message>
<message
<portTypename="GoogleSearchPort">…</portType>
name="GoogleSearchPort">…</portType>
<portType
</operation>
</operation>
…
…
</portType>
</portType>
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"
<binding
type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
…
…
</binding>
</binding>
<servicename="GoogleSearchService">…</service>
name="GoogleSearchService">…</service>
<service
ƒ definiert abstrakte Schnittstelle als Menge von
abstrakten Operationen (operations)
ƒ Definition wird in binding verwendet
</definitions>
</definitions>
© Klaus Schild, 2004
21
Abstrakte Schnittstelle
© Klaus Schild, 2004
22
Beispiel
<messagename="doGoogleSearch">…</message>
name="doGoogleSearch">…</message>
<message
<messagename="doGoogleSearchResponse">…</message>
name="doGoogleSearchResponse">…</message>
<message
<portTypename="GoogleSearchPort">
name="GoogleSearchPort">
<portType
<operationname="doGoogleSearch">
name="doGoogleSearch">
<operation
<inputmessage="typens:doGoogleSearch"/>
message="typens:doGoogleSearch"/>
<input
<outputmessage="typens:doGoogleSearchResponse"/>
message="typens:doGoogleSearchResponse"/>
<output
</operation>
</operation>
…
…
</portType>
</portType>
GoogleSearchPort==33Operationen
Operationen
GoogleSearchPort
ƒ operation:
operation definiert einfaches Interaktionsmuster mit
Eingangs- und Ausgangs-Nachrichten.
typens:doGoogleSearch== message
message
typens:doGoogleSearch
ƒ Definition wird in binding verwendet
typens:GoogleSearchResponse==message
message
typens:GoogleSearchResponse
ƒ verwendet keine Datentypen, sondern Nachrichten
© Klaus Schild, 2004
23
© Klaus Schild, 2004
24
4
Mögliche Interaktionsmuster
Abstrakte Interaktionsmuster
<operationname="…">
name="…">
<operation
<inputmessage="…"/>
message="…"/>
<input
</operation>
</operation>
Einweg (one way, fire
and forget)
<operationname="…">
name="…">
<operation
<inputmessage="…"/>
message="…"/>
<input
<outputmessage="…"/>
message="…"/>
<output
</operation>
</operation>
ƒ Anfrage-Antwort-Muster müssen nicht mit einer
Netzwerkkommunikation (z.B. HTTP request/response)
realisiert werden.
Anfrage-Antwort
(request-response)
ƒ auch Realisierung z.B. mit zwei unabhängigen
Kommunikationen (z.B. E-Mails) möglich
<operationname="…">
name="…">
<operation
<outputmessage="…"/>
message="…"/>
<output
</operation>
</operation>
Benachrichtigung
(notification)
<operationname="…">
name="…">
<operation
<outputmessage="…"/>
message="…"/>
<output
<inputmessage="…"/>
message="…"/>
<input
</operation>
</operation>
Benachrichtigung-Antwort
(notification-response)
ƒ entfernter Prozeduraufruf daher auch mit SMTP
realisierbar
ƒ Realisierung wird erst in der konkreten Schnittstelle
(binding) festgelegt
© Klaus Schild, 2004
25
Komplexe Interaktionsmuster
26
Entfernte Prozeduraufrufe
<operationname="doGoogleSearch"
name="doGoogleSearch"parameterOrder="key
parameterOrder="keyqqstart
start…">
…">
<operation
<inputmessage="typens:doGoogleSearch"/>
message="typens:doGoogleSearch"/>
<input
Î Registrierung zum Börsenticker
Í Bestätigung der Registrierung
<outputmessage="typens:doGoogleSearchResponse"/>
message="typens:doGoogleSearchResponse"/>
<output
</operation>
</operation>
Í aktueller Börsenkurs (Benachrichtigung)
ƒ Reihenfolge der Bestandteile (parts) unerheblich
Server
Client
© Klaus Schild, 2004
ƒ bei entfernten Prozeduraufrufen Reihenfolge der InputParameter (parts) aber häufig wichtig
<operationname="…">
name="…">
<operation
<inputmessage="…"/>
message="…"/>
<input
<outputmessage="…"/>
message="…"/>
<output
<outputmessage="…"/>
message="…"/>
<output
</operation>
</operation>
ƒ Reihenfolge kann mit parameterOrder festgelegt werden.
In WSDL
WSDL
In
nicht erlaubt!
erlaubt!
nicht
© Klaus Schild, 2004
ƒ zusätzliche Konvention: In/Out-Parameter erscheinen
sowohl in input- als auch in output-Nachricht.
27
Fehlermeldungen
Benachrichtigung-Antwort
<operationname="…">
name="…">
<operation
<inputmessage="…"/>
message="…"/>
<input
<outputmessage="…"/>
message="…"/>
<output
<faultmessage="…"/>
message="…"/>
<fault
</operation>
</operation>
<operationname="…">
name="…">
<operation
<outputmessage="…"/>
message="…"/>
<output
<inputmessage="…"/>
message="…"/>
<input
<faultmessage="…"/>
message="…"/>
<fault
</operation>
</operation>
Server
Client
<definitionsname="GoogleSearch"
name="GoogleSearch"
<definitions
targetNamespace="urn:GoogleSearch"
targetNamespace="urn:GoogleSearch"
…
…
xmlns="http://schemas.xmlsoap.org/wsdl/">
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>…</types>
<types>…</types>
<messagename="doGoogleSearch">…</message>
name="doGoogleSearch">…</message>
<message
<messagename="doGoogleSearchResponse">…</message>
name="doGoogleSearchResponse">…</message>
<message
<portTypename="GoogleSearchPort">…</portType>
name="GoogleSearchPort">…</portType>
<portType
Server
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"
<binding
type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
…
…
</binding>
</binding>
ƒ Statt Antwort kann auch Fehler auf Anwendungsebene
gemeldet werden.
ƒ nur eine Fehlermeldung: kann aber komplexen Datentyp
mit unterschiedlichen Fehlertypen (xsd:choice) haben.
© Klaus Schild, 2004
28
Konkrete Schnittstelle
Anfrage-Antwort
Client
© Klaus Schild, 2004
29
<servicename="GoogleSearchService">…</service>
name="GoogleSearchService">…</service>
<service
</definitions>
</definitions>
© Klaus Schild, 2004
30
5
Konkrete Schnittstelle
abstrakte Syntax
Operation
Anfrage
Antwort
konkrete Syntax
Operation
SOAP-Anfrage
SOAP-Antwort
Konkrete Schnittstelle
ƒ konkrete Schnittstelle
(Binding
Binding): Abbildung einer
abstrakten Schnittstelle
(portType) auf konkrete
Nachrichtenformate und
Protokolle
ƒ jede abstrakte Operation des
PortType wird abgebildet
ƒ für ein PortType
verschiedene Abbildungen
(Bindings) möglich
© Klaus Schild, 2004
abstrakteSchnittstelle
Schnittstelleerlaubt
erlaubt
abstrakte
31
Erweiterungselemente
33
WebWeb-Dienst (Service)
32
ƒ engl. extensibility elements
ƒ Platzhalter für spezielle Bindings
ƒ also Platzhalter in der WSDL-Grammatik für
entsprechende Erweiterungen
ƒ WSDL 1.1 definiert drei Bindings:
ƒ SOAP-Binding
ƒ HTTP-Binding
werdengleich
gleichvorgestellt,
vorgestellt,
werden
vorhernoch
nochletzten
letztenTeil
Teil
vorher
einer
WSDL-Beschreibung
einer WSDL-Beschreibung
ƒ MIME-Binding
© Klaus Schild, 2004
34
WebWeb-Dienst (Service)
<definitionsname="GoogleSearch"
name="GoogleSearch"
<definitions
targetNamespace="urn:GoogleSearch"
targetNamespace="urn:GoogleSearch"
…
…
xmlns="http://schemas.xmlsoap.org/wsdl/">
xmlns="http://schemas.xmlsoap.org/wsdl/">
<servicename="GoogleSearchService">
name="GoogleSearchService">
<service
<portname="GoogleSearchPort"
name="GoogleSearchPort"binding="typens:GoogleSearchBinding">
binding="typens:GoogleSearchBinding">
<port
Erweiterungselement(Web-Adresse)
(Web-Adresse)
Erweiterungselement
</port>
</port>
…
…
</service>
</service>
<types>…</types>
<types>…</types>
<messagename="doGoogleSearch">…</message>
name="doGoogleSearch">…</message>
<message
<messagename="doGoogleSearchResponse">…</message>
name="doGoogleSearchResponse">…</message>
<message
<portTypename="GoogleSearchPort">…</portType>
name="GoogleSearchPort">…</portType>
<portType
ƒ Web-Dienst = Menge von Kommunikationsendpunkten
(Ports)
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"
<binding
type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
…
…
</binding>
</binding>
ƒ mehrere service-Elemente erlaubt, falls unterschiedliche
Web-Dienste angeboten werden, z.B.:
GoogleSearchService und GoogleClassificationService
<servicename="GoogleSearchService">…</service>
name="GoogleSearchService">…</service>
<service
</definitions>
</definitions>
© Klaus Schild, 2004
© Klaus Schild, 2004
Erweiterungselemente
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
<binding
Erweiterungselement
Erweiterungselement
<operationname="doGoogleSearch">
name="doGoogleSearch">
<operation
Erweiterungselement
Erweiterungselement
<input>
<input>
Erweiterungselement
Erweiterungselement
Abbildungmit
mitsog.
sog.
ƒƒ Abbildung
</input>
</input>
Erweiterungselementenkodiert
kodiert
Erweiterungselementen
<output>
<output>
ƒ Informationen
Informationenüber
überdie
die
ƒ
Erweiterungselement
Erweiterungselement
Abbildungauf
aufallen
allenEbenen:
Ebenen:
</output>
Abbildung
</output>
Bindingselbst
selbst
ƒƒ Binding
</operation>
</operation>
Operation
ƒƒ Operation
…
…
Input-und
undOutput-Nachricht
Output-Nachricht
ƒƒ Input</binding>
</binding>
Fehlermeldung
ƒƒ Fehlermeldung
© Klaus Schild, 2004
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
<binding
Erweiterungselement
Erweiterungselement
<operationname="doGoogleSearch">
name="doGoogleSearch">
<operation
Erweiterungselement
Erweiterungselement
<input>
<input>
Erweiterungselement
Erweiterungselement
</input>
</input>
definiertkonkrete
konkrete Schnittstelle
Schnittstelle
ƒƒ definiert
<output>
<output>
ƒ
Definition
wird
in
service
benutzt
Erweiterungselement ƒ Definition wird in service benutzt
Erweiterungselement
ƒ
type:
die
abgebildete
abstrakte
</output>
ƒ
type:
die
abgebildete
abstrakte
</output>
Schnittstelle (portType)
(portType)
</operation>
Schnittstelle
</operation>
…
…
ƒ
mehrere
binding-Elemente
füreine
eine
ƒ mehrere binding-Elemente für
</binding>
</binding>
35
© Klaus Schild, 2004
36
6
Kommunikationsendpunkt
Welche Ports bilden einen Service?
<portname="GoogleSearchPort"
name="GoogleSearchPort"binding="typens:GoogleSearchBinding">
binding="typens:GoogleSearchBinding">
<port
Erweiterungselement(Web-Adresse)
(Web-Adresse)
Erweiterungselement
</port>
</port>
ƒ definiert einen benannten Kommunikationsendpunkt:
Binding + genau eine Web-Adresse
ƒ Web-Adresse mit einem Erweiterungselement
spezifiziert, z.B.:
<servicename="GoogleSearchService">
name="GoogleSearchService">
<service
<port…>…</port>
<port…>…</port>
<port...>…</port>
<port...>…</port>
</service>
</service>
<servicename="GoogleClassificationService">
name="GoogleClassificationService">
<service
<port…>…</port>
<port…>…</port>
</service>
</service>
Ports eines Web-Dienstes (service)
<portname="GoogleSearchPort"
name="GoogleSearchPort"binding="typens:GoogleSearchBinding">
binding="typens:GoogleSearchBinding">
<port
<soap:addresslocation="http://api.google.com/search/beta2"/>
location="http://api.google.com/search/beta2"/>
<soap:address
</port>
</port>
© Klaus Schild, 2004
37
ƒ kommunizieren nicht untereinander
ƒ Ports mit derselben abstrakten Schnittstelle, aber
versch. Bindings oder Web-Adressen:
semantisch äquivalente Alternativen
© Klaus Schild, 2004
38
Grundstruktur
Operations
PortTypes
Bindings
Ports
doGoogleSearch
GoogleSearch
Port
SOAP/HTTP
doGetCachedPage
http://…
SOAP-Binding
http://…
SOAP/SMTP
doSpellingSuggestion
mailto:
Service
© Klaus Schild, 2004
39
© Klaus Schild, 2004
40
SOAPSOAP-Bindung von WSDL
SOAPSOAP-Bindung:
Bindung: Erweiterungselemente
<definitionsname="GoogleSearch"
name="GoogleSearch"
<definitions
targetNamespace="urn:GoogleSearch"
targetNamespace="urn:GoogleSearch"
…
…
xmlns="http://schemas.xmlsoap.org/wsdl/">
xmlns="http://schemas.xmlsoap.org/wsdl/">
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
<binding
Erweiterungselementsoap:binding
soap:binding
Erweiterungselement
<operationname="doGoogleSearch">
name="doGoogleSearch">
<operation
Erweiterungselementsoap:operation
soap:operation
Erweiterungselement
<input>
<input>
Erweiterungselementesoap:body
soap:bodyund
undsoap:header
soap:header
Erweiterungselemente
</input>
</input>
<output>
<output>
Erweiterungselementsoap:body
soap:bodyund
undsoap:header
soap:header
Erweiterungselement
</output>
</output>
<fault>
<fault>
Erweiterungselementsoap:fault
soap:fault
Erweiterungselement
</fault>
</fault>
Erweiterungselementebeschreiben
beschreiben
ƒƒ Erweiterungselemente
</operation>
</operation>
Abbildungauf
aufSOAP-Nachricht
SOAP-Nachricht
Abbildung
</binding>
</binding>
<types>…</types>
<types>…</types>
<messagename="doGoogleSearch">…</message>
name="doGoogleSearch">…</message>
<message
<messagename="doGoogleSearchResponse">…</message>
name="doGoogleSearchResponse">…</message>
<message
<portTypename="GoogleSearchPort">…</portType>
name="GoogleSearchPort">…</portType>
<portType
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"
<binding
type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
…
…
</binding>
</binding>
<servicename="GoogleSearchService">…</service>
name="GoogleSearchService">…</service>
<service
</definitions>
</definitions>
© Klaus Schild, 2004
41
© Klaus Schild, 2004
Beachte:WSDL
WSDL1.0
1.0benutzt
benutztSOAP
SOAP1.1
1.1
ƒƒ Beachte:
42
7
soap:binding
soap:binding
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
<binding
Erweiterungselementsoap:binding
soap:binding
Erweiterungselement
<operationname="doGoogleSearch">
name="doGoogleSearch">
<operation
Erweiterungselementsoap:operation
soap:operation
Erweiterungselement
<input>
<input>
Erweiterungselementesoap:body
soap:bodyund
undsoap:header
soap:header
Erweiterungselemente
</input>
</input>
<output>
<output>
Erweiterungselementsoap:body
soap:bodyund
undsoap:header
soap:header
Erweiterungselement
</output>
</output>
<fault>
<fault>
Erweiterungselementsoap:fault
soap:fault
Erweiterungselement
</fault>
</fault>
</operation>
</operation>
</binding>
</binding>
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
<binding
<soap:bindingxmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
<soap:binding
style="rpc"transport="http://schemas.xmlsoap.org/soap/http"/>
transport="http://schemas.xmlsoap.org/soap/http"/>
style="rpc"
<operationname="doGoogleSearch">
name="doGoogleSearch">
<operation
…
…
</operation>
</operation>
</binding>
</binding>
© Klaus Schild, 2004
43
SOAPSOAP-Stile
ƒ soap:binding:
soap:binding besagt, dass portType mit SOAP
realisiert wird
ƒ transport:
transport wie SOAP-Nachrichten übertragen werden
ƒ Beachte: HTTP meint hier HTTP-POST
ƒ auch möglich: transport="http://schemas.xmlsoap.org/soap/smtp"
ƒ style:
style entfernte Prozeduraufrufe (rpc) oder Messaging
(document)
© Klaus Schild, 2004
soap:body und soap:header
style="rpc"
style="rpc"
<body>
<body>
<procedure-name>
<procedure-name>
<part-1>…<part-1>
<part-1>…<part-1>
…
…
<part-n>…<part-n>
<part-n>…<part-n>
</procedure-name>
</procedure-name>
</body>
</body>
style="document"
style="document"
<body>
<body>
<part-1>…<part-1>
<part-1>…<part-1>
…
…
<part-n>…<part-n>
<part-n>…<part-n>
</body>
</body>
ƒ legt Struktur des SOAP-Nachrichteninhalts (body) fest,
darüber hinaus keine Bedeutung
ƒ SOAP-Stil in soap:binding gilt für alle Operationen, kann
aber in jeder einzelnen Operation überschrieben werden.
© Klaus Schild, 2004
45
soap:body
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
<binding
Erweiterungselementsoap:binding
soap:binding
Erweiterungselement
<operationname="doGoogleSearch">
name="doGoogleSearch">
<operation
Erweiterungselementsoap:operation
soap:operation
Erweiterungselement
<input>
<input>
Erweiterungselementesoap:body
soap:bodyund
undsoap:header
soap:header
Erweiterungselemente
</input>
</input>
<output>
<output>
Erweiterungselementsoap:body
soap:bodyund
undsoap:header
soap:header
Erweiterungselement
</output>
</output>
<fault>
<fault>
Erweiterungselementsoap:fault
soap:fault
Erweiterungselement
</fault>
</fault>
</operation>
</operation>
</binding>
</binding>
© Klaus Schild, 2004
<input>
<input>
<soap:bodyuse="encoded"
use="encoded"
<soap:body
<input>
<input>
<soap:bodyuse="literal"/>
use="literal"/>
<soap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
</input>
Kompletteinput-Nachricht
input-Nachrichtwird
wirdkodiert
kodiertin
in
Komplette
denSOAP-Body
SOAP-Bodyübernommen.
übernommen.
den
</input>
</input>
<output>…</output>
<output>…</output>
Kompletteinput-Nachricht
input-Nachrichtwird
wirdunverändert
unverändert
Komplette
inSOAP-Body
SOAP-Bodyübernommen.
übernommen.
in
ƒ soap:body:
soap:body Abbildung einer abstrakten input- oder outputNachricht auf den SOAP-Nachrichteninhalt (body)
ƒ use="literal"
use="literal": Abstrakte Nachricht wird unverändert
übernommen
© Klaus Schild, 2004
46
soap:body
<operationname="doGoogleSearch">
name="doGoogleSearch">
<operation
<soap:operationsoapAction="urn:GoogleSearchAction"/>
soapAction="urn:GoogleSearchAction"/>
<soap:operation
</operation>
</operation>
44
47
ƒ use="encoded"
use="encoded": Abstrakte Nachricht wird mit Hilfe eines
bestimmten Verfahrens (encodingStyle) kodiert (wie in
SOAP).
ƒ Google verwendet Kodierungsverfahren von SOAP, z.B.
SOAP-Arrays für Suchresultate.
© Klaus Schild, 2004
48
8
soap:header
soap:address
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
<binding
<soap:bindingxmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
<soap:binding
style="rpc"transport="http://schemas.xmlsoap.org/soap/http"/>
transport="http://schemas.xmlsoap.org/soap/http"/>
style="rpc"
…
…
</binding>
</binding>
<operationname="doGoogleSearch">
name="doGoogleSearch">
<operation
<soap:operationsoapAction="urn:GoogleSearchAction"/>
soapAction="urn:GoogleSearchAction"/>
<soap:operation
<input>
<input>
<soap:bodyparts="q
parts="qstart"
start"use="encoded"
use="encoded"…/>
…/>
<soap:body
<soap:headerparts="key
parts="keymaxResults
maxResultsfilter
filterrestrict
restrict…"
…"
<soap:header
use="literal"/>
use="literal"/>
</input>
</input>
<output>…</output>
<output>…</output>
</operation>
</operation>
<portname="GoogleSearchPort"
name="GoogleSearchPort"binding="typens:GoogleSearchBinding">
binding="typens:GoogleSearchBinding">
<port
<soap:addresslocation="http://api.google.com/search/beta2"/>
location="http://api.google.com/search/beta2"/>
<soap:address
</port>
</port>
input-Nachrichtwird
wirdauf
aufSOAPSOAPinput-Nachricht
Headerund
und-Body
-Bodyverteilt.
verteilt.
Header
ƒ Jeder Kommunikationsendpunkt muss genau eine WebAdresse (soap:address) haben.
ƒ Teile der abstrakten Nachricht werden im SOAPBriefkopf repräsentiert.
ƒ Beachte: Die Web-Adresse muss zum
Transportprotokoll des SOAP-Bindings passen.
ƒ Struktur von soap:header analog zu soap:body.
© Klaus Schild, 2004
49
© Klaus Schild, 2004
50
SOAP über HTTP
ƒ Bindung für SOAP über HTTP haben wir bereits
gesehen:
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
<binding
<soap:bindingxmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
<soap:binding
style="rpc"transport="http://schemas.xmlsoap.org/soap/http"/>
transport="http://schemas.xmlsoap.org/soap/http"/>
style="rpc"
…
…
</binding>
</binding>
HTTP-Binding
ƒ hiermit wird SOAP über HTTP-POST-Schnittstelle
realisiert
ƒ es gibt aber auch Möglichkeit, eine HTTP-Schnittstelle
zu definieren, die nicht SOAP verwendet
© Klaus Schild, 2004
51
HTTPHTTP-GETGET-Anfrage
52
HTTPHTTP-GETGET-Binding ohne SOAP
ƒ HTTP-GET-Anfrage kodiert alle Parameter des RPCs in
der URL:
GET/search/beta2/doGoogleSearch?key=45675353&q=Anfrage&…
/search/beta2/doGoogleSearch?key=45675353&q=Anfrage&…
GET
HTTP/1.1
HTTP/1.1
Host:api.google.com
api.google.com
Host:
Content-Type:text/xml;
text/xml;charset="utf-8"
charset="utf-8"
Content-Type:
Content-Length:nnnn
nnnn
Content-Length:
Antwort als
als HTML-Dokument
HTML-Dokument
Antwort
© Klaus Schild, 2004
© Klaus Schild, 2004
53
<servicename="GoogleSearchService">
name="GoogleSearchService">
<service
<portname="GoogleSearchPort2"
name="GoogleSearchPort2"
<port
binding="typens:GoogleSearchBinding2">
binding="typens:GoogleSearchBinding2">
<http:addressxmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
<http:address
location="http://api.google.com/search/beta2"/>
location="http://api.google.com/search/beta2"/>
</service>
</service>
<bindingname="GoogleSearchBinding2"
name="GoogleSearchBinding2"type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
<binding
<http:bindingverb="GET"/>
verb="GET"/>
<http:binding
<operationname="doGoogleSearch">
name="doGoogleSearch">
<operation
<http:operationlocation="doGoogleSearch"/>
location="doGoogleSearch"/> relative Adresse
<http:operation
<input><http:urlEncoded/></input>
<input><http:urlEncoded/></input>
<output><mime:contentpart="docs"
part="docs"type="text/html"/></output>
type="text/html"/></output>
<output><mime:content
</operation>
</operation>
Browser-basiertes Google
Google mit
mit
Browser-basiertes
</binding>
</binding>
© Klaus Schild, 2004
WSDL beschrieben
beschrieben
WSDL
54
9
Vorteile
+ plattformunabhängiger XML-Standard
+ etabliert
+ Syntax der Schnittstelle kann genau festgelegt werden.
+ Unterschiedliche Realisierungen einer abstrakter
Schnittstelle möglich
z.B. SOAP über HTTP und SMTP
Bewertung
© Klaus Schild, 2004
55
© Klaus Schild, 2004
Nachteile
Wie geht es weiter?
-
;
Prinzipieller Aufbau von WSDL-Beschreibungen
;
Protokoll-Bindungen in WSDL
;
Vor- und Nachteile von WSDL
;
Google-WSDL lesen und erweitern können
-
verschiedene Protokoll-Bindungen (wie HTTP vs.
SMTP) können unterschiedliche Semantik haben
keine explizite Unterscheidung zwischen
synchron/asynchron
-
keine komplexen Interaktionsmuster
-
keine qualitativen Aspekten (quality of service)
-
keine Sicherheitsaspekte
56
Heute 16:15
ƒ Tutorium
Nächste Woche
ƒ Wie wird WSDL verwendet?
ƒ Anforderungen aus der Praxis
© Klaus Schild, 2004
57
© Klaus Schild, 2004
58
soap:operation
<bindingname="GoogleSearchBinding"
name="GoogleSearchBinding"type="typens:GoogleSearchPort">
type="typens:GoogleSearchPort">
<binding
Erweiterungselementsoap:binding
soap:binding
Erweiterungselement
<operationname="doGoogleSearch">
name="doGoogleSearch">
<operation
Erweiterungselementsoap:operation
soap:operation
Erweiterungselement
<input>
<input>
Erweiterungselementesoap:body
soap:bodyund
undsoap:header
soap:header
Erweiterungselemente
</input>
</input>
<output>
<output>
Erweiterungselementsoap:body
soap:bodyund
undsoap:header
soap:header
Erweiterungselement
</output>
</output>
<fault>
<fault>
Erweiterungselementsoap:fault
soap:fault
Erweiterungselement
</fault>
</fault>
</operation>
</operation>
</binding>
</binding>
Anhang
© Klaus Schild, 2004
59
© Klaus Schild, 2004
60
10
soap:operation
<operationname="doGoogleSearch">
name="doGoogleSearch">
<operation
<soap:operationsoapAction="urn:GoogleSearchAction"/>
soapAction="urn:GoogleSearchAction"/>
<soap:operation
<input>…</input>
<input>…</input>
<output>…</output>
<output>…</output>
</operation>
</operation>
ƒ soapAction: legt für Operation den SOAPAction-Briefkopf
in der HTTP-Anfrage fest
ƒ style: SOAP-Standard-Stil kann für die Operation
überschrieben werden.
© Klaus Schild, 2004
61
11
Document
Kategorie
Internet
Seitenansichten
19
Dateigröße
862 KB
Tags
1/--Seiten
melden