• Keine Ergebnisse gefunden

SOAP SOAP

N/A
N/A
Protected

Academic year: 2022

Aktie "SOAP SOAP"

Copied!
72
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

SOAP SOAP

(2)

Block Web Services Block Web Services

Vorlesungs Vorlesungs--

termin termin

Vorlesung Vorlesung

4 + 1 + 1 Termine 4 + 1 + 1 Termine

Übung Übung – 2 Termine 2 Termine 06.06.

SOAP

WSDL 04.07. Web Services in der Praxis &

Ausblick 11.07. Rückblick

+ (14:00-16:00) Sprechstunde vor der Klausur, Fabeckstr. 15 20.06.

(heute) 27.06.

18.07.

ÜbungsÜbungs-- termin termin Web Services, SOA, RPCs vs.

Messaging

SOAP im Detail 25./26.06

WSDL im Detail 02./03.07

Klausur

(3)

Heutige Vorlesung Heutige Vorlesung

letzte Woche letzte Woche

;; Was sind Web Services?Was sind Web Services?

;; Was ist SOAP? / Was ist WSDL?Was ist SOAP? / Was ist WSDL?

;; AnwendungenAnwendungen

;; RPC vs. MessagingRPC vs. Messaging heutige Vorlesung

heutige Vorlesung ÆÆ SOAP im DetailSOAP im Detail

ƒ prinzipieller Aufbau

ƒ Kodierung von RPCs

ƒ Verarbeitung & Übertragung

(4)

Web Services

Web Service WSDL

Beschreibt Service UDDI

Verzeichnis

Sucht nach Service

Verweist auf

die Service-Beschreibung

Verweist a

uf de

n Service Service Nutzer SOAP

(Service Consumer)

(5)

Was ist SOAP?

Was ist SOAP?

ƒ Kommunikationskomponente von Web Services.

ƒ Protokoll für Nachrichtenaustausch zwischen Web Service-Konsument und Web Service-Anbieter

ƒ XML-basiert

ƒ Plattformunabhängig

ƒ Programmierspracheunabhängig

ƒ basierte auf Entwicklungen von Microsoft und IBM

(6)

Wozu SOAP?

Wozu SOAP?

ƒ SOAP: Format zum Austausch von Daten

ƒ Warum spezielles Format und nicht einfach beliebige XML-Syntax zulassen?

Nachfrager Anbieter

öffentliches Verzeichnis

WSDL- Beschreibung WSDL-

Beschreibung

SOAP- Nachrichten

(7)

Wozu SOAP?

Wozu SOAP?

ƒ Es muss auf jeden Fall festgelegt werden wie:

- Aufruf proc(param-1, …, param-n) kodiert wird - Fehlermeldungen kodiert werden

- Arrays type[] und Matrizen type[][] kodiert werden

ƒ Und genau dies leistet SOAP!

ƒ zusätzlich bietet SOAP noch ein Konzept, um Datenformate einfach zu erweitern

(8)

Prinzipieller Aufbau

Prinzipieller Aufbau

(9)

Aufbau einer

Aufbau einer SOAP SOAP - - Nachricht Nachricht

<env:Envelope xmlns:env=" http://www.w3.org/2003/05/soap-envelope/">

<!- SOAP Header -->

<!- SOAP Body -->

SOAP Envelope

SOAP Header SOAP Body

SOAP Version 1.2

(10)

Versionen Versionen

SOAP 1.1 SOAP 1.1

ƒ kein offizieller W3C-Standard, aber weit verbreitet

ƒ wird von aktueller Version von WSDL benutzt

ƒ wird von Google benutzt SOAP 1.2

SOAP 1.2

ƒ einzige Version, die vom W3C als Standard offiziell akzeptiert wurde

ƒ Vorlesung benutzt diese Version Zum Unterschied

Zum Unterschied

ƒ http://www.hadleynet.org/marc/whatsnew.html

W3C Note (2000)

W3C Recommendation (seit 2003) Second Edition -April 2007

(11)

Version =

Version = Envelope Envelope - - Namensraum Namensraum

SOAP 1.2 SOAP 1.2

ƒ W3C-Namensraum SOAP 1.1

SOAP 1.1

ƒ XMLSOAP-Namensraum

<?xml version='1.0' ?>

<?xml version='1.0' ?>

<env:Envelope xmlns:env=" http://schemas.xmlsoap.org/soap/envelope">

</env:Envelope>

