3. SOAP über HTTPHTML über HTTPBevor erläutert wird, wie SOAP über HTTP übertragenwird, soll kurz auf die Übertragung normaler Webseiten imHTML-Format eingegangen werden. Wenn ein Webbrowser eine Webseite anfordert, könnte derHTML-Request zum Beispiel folgendermaßen aussehen (bei"GET" würden eventuelle Parameter an die URL angehängt, bei "POST" würden sie im HTTP-Header
übertragen):
GET /path/hello.html HTTP/1.1
Host: www.torsten-horn.de
Content-Type: text/html; charset=utf-8
Content-Length: 0
|
Der Webserver könnte als Antwort zum Beispiel Folgendes
schicken (hier im Beispiel drei Zeilen HTTP-Header, eine
Leerzeile (CRLF) und anschließend der HTML-Code):
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 25
<html>Hello World!</html>
|
SOAP über HTTP
Ein per HTTP übertragenes SOAP-Paket hat folgende
Struktur
(die grünen Rahmen sind nicht Bestandteil, sondern
verdeutlichen lediglich die Struktur):
+--------------------------------------------------HTTP-Header--+
| POST /realtimequotes/ncrouter HTTP/1.1 |
| Host: mysoapserver |
| Content-Type: text/xml; charset=utf-8 |
| ... |
+---------------------------------------------------------------+
<?xml version="1.0" encoding="UTF-8"?>
+------------------------------------------------SOAP-Envelope--+
| <SOAP-ENV:Envelope |
| xmlns:SOAP-ENV="https://..." |
| ... |
| +-----------------------------------SOAP-Header (optional)--+ |
| | <SOAP-ENV:Header> | |
| | <t:transaction | |
| | xmlns:t="..." ... | |
| | </SOAP-ENV:Header> | |
| +-----------------------------------------------------------+ |
| +------------------------------------------------SOAP-Body--+ |
| | <SOAP-ENV:Body> | |
| | <m:getLastTradePrice xmlns:m="trading-uri"> | |
| | <ticker>SUNW</ticker> | |
| | </m:getLastTradePrice> | |
| | </SOAP-ENV:Body> | |
| +-----------------------------------------------------------+ |
| </SOAP-ENV:Envelope> |
+---------------------------------------------------------------+
|
Im beim HTTP-Protokoll üblichen HTTP-Header würde bei
HTML-Dateien als Content-Type "text/html"
definiert. Für SOAP muss "text/xml" definiert
sein, da XML-Dateien übertragen werden. Der HTTP-Header
endet mit einer leeren Zeile (CRLF).
Anschließend folgt der XML-Teil, beginnend mit
"<?xml ...".
Der XML-Teil besteht hauptsächlich aus dem so genannten
"Envelope"-XML-Element. Dieses wiederum enthält
die beiden XML-Elemente "Header" und
"Body", wobei das "Header"-Element auch
entfallen kann.
Das "Body"-Element muss enthalten sein. Hierin
wird der eigentliche Inhalt plaziert, also die Daten, eine
Meldung, eventuell eine Fehlermeldung oder ein
RPC-Funktionsaufruf.
|