Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
SOAP Transport
Web servisų komunikacijos
Web servisas
WSDL interfeisas
SOAP pranešimai
Duomenų siuntimo protokolas (HTTP, SMTP,...)
TCP/IP
Web servisas
WSDL interfeisas
Tran
spor
tas
HTTP
HTTP
Dokumentų apsikeitimo protokolas
[METODAS] [UŽKL-URI] HTTP/[VER][Laukas1]: [reikšmė1][Laukas2]: [reikšmė2]
[užklausos duomenys, jei yra]
HTTP/[VER] [CODAS] [TEKSTAS][LaukasA]: [ReikšmėA][LaukasB]: [ReikšmėB]
...Dokumento turinys...Tuščiaeilutė
HTTP užklausa (klientas→serveris) HTTP atsakymas (serveris→klientas)
HTTP Metodai● Nusako kliento siunčiamo pranešimo pobūdį
● Atitinka resursų gavimo ir „keitimo“ operacijas● Metodai:
– GET: gauti URL nurodomą resursą– HEAD: gauti informaciją apie URL nurodomą resursą– POST: siųsti duomenis (URL nurodo duomenų
„apdorotoją“)– PUT: siųsti duomenis (URL nurodo resursą, kurio
duomenys siunčiami)– DELETE: pašalinti resursą (identifikuojamą URL)– Kiti: OPTIONS, TRACE, CONNECT
MIME● SMTP (1980): ASCII teksto žinutės● Multipurpose Internet Mail Extensions (MIME)
● Internet standartas platesniam e-mail panaudojimui● Žinutės su ne-ASCII koduotės turiniu● Pridedamus ne „teksto“ dokumentus● Žinutes iš daugelio dalių● Antraštės su ne ASCII koduotės tekstu
● IETF standartas (1991-1996)
MIME tipai● Nurodo žinutės dalies (pridedamo dokumento)
tipą● Leidžia parinkti atitinkama apdorojančią programą
image/jpeg - .jpg, .jpeg, .jpetext/html - .html, .htmtext/plain - .txt, .c, .htext/css - .cssvideo/x-msvideo .aviapplication/x-javascript .jsapplication/vnd.ms-powerpoint .ppt, .pps, .potapplication/pdf .pdf
application/octet-stream .exe, .bin, .class, *
Nežinomo tipo baitų srautas
HTTP užklausa ir atsakymas
HTTP/1.1 200 OKDate: Tue, 16 Mar 2010 08:35:54 GMTServer: Microsoft-IIS/6.0Content-Length: 18955Content-Type: text/htmlExpires: Tue, 16 Mar 2010 08:34:54 GMT
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...><html lang="en-US" xml:lang="en-US" xmlns="http://www.w3.org/1999/xhtml"><head><title>W3C Tutorial</title>....
GET http://www.w3schools.com/w3c/home.html HTTP/1.1Host: www.w3schools.comUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.8)...Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: lt,en-us;q=0.7,en;q=0.3Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Cookie: __utma=119627022.2995073920389789700.1251401017....
Užklausa (naršyklė)
Atsakymas (serveris)
URL
scheme://username:password@domain:port/path/to/resource?query_string#anchor
„Protokolas“:http, ftp, mailto,file,...
Vartotojo vardasIr slaptažodis(jei resursasapsaugotas)
Domenas (adresas):www.gaspadine.lt,...
Porto numeris(prisijungimoprie serverio)
Resurso keliasserveryje
Užklausos parametrai(jei tokia vykdoma)
Pozicijagautameatsakyme
http://www.gaspadine.lt/patiekalas/tarkuotu_bulviu_cepelinai.html
Serverio atsakymų kodai
● 2xx (200): užklausa apdorota sėkmingai● 3xx (302): peradresavimas, (ne)pasikeitęs
resursas,...● 4xx (404): kliento užklausos klaida (klaidingas URL,
neleidžiamas pasiekimas, resursas nerastas,...)● 5xx (500): serverio klaida (klaida apdorojant
užklausa, neveikiantis servisas,...)
HTTP/1.1 200 OKDate: Tue, 16 Mar 2010 08:35:54 GMT...
HTTP/1.1 200 OKDate: Tue, 16 Mar 2010 08:35:54 GMT...
HTTP/1.1 404 Not FoundDate: Tue, 16 Mar 2010 10:00:30 GMT...
HTTP/1.1 404 Not FoundDate: Tue, 16 Mar 2010 10:00:30 GMT...
Email (SMTP)Received: from aira2.vu.lt (AirA2.vu.lt [193.219.80.6])
by voruta.vu.lt (VU/2006/08/16) with ESMTP id o2GABG8c013724for <[email protected]>; Tue, 16 Mar 2010 12:11:16 +0200 (EET)
Received: by fxm7 with SMTP id 7so1133114fxm.23 for <[email protected]>; Tue, 16 Mar 2010 03:11:14 -0700 (PDT)Received: by 10.223.63.203 with SMTP id c11mr2235964fai.94.1268734274631; Tue, 16 Mar 2010 03:11:14 -0700 (PDT)Received: from [79.133.242.216] (cable-242-216.cgates.lt [79.133.242.216]) by mx.google.com with ESMTPS id 15sm3754437fxm.0.2010.03.16.03.11.11 (version=TLSv1/SSLv3 cipher=RC4-MD5); Tue, 16 Mar 2010 03:11:12 -0700 (PDT)Message-ID: <[email protected]>Date: Tue, 16 Mar 2010 12:11:04 +0200From: John Doe <[email protected]>User-Agent: Mozilla/5.0 ... Gecko/20100227 Thunderbird/3.0.3MIME-Version: 1.0To: [email protected]: =?UTF-8?B?SsWrc8WzIMW+aW5pYWk=?=Content-Type: text/plain; charset=UTF-8; format=flowedContent-Transfer-Encoding: 7bit
Gerb.,
Informuojame, jog paskaitos sestadieni bus.Administracija
Antraštė
Prane-šimas
Tuščiaeiutė
MIME žinutėReceived: from localhost (webmail.vu.lt [193.219.80.4] by voruta.vu.lt ......From: [email protected]: [email protected]: Requested documentsMIME-Version: 1.0Content-Type: multipart/mixed; boundary="=_55b7ziaifd44"Content-Transfer-Encoding: 7bit
This message is in MIME format.
--=_55b7ziaifd44Content-Type: text/plain; charset=utf-8; DelSp="Yes";
format="flowed"Content-Disposition: inlineContent-Transfer-Encoding: quoted-printable
Hello,Here is your documentV.P.--=_55b7ziaifd44Content-Type: application/x-zip-compressed; name="Document1.zip"Content-Disposition: attachment; filename="Document1.zip"Content-Transfer-Encoding: base64
UEsDBBQAAAAIAHxyZTz9VQhBowgAAEEdAAAJAAAAaW5kZXgucGhw7RlbT9tI9zn+FdMoqh2axtQsS5sbCpdStLDQJhXql0XRYE8SL47HjMeEqOK/75mLbyGwgPrwPWwq6vGZc7/5jN3ZjWaRYW8YaKPi....
--=_55b7ziaifd44--
MIME„multipart“pranešimas
Pranešimodalys susavoantraštėmis
SOAP over HTTP
SOAP HTTP POST naudojimas
Siųsti HTTP POSTsu SOAP pranešimu
Gautiužklausą
Dekoduotiužklausospranešimą Iškviesti operaciją
Atlikti veiksmusGrąžinti rezultatąUžkoduoti
atsakymopranešimą
Siųstiatsakymą
Gauti HTTP atsakymąsu SOAP pranešimu
KlientasServeris
Serviso„klausytojas“
Serviso„proxy“
Taikomojiprograma
HTTP: (POST) užklausa
POST /WebService/PasswordGeneratorService.asmx HTTP/1.1Content-Type: application/soap+xml; charset="utf-8"SOAPAction: "http://www.mellbourn.com/WebServices/set_Length"User-Agent: Axis2Host: www.mellbourn.comContent-Length: 274
<?xml version='1.0' encoding='UTF-8'?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Body> <set_Length xmlns="http://www.mellbourn.com/WebServices/"> <value>20</value> </set_Length> </env:Body></env:Envelope>
Serviso „programos“nuoroda serveryje(endpoint)
HTTP protokoloversija
HTTP užklausosturinio koduotė
Užklausos „paskirtis“
Užklausos turiniodydis baitais
Tuščiaeilutė
SOAP pranešimas
HTTP: atsakymas
HTTP/1.1 200 OKDate: Wed, 03 Mar 2010 21:47:56 GMTServer: Microsoft-IIS/6.0MicrosoftOfficeWebServer: 5.0_PubX-Powered-By: ASP.NETX-AspNet-Version: 1.1.4322Set-Cookie: ASP.NET_SessionId=lv4hvv2rgjj3wwvxshllwe55; path=/Cache-Control: private, max-age=0Content-Type: application/soap+xml; charset=utf-8Content-Length: 235
<?xml version="1.0" encoding="utf-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Body> <set_LengthResponse xmlns="http://www.mellbourn.com/WebServices/" /> </env:Body></env:Envelope>
Atsakymo kodas 2xx (OK)arba ne 2xx (klaida)
Kiti atsakymo antraštės parametrai
Sesijos ID(čia valdoma serverio)
HTTP atsakymoturinio koduotė
SOAP pranešimo ilgis baitais
Tuščiaeilutė
Web serviso atsakymas
HTTP: klaida
HTTP/1.1 500 Internal Server Error.Date: Wed, 03 Mar 2010 22:19:26 GMTServer: Microsoft-IIS/6.0MicrosoftOfficeWebServer: 5.0_PubX-Powered-By: ASP.NETX-AspNet-Version: 1.1.4322Cache-Control: privateContent-Type: application/soap+xml; charset=utf-8Content-Length: 1894
<?xml version="1.0" encoding="utf-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Body> <env:Fault> <env:Code>env:Sender</env:Code> ... </env:Fault> </env:Body></env:Envelope>
HTTP klaidos kodas (serverio programos klaida)
SOAP klaidos aprašas
SOAP HTTP Binding● Pranešimų MIME tipai● Leistini HTTP metodai● HTTP antraščių laukai● HTTP klaidų kodų naudojimas
SOAP HTTP: résumé
Blokai: tranzakcijos, ID,...
Parametrai, rezultatai,klaida,...
SOAP Body
SOAP Header
SOAP Envelope
HTTP POST
SOAP over SMTP/JMS/...
SMTP: „request“From: [email protected]: [email protected]: Travel to LADate: Thu, 29 Nov 2001 13:20:00 ESTMessage-Id: <[email protected]>
<?xml version='1.0' ?><env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope"> <env:Body> <p:itinerary xmlns:p="http://travelcompany.example.org/reservation/travel"> <p:departure> <p:departing>New York</p:departing> <p:arriving>Los Angeles</p:arriving> <p:departureDate>2001-12-14</p:departureDate> <p:departureTime>late afternoon</p:departureTime> <p:seatPreference>aisle</p:seatPreference> </p:departure> <p:return> <p:departing>Los Angeles</p:departing> <p:arriving>New York</p:arriving> <p:departureDate>2001-12-20</p:departureDate> <p:departureTime>mid morning</p:departureTime> <p:seatPreference/> </p:return> </p:itinerary> <q:lodging xmlns:q="http://travelcompany.example.org/reservation/hotels"> <q:preference>none</q:preference> </q:lodging> </env:Body></env:Envelope>
SMTP: „response“From: [email protected]: [email protected]: Which NY airport?Date: Thu, 29 Nov 2001 13:35:11 ESTMessage-Id: <[email protected]>In-reply-to:<[email protected]>
<?xml version='1.0' ?><env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope"> <env:Header> <m:reservation xmlns:m="http://travelcompany.example.org/reservation" env:actor="http://www.w3.org/2001/12/soap-envelope/actor/next" env:mustUnderstand="true"> <m:reference>uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d</reference> <m:dateAndTime>2001-11-29T13:35:00.000-05:00</m:dateAndTime> </m:reservation> <n:passenger xmlns:n="http://mycompany.example.com/employees" env:actor="http://www.w3.org/2001/12/soap-envelope/actor/next" env:mustUnderstand="true"> <n:name>John Q. Public</n:name> </n:passenger> </env:Header> <env:Body> <p:itinerary xmlns:p="http://travelcompany.example.org/reservation/travel"> <p:airportChoices> ...... </p:airportChoices> </p:itinerary> </env:Body></env:Envelope>
JMS
import java.naming.Context;import javax.jms.*;...
class ... { public void someMethod(Context ctx, MessageProducer producer, Message jmsMessage, String replyToName, int priority, long timeToLive, String targetService) { Destination replyDestination = ctx.lookup(replyToName); jmsMessage.setJMSReplyTo(replyDestination); jmsMessage.setStringProperty("SOAPJMS_targetService", targetService); jmsMessage.setStringProperty("SOAPJMS_bindingVersion", "1.0");
producer.setDeliveryMode( DeliveryMode.PERSISTENT ); producer.setPriority(priority); producer.setTimeToLive(timeToLive); producer.send(jmsMessage); } }
● SOAP over JMS 1.0 (W3C recomandation, 2012)● Standartizuotas JMS panaudojimas: JMS API,
WSDL, URI
SOAP ir binariniai duomenys
base64Binary / hexBinary
● XML Schema „binarinių“ duomenų tipai● (-) Efektyvumas: duomenų kiekis + skaičiavimai
(kodavimas/dekodavimas)
... <xs:element name="author" type="xs:string"/> <xs:element name="photo" type="xs:base64Binary"/>...
<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="..."> <env:Body> <d:duomenys xmlns:d="http://pavyzdziai.lt/Binarinis"...><d:autorius>Joe</d:autorius><d:photo>/9j/4AAQSkZJRgABAQEASABIAAD/4QBuRXhp...</d:photo> </d:duomenys> </env:Body></env:Envelope>
URL
● URL nuoroda į duomenų failą● Duomenys nėra pranešimo dalis● Nuoroda interpretuojama vartotojo programos
... <xs:element name="author" type="xs:string"/> <xs:element name="photo" type="xs:anyURI"/>...
<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="..."> <env:Body> <d:duomenys xmlns:d="http://pavyzdziai.lt/Binarinis"...> <d:autorius>Joe</d:autorius> <d:photo>http://photos.com/photoData?id=34761GH00</d:photo> </d:duomenys> </env:Body></env:Envelope>
HTTP „multipart“● Skirtingų tipų dalys sudedamos į vieną
pranešimą● Pranešimo turinys turi kelias dalis: „body part“
● Apibrėžimas● Nurodomas „Content-Type“: „multipart/xxx“
multipart/form-datamultipart/mixedmultipart/alternative
● Nurodomas dalių „skirtukas“: „boundary● Kiekviena dalis turi savo antraštę
Pavyzdys: Multipart POSTPOST /cgi-bin/qtest HTTP/1.1Host: aramUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-us,en;q=0.5Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Content-Type: multipart/form-data; boundary=---------------------------287032381131322Content-Length: 582
-----------------------------287032381131322Content-Disposition: form-data; name="datafile1"; filename="r.gif"Content-Type: image/gif
GIF87a.............,...........D..;-----------------------------287032381131322Content-Disposition: form-data; name="datafile2"; filename="g.gif"Content-Type: image/gif
GIF87a.............,...........D..;-----------------------------287032381131322Content-Disposition: form-data; name="datafile3"; filename="b.pdf"Content-Type: application/pdf
%PDF-1.4.............,...........;-----------------------------287032381131322--
„Soap with Attachments“● SOAP pranešimas siunčiamas kaip sudėtinis
„multipart“ pranešimas● Pagrindinio SOAP pranešimo dalis● Antrinės dalys – pridedami duomenys
SOAP Message
Image.png
URI
Compound SOAP structure
Movie.mpg
SOAPMessage
SecondaryPartBag
SwA: antrinės dalys● Dalys identifikuojamos naudojant MIME
atributus Content-Location arba Contend-ID● Kiekviena dalis koduojama atskirai● Turinys gali būti binarinis● Dalys nėra SOAP pranešimo dalis
● Iš SOAP dokumento nurodomos href atributo pagalba (anyURI tipo)
SwA pvz.: naudojant „location“MIME-Version: 1.0Content-Type: Multipart/Related; boundary=MIME_boundary; type=text/xml; start="<http://claiming-it.com/claim061400a.xml>"Content-Description: This is the optional message description.
--MIME_boundaryContent-Type: text/xml; charset=UTF-8Content-Transfer-Encoding: 8bitContent-ID: <http://claiming-it.com/claim061400a.xml>Content-Location: http://claiming-it.com/claim061400a.xml
<?xml version='1.0' ?><env:Envelopexmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Body> .. <photo href="http://example.com/claim061400a.tiff"/> .. </env:Body></env:Envelope>
--MIME_boundaryContent-Type: image/tiffContent-Transfer-Encoding: binaryContent-ID: <http://example.com/claim061400a.tiff>Content-Location: http://example.com/claim061400a.tiff
...binary TIFF image...--MIME_boundary--
SwA pvz.: naudojant „ID“ + HTTPPOST /insuranceClaims HTTP/1.1Host: www.risky-stuff.comContent-Type: Multipart/Related; boundary=MIME_boundary; type=text/xml; start="<[email protected]/s445>"Content-Length: XXXXSOAPAction: http://schemas.risky-stuff.com/Auto-ClaimContent-Description: This is the optional message description.
--MIME_boundaryContent-Type: text/xml; charset=UTF-8Content-Transfer-Encoding: 8bitContent-ID: <[email protected]/s445>Content-Location: claim061400a.xml
<?xml version='1.0' ?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Body> .. <theSignedForm href="cid:[email protected]/s445"/> .. </env:Body></env:Envelope>
--MIME_boundaryContent-Type: image/tiffContent-Transfer-Encoding: binaryContent-ID: <[email protected]/s445>
...binary TIFF image...--MIME_boundary-
HTTPbinding
MTOM● SOAP Message Transmission Optimization
Mechanism● Remiasi XOP: XML-binary Optimized Packaging● Optimizuotas didelių apimčių binariniam turiniui
– Turi būti taikomas xs:base64Binary tipo turiniui● Naudoja specialų Include elementą (operatorių)
– Duomenys interpretuojami kaip XML dokumento dalis
● W3C Recommendation, 2005
MTOM pvz.Content-Type: multipart/related; boundary=MIMEBoundary4A7AE55984E7438034; type="application/xop+xml"; start="<[email protected]>"; start-info="text/xml; charset=utf-8"
--MIMEBoundary4A7AE55984E7438034Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml; action=\"ProcessData\""Content-Transfer-Encoding: 8bitContent-ID: <[email protected]>
<env:Envelope xmlns:env='http://www.w3.org/2003/05/soap-envelope' xmlns:xmlmime='http://www.w3.org/2004/11/xmlmime'> <env:Body> <m:data xmlns:m='http://example.org/stuff'> <m:photo xmlmime:contentType='image/png'> <xop:Include xmlns:xop='http://www.w3.org/2004/08/xop/include' href='cid:http://example.org/me.png'/> </m:photo> </m:data> </env:Body></env:Envelope>
--MIMEBoundary4A7AE55984E7438034Content-Type: image/pngContent-Transfer-Encoding: binaryContent-ID: <http://example.org/me.png>
...binary octets for png...
--MIMEBoundary4A7AE55984E7438034--