ƒ unterschiedliche Namensräume Ö nicht kompatibel

(12)

Prinzipieller Aufbau (SOAP V.1.1) Prinzipieller Aufbau (SOAP V.1.1)

<?xml version='1.0' encoding='UTF-8'?>

<env:Envelope

xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">

<env:Header>

Zusatzinformationen

</env:Header>

<env:Body>

Nachrichtinhalt

</env:Body>

</env:Envelope>

ƒ Wurzel-Element: EnvelopeEnvelope aus SOAP-Namensraum

ƒ kein W3C-Namensraum

ƒƒ Header: optionalHeader

ƒƒ Body: obligatorischBody

(13)

SOAP Version 1.2

is a lightweight lightweight protocol protocol intended for exchanging structured

information in a decentralized,

distributed environment.

(14)

SOAP Block

SOAP Nachricht Æ ein XML DokumentXML Dokument das beinhaltet:

ƒ obligatorisches EnvelopeEnvelope ElementElement – identifiziert ein XML Dokument als SOAP Nachricht

ƒ optionales HeaderHeader ElementElement – Header Informationen

ƒ obligatorisches Body ElementBody Element – Call & Response Informationen

ƒ optionales Fault ElementFault Element – Informationen über Fehler

(15)

SOAP Syntax Regel

ƒ SOAP Nachricht MUSS in XML kodiertin XML kodiert werden

ƒ SOAP Nachricht MUSS SOAP EnvelopeEnvelope NamespaceNamespace benutzen

ƒ SOAP Nachricht MUSS NICHT Verweis auf DTD beinhalten

ƒ SOAP Nachricht MUSS NICHT XML Processing Anweisungen beinhalten

(16)

SOAP

SOAP Envelope Envelope Element Element

ƒ Name des Elements: EnvelopeEnvelope

ƒƒ Envelope: Wurzel-Element einer SOAP NachrichtEnvelope

ƒ beinhaltet SOAP Namespace

ƒ identifiziert SOAP Nachricht

<?xml version="1.0"?>

<env:Envelope

xlmns:env="http://www.w3.org/2003/05/soap-envelope">

</env:Envelope>

(17)

Nachrichteninhalt Nachrichteninhalt

ƒƒ Body: beliebige XML-Inhalte erlaubtBody

ƒ Struktur von Anwendung festgelegt, z.B. durch:

- speziellen Namensraum und/oder

<env:Envelope …>

<env:Body xmlns:ns="URI">

<ns:Nachrichtinhalt-Teil-1>…</ns:Nachrichteninhalt-Teil-1>

<ns:Nachrichteninhalt-Teil-n>…</ns:Nachrichteninhalt-Teil-n>

</env:Body>

</env:Envelope>

(18)

Briefkopf Briefkopf

ƒƒ Header: beliebige XML-Inhalte erlaubtHeader

ƒ Struktur von Anwendung festgelegt

ƒƒ HeaderHeader BlockBlock

- Kind-Element von Header

- Zusatzinformation zur eigentlichen Nachricht

<env:Envelope …>

<env:Header xmlns:ns="URI" >

<ns:Zusatzinformation-1>…</ns:Zusatzinformation-1>

<ns:Zusatzinformation-n>…</ns:Zusatzinformation-n>

</env:Header>

<env:Body>…</env:Body>

</env:Envelope>

Header Block

(19)

Beispiel Beispiel

<env:Envelope …>

<env:Header>

<alertcontrol xmlns="http://example.org/alertcontrol">

<priority>1</priority>

<expires>2007-06-24T14:00:00-05:00</expires>

</alertcontrol>

</env:Header>

<env:Body>

<alert-msg xmlns="http://example.org/alert">

Pick up Mary at 2pm!

</alert-msg>

</env:Body>

</env:Envelope>

Nachricht

Zusatz- information (Header Block)

(20)

mustUnderstand Attribut Attribut

<env:Header>

<alertcontrol xmlns="http://example.org/alertcontrol"

env:mustUnderstand="true">

</alertcontrol>

</env:Header>

ƒƒ mustUnderstand="truemustUnderstand="true": Empfänger muss Header Block "

verstehen oder mit Fehlermeldung antworten

ƒƒ mustUnderstand="falsemustUnderstand="false": Empfänger kann Header Block "

(ohne Fehlermeldung) ignorieren

ƒ kann für jeden Header Block unterschiedlich sein

ƒ Beachte: Standard-Wert ist "false"

(21)

Erweiterung von

Erweiterung von SOAP SOAP- -Nachrichten Nachrichten

ƒ Nachrichtenformat kann durch Header Blocks erweitert werden, ohne ursprüngliches Format (Body) zu

modifizieren.

ƒ Erweiterungen obligatorisch oder optional, auch unterschiedlich

ƒ einzelne Erweiterungen unabhängig voneinander Ö mächtiges Konzept für VersionierungVersionierung

(22)

Hypothetisches Beispiel Hypothetisches Beispiel

<env:Body>

<DoGoogleSearch>

</DoGoogleSearch>

</env:Body>

eigentliche Nachricht (Body) bleibt

unverändert

<env:Header>

<Public-Key>

rg8658hgkkg557j

</Public-Key>

</env:Header>

<env:Header>

<NotifyNewPage>

mymail@inf.fu-berlin.de

</NotifyNewPage>

</env:Header>

unabhängige Erweiterungen

(23)

Kodierung von

Kodierung von RPCs RPCs

(24)

Kodierung f

Kodierung f ü ü r r RPCs RPCs

ƒ SOAP auch Nachrichtenformat für entfernte Prozeduraufrufe (RPCs)

ƒ eigentlichen RPCs werden aber von Middleware realisiert

ƒ SOAP selbst unterstützt nur Einweg-Kommunikation

ƒ Anfrage-Antwort-Muster:

1. SOAP mit HTTP übertragen

Ö auf Ebene des Transportprotokolls

2. eindeutige Referenz im SAOP-Briefkopf

Ö auf Ebene von SOAP, dadurch unabhängig vom Transportprotokoll

(25)

Mechanismen Mechanismen

ƒ Anfrage (Request)

Æ Methodenaufruf

Æ Parameterübergabe

ƒ Antwort (Answer)

Æ fehlerfreie Bearbeitung Æ Ergebnisübergabe

ƒ Fehlerfall (Fault)

(26)

RPC- RPC -Aufruf Aufruf

ƒ Name der Prozedur: Kind-Element von Body

ƒ Eingangsparameter: Kind-Elemente der Prozedur

ƒ Beachte: Reihenfolge der Parameter relevant!

ƒ Beachte: grundsätzlich CallCall--by-by-Value!Value

<env:Envelope …>

<env:Body>

<m:Procedure xmlns:m="URI">

<m:Parameter-1>val-1</m:Parameter-1>

<m:Parameter-n>val-n</m:Parameter-n>

</m:Procedure>

</env:Body>

</env:Envelope>

Procedure(Parameter-1="val-1",…,Parameter-n ="val-n")

(27)

Aufruf

Aufruf- - Adresse Adresse

Wo soll die Prozedur aufgerufen werden (URI)?

ƒ entweder außerhalb von SOAP im Transportprotokoll (z.B. HTTP) spezifiziert

ƒ besser im SOAP-Briefkopf angeben:

<env:Header>

<wsa:EndpointReference

xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing>

<wsa:Address>httphttp://://api.google.comapi.google.com//searchsearch/beta2/beta2</wsa:Address>

<wsa:PortType>ns1:GoogleSearchPort</wsa:PortType>

</wsa:EndpointReference>

</env:Header>

(28)

RPC- RPC -Ergebnis Ergebnis

<env:Envelope …>

<env:Body>

<m:ProcedureResponse xmlns:m="URI"

xmlns:rpc="http://www.w3.org/2003/05/soap-rpc">

<rpc:result>m:Parameter-i</rpc:result>

<m:Parameter-i>…</m:Parameter-i>

<m:Parameter-j>…</m:Parameter-j>

</m:ProcedureResponse>

</env:Body>

</env:Envelope>

public Parameter-i Procedure(…,Parameter-j,…)

ƒ Wahl von ProcedureResponse beliebig

ƒ Kind-Elemente von ProcedureResponse: Rückgabewerte

ƒ In-Out-Parameter = erscheinen im Aufruf & Antwort

(29)

RPC- RPC -Ergebnis Ergebnis (2) (2)

<env:Envelope …>

<env:Body>

<m:ProcedureResponse xmlns:m="URI"

xmlns:rpc="http://www.w3.org/2003/05/soap-rpc">

<rpc:result>m:Parameter-i</rpc:result>

<m:Parameter-i>…</m:Parameter-i>

<m:Parameter-j>…</m:Parameter-j>

</m:ProcedureResponse>

</env:Body>

</env:Envelope>

ƒƒ rpc:result: ausgezeichnetes Ergebnis (optional)rpc:result

public Parameter-i Procedure(…,Parameter-j,…)

(30)

Kodierung von Fehlermeldungen Kodierung von Fehlermeldungen

<env:Envelope …>

<env:Body>

<env:Fault>

<env:Code>

<env:Value>env:Sender</env:Value>

</env:Code>

<env:Reason>

<env:Text xml:lang="en-US">Processing error</env:Text>

<env:Text xml:lang="de">Verarbeitungsfehler</env:Text>

</env:Reason>

</env:Fault>

</env:Body>

</env:Envelope> ƒ Code und Reason obligatorisch

ƒƒ Code: für maschinelle VerarbeitungCode

ƒƒ Reason: zusätzliche Information, Reason nicht für maschinelle Verarbeitung

(31)

Code Code

<env:Envelope …>

<env:Body>

<env:Fault>

<env:Code>

<env:Value>env:Sender</env:Value>

</env:Code>

<env:Reason>

<env:Text xml:lang="en-US">Processing error</env:Text>

<env:Text xml:lang="de">Verarbeitungsfehler</env:Text>

</env:Reason>

</env:Fault>

</env:Body>

</env:Envelope>

ƒ Value obligatorsich

(32)

Subcode Subcode

<env:Envelope … xmlns:rpc="http://www.w3.org/2003/05/soap-rpc">

<env:Body>

<env:Fault>

<env:Code>

<env:Value>env:Sender</env:Value>

<env:Subcode>

<env:Value>rpc:BadArguments</env:Value>

</env:Subcode>

</env:Code>

<env:Reason>…</env:Reason>

</env:Fault>

</env:Body>

</env:Envelope> ƒ Subcode optional

ƒ Subcode genauso strukturiert, wie Code: Value (obligatorisch) + Subcode (optional)

ƒƒ rpc:BadArguments: standardisierter Fehlercoderpc:BadArguments

(33)

Reason Reason

<env:Envelope …>

<env:Body>

<env:Fault>

<env:Code>

<env:Value>env:Sender</env:Value>

</env:Code>

<env:Reason>

<env:Text xml:lang="en-US">Processing error</env:Text>

<env:Text xml:lang="de">Verarbeitungsfehler</env:Text>

</env:Reason>

</env:Fault>

</env:Body>

</env:Envelope> ƒ mindestens ein Text-Element

(34)

Datentypen

Datentypen

(35)

Kodierung von Arrays und Matrizen Kodierung von Arrays und Matrizen

ƒ Beispiel: Als Parameter soll int[3] übergeben werden.

ƒ Wie soll dieses Array dargestellt werden?

<array>

<number xsi:type="xsd:int">108</number>

<number xsi:type="xsd:int">99</number>

<number xsi:type="xsd:int">205</number>

</array>

so?

oder so?

(36)

SOAP- SOAP - Arrays Arrays

<numbers xmlns:enc="http://www.w3.org/2003/05/soap-encoding"

enc:itemType="xsd:int" enc:arraySize="3">

<number>1</number>

<number>2</number>

<number>2</number>

</numbers>

ƒ entspricht int[3]

ƒ Element-Namen (hier numbers und number) beliebig,

entscheidend sind Attribute enc:itemType und enc:arraySize

ƒ Namensraum …/soap-encoding Teil der SOAP-Spezifikation

ƒ enc:arraySize="*": entspricht int[]

(37)

Mehrdimensionale

Mehrdimensionale SOAP SOAP - - Arrays Arrays

<numbers enc:itemType="xsd:int" enc:arraySize="3 2">

<number>1</number>

<number>2</number>

<number>3</number>

<number>4</number>

<number>5</number>

<number>6</number>

</numbers>

ƒ 3x2-Matrix mit Elementen vom Typ xsd:int.

ƒ enc:arraySize="* 2": n x 2-Matrix

a b

Î a1 b1 Î a2 b1

Î a3 b1 Î a1 b2

Î a2 b2 Î a3 b2

(38)

Beispiel

Beispiel enc:arraySize="* 2"

<numbers enc:itemType="xsd:int" enc:arraySize="* 2">

<number>1</number>

<number>2</number>

<number>3</number>

<number>4</number>

<number>5</number>

<number>6</number>

</numbers>

ƒ #Elemente = 6 = n x 2 Ö eindeutige Lösung: n = 3

ƒ für #Elemente = 6 = n x m gäbe es keine eindeutige Lösung

Ö enc:arraySize="* **" nicht erlaubt

a b

Î a1 b1 Î a2 b1

Î a3 b1 Î a1 b2

Î a2 b2 Î a3 b2

(39)

env:encodingStyle env:encodingStyle

ƒ die vorgestellte Kodierung für RPCs und Arrays muss nicht verwendet werden

ƒ wird sie verwendet, dann in SOAP-Nachricht folg.

Kodierungsschema angeben:

env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"

ƒ Beachte: für SOAP 1.1 hier andere URL!

ƒ Kodierungsschema auch anwendungsspezifisch:

env:encodingStyle="http://www.ibm.com/soap-encoding" (fiktiv)

(40)

Beispiel

Beispiel Google Google

<?xml version='1.0' encoding='UTF-8'?>

<env:Envelope

xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">

<env:Body>

<doGoogleSearch xmlns="urn:GoogleSearch"

env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<key xsi:type="xsd:string">3289754870548097</key>

<q xsi:type="xsd:string">Eine Anfrage</q>

<start xsi:type="xsd:int">0</start>

<maxResults xsi:type="xsd:int">10</maxResults>

</doGoogleSearch>

</env:Body>

</env:Envelope>

(41)

Verarbeitung von

Verarbeitung von

SOAP SOAP - - Nachrichten Nachrichten

(42)

Allgemeine Anforderungen Allgemeine Anforderungen

EmpfäEmpfänger muss verarbeiten:nger muss verarbeiten:

ƒ Body

ƒ Header Blocks mit mustUnderstand="true"

EmpfäEmpfänger darf ignorieren:nger darf ignorieren:

ƒ Header Blocks mit mustUnderstand="false"

ƒ Header Blocks ohne mustUnderstand-Attribut

Grund: "false" Standardwert von mustUnderstand

(43)

Schrittweise Verarbeitung Schrittweise Verarbeitung

Sender

Authentifizierung

Entschlüsselung Empfänger

SOAP

SOAP

SOAP

1.

2.

1. Authentifizierung:

Verifizierung einer digitalen Signatur in einem Header Block

2. Entschlüsselung des Body 3. Aufruf des eigentlichen Web

Services

SOAP unterstützt schrittweise

Verarbeitung von Nachrichten, z.B.:

(44)

Schrittweise Verarbeitung: Vorteile Schrittweise Verarbeitung: Vorteile

Aufgabenteilung:

Aufgabenteilung:

ƒ spezialisierte Server

ƒ z.B. Authentifizierungs-Server und Server, auf dem der eigentliche Dienst läuft

ƒ Authentifizierungs-Server kann vor der Firewall liegen, die anderen Server hinter der Firewall

(45)

SOAP- SOAP - Knoten Knoten

SOAPSOAP--Knoten: Rechner, die Teil Knoten einer SOAP-Nachricht

verarbeiten

Zwischenknoten

Zwischenknoten (intermediary)

Endknoten

Endknoten (ultimate receiver)

Sender

Authentifizierung

Entschlüsselung

Web-Dienst Empfänger

SOAP

SOAP

SOAP

1.

3.

2.

(46)

Identifizierung von

Identifizierung von SOAP SOAP - - Knoten Knoten

ƒ SOAP-Knoten werden mit URIs identifiziert

ƒ zwei Möglichkeiten:

1.1. anwendungspezifischeanwendungspezifische URIURI

ƒ z.B. www.example.org/Log

ƒ muss vom Empfänger interpretiert werden können 2.2. standardisierte URIstandardisierte URI

ƒƒ http://www.w3.org/2003/05/envelopehttp://www.w3.org/2003/05/envelope//rolerole//nextnext

= aktueller Empfänger (Zwischen- oder Endknoten)

ƒƒ http://www.w3.org/2003/05/envelopehttp://www.w3.org/2003/05/envelope//rolerole//ultimateReultimateRe ceiver

ceiver

= Endknoten

(47)

Festlegung der Zust

Festlegung der Zustä ä ndigkeiten ndigkeiten

<env:Header>

<FirstBlock env:role="www.example.org/Log">

...

</FirstBlock>

<SecondBlock

env:role="http://www.w3.org/2003/05/envelope/role/next">

...

</SecondBlock>

<ThirdBlock>

...

</ThirdBlock>

</env:Header>

ƒƒ role: zuständiger SOAP-Knoten (URI)role

Î Endknoten zuständig

Î aktueller Empfänger zuständig Î "Log"-Knoten zuständig

(48)

role role Attribut Attribut

ƒ Spezifiziert den Empfänger oder Zwischenstation, die die das Header verarbeiten darf

ƒƒ http://www.w3.org/2003/05/soaphttp://www.w3.org/2003/05/soap--envelope/role/envelope/role/nextnext

ÆÆ dieser Teil des Headers ist für die nächste Anwendung bestimmt, die die Nachricht verarbeiten wird.

ƒƒ http://www.w3.org/2003/05/soaphttp://www.w3.org/2003/05/soap--envelopeenvelope//rolerole//ultimateReceiverultimateReceiver

Æ dieser Teil des Headers ist nur für den letzten „Stop“ bestimmt

ƒƒ http://www.w3.org/2003/05/http://www.w3.org/2003/05/soap-soap-envelope/envelope/role/role/nonenone Æ schaltet den Header-Teil aus

(49)

Aufgabe eines Zwischenknotens Aufgabe eines Zwischenknotens

1. verarbeitet Header Blocks mit

ƒ role=„http://www.w3.org/2003/05/envelope/role/next"

ƒ role="URI", wobei "URI" den betreffenden Zwischenknoten bezeichnet

Alle anderen Header Blocks und Body werden nicht verarbeitet.

2. löscht alle verarbeiteten Header Blocks !! 3. fügt evtl. neue Header Blocks hinzu

4. entscheidet, welcher SOAP-Knoten nächster Knoten in Verarbeitungsskette sein soll

5. leitet modifizierte SOAP-Nachricht an diesen SOAP-Knoten

(50)

Tiefe der Verarbeitung Tiefe der Verarbeitung

ƒ Tiefe der Verarbeitung durch mustUnderstand-Attribut bestimmt:

mustUnderstand="true mustUnderstand="true""

ƒ Empfänger muss Header Block verstehen, ansonsten Fehlermeldung

ƒ Löschen von unbekannten Header Blocks nicht erlaubt

mustUnderstand="false mustUnderstand="false""

ƒ Empfänger kann Header Block ignorieren

ƒ Löschen von unbekannten Header Blocks erlaubt

(51)

Aufgabe des Endknoten Aufgabe des Endknoten

1. verarbeitet Header Blocks

ƒ mit role="http://www.w3.org/2003/05/envelope/role/

ultimateReceiver"

ƒ mit role="

http://www.w3.org/2003/05/envelope/role/next"

ƒ ohne role-Attribut

2. versteht und verarbeitet Body

(52)

Festlegung der Zust

Festlegung der Zustä ä ndigkeiten? ndigkeiten?

ƒ Vorteile der schrittweisen Verarbeitung klar:

Aufgabenverteilung auf spezialisierte Server

ƒ Warum aber Zuständigkeiten in SOAP-Nachricht festlegen?

ƒ Zuständigkeiten sollten doch für Sender transparent sein!

Sender Empfänger

SOAP-Nachricht ohne

Zuständigkeiten

erweiterte SOAP- Nachricht mit Zuständigkeiten 1. SOAP-Knoten

(53)

Ü Ü bertragung von bertragung von

SOAP SOAP - - Nachrichten Nachrichten

(54)

Protokoll

Protokoll -Bindung (Binding) - Bindung (Binding)

ƒ Wie werden SOAP-Nachrichten mit bestimmten Transportprotokoll übertragen?

ƒ Wie SOAP-Nachrichten serialisieren?

ƒ z.B. für HTTP GET nicht trivial

ƒ SOAP-Spezifikation schreibt nicht vor, wie Protokoll- Bindung spezifiziert wird

SOAP- Nachricht

konkrete Nachricht

XML Transport-

protokoll

(55)

Anforderungen an Protokoll

Anforderungen an Protokoll- - Bindung Bindung

ƒ konkrete Nachricht meist XML, kann aber auch beliebig anderes Format sein:

z.B. komprimiertes Binärformat

ƒ einzige Bedingung:

Serialisierung

Serialisierung ohne Informationsverlustohne Informationsverlust

ƒ Serialisierung s muss also symmetrisch sein:

s-1(s(N)) = N, für alle SOAP-Nachrichten N

(56)

Standardisierte Protokoll

Standardisierte Protokoll- - Bindungen Bindungen

ƒ HTTP-Binding bisher als einzige Protokoll-Bindung für SOAP standardisiert

ƒ zwei unterschiedliche HTTP-Bindungen:

- HTTP-POST - HTTP-GET

(57)

HTTP HTTP -GET vs. HTTP - GET vs. HTTP- -POST POST

HTTP GET HTTP GET

ƒ URL Î Antwort

ƒ Parameter können in URL kodiert werden, z.B.:

ƒ http://google.com/doGoogleSearch?q=Beginning+XML

= Aufruf doGoogleSearch(q="Beginning XML") HTTP POST

HTTP POST

ƒ URL + Datenanhang Î Antwort

(58)

SOAP

SOAP ü ü ber HTTP POST: Anfrage ber HTTP POST: Anfrage

POST /search/beta2/doGoogleSearch HTTP/1.1 Host: api.google.com

Content-Type: application/soap+xml; charset="utf-8"

Content-Length: nnnn

<?xml version='1.0' encoding='UTF-8'?>

<env:Envelope …>

<env:Body>

<doGoogleSearch xmlns="urn:GoogleSearch">

<key xsi:type="xsd:string">3289754870548097</key>

<q xsi:type="xsd:string">Eine Anfrage</q>

</doGoogleSearch>

</env:Body>

</env:Envelope>

Daten URL

HTTP Header

SOAP- Nachricht

(59)

SOAP

SOAP ü ü ber HTTP POST: Antwort ber HTTP POST: Antwort

HTTP/1.1 200 OK

Content-Type: application/soap+xml; charset="utf-8"

Content-Length: nnnn

<?xml version="1.0" encoding="UTF-8"?>

<env:Envelope …>

<env:Body>

<ns1:doGoogleSearchResponse xmlns:ns1="urn:GoogleSearch"

env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<return xsi:type="ns1:GoogleSearchResult">…</return>

</ns1:doGoogleSearchResponse>

HTTP Header

SOAP- Response

(60)

SOAP

SOAP ü ü ber HTTP GET ber HTTP GET

GET /search/beta2/doGoogleSearch?q=Beginning+XML HTTP/1.1 Host: api.google.com

Accept: application/soap+xml

ƒ ruft doGoogleSearch(q="Beginning XML") auf

ƒ gesamte SOAP-Nachricht als URL kodiert

ƒ Antwort wie bei HTTP POST

ƒ Amazon bietet HTTP-GET-Schnittstelle an, Google jedoch nicht

ƒ sehr beliebt weil leichtgewichtig

(61)

REpresentational RE presentational S S tate tate Transfer T ransfer

ƒ kein Protokoll sondern ein Architekturstil

ƒ Verwaltet beliebige Menge von Ressourcen

ƒƒ RESTfulRESTful Æ eine Anwendung konform zum REST- Architekturstil

• Amazon – der populärster Anbieter einer REST- Anwendung

ƒ Google bietet solche REST-Schnittstelle NICHT an

(62)

REST- REST - Grundsatz Grundsatz

ƒƒ REST-REST-ArchitekturArchitektur des WWW (Fielding 2000):

jede Web-Ressource soll eindeutig über eine URI identifiziert werden

ƒ Beispiel: online gebuchte Reise = Web-Ressource

ƒ gebuchte Reise sollte daher auch über eine URI eindeutig identifiziert werden

(63)

REST oder nicht?

REST oder nicht?

HTTP GET HTTP GET

ƒ würde z.B.

travel.com/Reservations/itinerary?reservationCode=FT35ZBQ anfragen

Ö URL identifiziert eindeutig gebuchte Reise HTTP POST

HTTP POST

ƒ würde z.B.

travel.com/Reservations/

anfragen mit SOAP-RPC als Datenhang:

Ö entspricht REST-Grundsatz

Ö widerspricht REST-Grundsatz

(64)

HTTP POST vs. HTTP GET HTTP POST vs. HTTP GET

ƒ SOAP-Spezifikation empfiehlt HTTP GET, wenn Parameter Web-Ressourcen identifizieren

Ö Übereinstimmung mit REST-Grundsatz

ƒ Problem: Wie komplexe Parameter als URI kodieren?

ƒ Beispiel: reservationCode könnte aus Bezeichner + Datum bestehen

ƒ so kodieren?

travel.com/Reservations/itinerary?reservationCode=FT35ZBQ+reservationCode=FT35ZBQ+

22/6/2005 22/6/2005

ƒ oder so?

travel.com/Reservations/itinerary?

reservationId=FT35ZBQ&reservationDate=22/6/2005 reservationId=FT35ZBQ&reservationDate=22/6/2005

(65)

WS WS - - Addressing Addressing

(66)

Ziele von

Ziele von WS WS- - Addressing Addressing

ƒ neutrale Formulierung von Service-Endpunkten

ƒ direkte Kodierung on Informationen in SOAP, die bisher in der Transportschicht angesiedelt waren

ƒ Übertragung von SOAP-Nachrichten durch multiple Zwischenknoten unabhängig vom Transportprotokoll

ƒ Unterstützung von asynchronen und Publish- Subscriber-Interaktionsmustern

(67)

Endpunkt

Endpunkt- - Referenz Referenz

Endpunkt

Endpunkt--Referenz (Referenz (endpointendpoint reference)reference)

ƒ XML Dokument

ƒ beinhaltet notwendige Informationen für die Verwendung eines Web Services-Endpunktes Referenz

Referenz--Eigenschaft (Eigenschaft (referencereference propertyproperty))

ƒ Erweitert die Identität des Endpunktes um zusätzliche Informationen

Referenz

Referenz--Parameter (Parameter (referencereference parameter)parameter)

(68)

Nachrichten

Nachrichten- -Informationselemente Informationselemente

Nachrichten

Nachrichten--Informationselemente (messageInformationselemente (message informationinformation header

header))

ƒƒ Nachrichten-Nachrichten-IDID (wsa:MessageID(wsa:MessageID)) zur Identifikation der Nachricht in Zeit und Raum

ƒƒ ZielZiel--Adresse (Adresse (wsa:Towsa:To)) des Empfängers als URI

ƒƒ QuelleQuelle--Endpunkt (Endpunkt (wsa:Fromwsa:From)) des Absenders = Default- Ziel für die Antwort

ƒƒ AntwortAntwort--Endpunkt (Endpunkt (wsa:ReplayTowsa:ReplayTo)) spezifiziert den gewünschten Empfänger

ƒƒ Fehler (Fehler (wsa:FaultTowsa:FaultTo)) für Behandlung von Fehlern zustandige Endpoint.

ƒ …

(69)

Vorteile Vorteile

+ etablierter Standard (u.a. in .Net verwendet) + unabhängig von Übertragungsprotokollen

+ sowohl für RPCs als auch für Messaging geeignet + RPCs über Firewalls hinweg möglich

+ einfach erweiterbar

+ Erweiterungen unabhängig voneinander + Plattformunabhängig

+ Programmiersprachenunabhängig

(70)

Vor Vor - - und Nachteile und Nachteile von SOAP

von SOAP

(71)

Nachteile Nachteile

- RPCs über Firewalls hinweg oft nicht erwünscht - zusätzlicher Verarbeitungsaufwand

- für viele notwendige Erweiterungen noch kein etablierter Standard

Beispiel: wsu:identifier vs. wsa:MessageID

- heutzutage noch nicht vollständig interoperabel Î http://www.ws-i.org

(72)

Wie geht es weiter?

Wie geht es weiter?

heutige Vorlesung heutige Vorlesung

; SOAP im Detail

ÜÜbung nbung nächste Wocheächste Woche

ƒ SOAP

nnäächste Wochechste Woche

ƒ WSDL im Detail

Referenzen

ÄHNLICHE DOKUMENTE

It is seen that in addition to typical amphiphilic properties, most importantly the formation of self assembled structures like micelles or lyotropic liquid crystals, the

– Ressource durch Browser nutzbar (anders als bei SOAP).  REST-konforme Schnittstelle durch Nutzung von

[…] Once a Web Service is deployed, other applications (and other Web Services) can discover and invoke the deployed service. Web Services is a technology and process for

Für den SOAP-Server muss eine Instanz der Klasse SoapServer erzeugt werden:. SoapServer( mixed $wsdl [, array $options

call.addParameter(&#34;bean&#34;, qname, ParameterMode.IN); //register (passed) parameter for bean call.setReturnType(qname); //specify expected return type of web

ƒ konkrete Nachricht meist XML, kann aber auch beliebig anderes Format

Sequenz von SOAP SOAP- -Nachrichten Nachrichten senden senden Erste SOAP Erste SOAP- -Nachricht Nachricht.

ƒ Beschreibt, wie abstrakte SOAP-Nachrichten in konkrete Nachrichten umgewandelt (serialisiert) werden. ƒ nicht vorgeschrieben, wie eine Protokoll-Bindung