Download as pdf or txt
Download as pdf or txt
You are on page 1of 34

Infrastruktura za

elektronsko poslovanje

SOAP
SOAP
 Simple Object Access Protocol - protokol pristupa
jednostavnog objekta
 način da se podacima lako pristupi preko mreže
 objekat može biti bilo šta iz jedne apliikacije, kao što je
Microsoft-ov Word, do baza podataka.
 koristi se za prosleđivanje instrukcija i podataka nazad i
zmeđu XML Web servisa i njegovih klijenata.
 dozvoljava komunikaciju dva objekta, bez obzira gde se
nalaze
SOAP
SOAP je protokol za razmenu struktuiranih informacija (poruka) u
distribuiranim, decentralizovanim okruženjima. On omogućava
komunikaciju između aplikacija koje rade pod različitim OS i koriste
različite tehnologije i programske jezike.

Internet
SOAP SOAP
čvor SOAP čvor
poruka

SOAP je XML zasnovan protokol. Razmenu informacija između


aplikacija omogućava korišćenjem HTTP protokola koji je podržan od
svih Internet browser-a i servera.
Danas mnogi Web servisi koriste SOAP protokol za razmenu poruka
(zahteva i odgovora). => SOAP je protokol za pristup Web servisima.
 XML je jezik koji SOAP govori.
 XML je dovoljno prilagodljiv pa može rukovati sa različitim
tipovima podataka.
 XML može poslati podatak preko interneta, pa zašto bi nam
bio potrban drugi protokol, kao što je SOAP.
 Posmatrajmo dve komplementarne tehnologije – HTTP i
HTML. Ako želimo da naš prijatelj vidi naše HTML stranice
jednostavno ćemo ih poslati preko e-mail-a ili na disk.
 Ali Internet ne radi pomoću ljudi koji razumeju diskove sa
HTML stranicama i mora da postoji način da računar može
da nam pošalje HTML stranicu kada otkucamo njeno ime u
pretraživaču (npr. Intrnet Explorer). To je posao HTTP-a.
 XML obezbeđuje način označavanja (“mark up”) običnog
teksta kako bi on bio razumljiviji. Jedna aplikacija može da
generiše onoliko podataka ili XML-ova koliko želimo, ali bez
osobe koja prenosi rezultate drugoj aplikaciji.
 SOAP nastupa i obezbeđuje metod za komunikaciju tih
aplikacija. On predstavlja sve komunikacije.
 Sa SOAP-om, jedna aplikacija može da vidi drugu preko
Interneta.
Objekat A XML podatak XML podatak Objekat B

Internet

XML se koristi za predstavljanje podatka i poruka, dok se


SOAP koristi za njihovo slanje/primanje
SOAP sintaksa
SOAP poruka je u suštini XML dokument
koji sadrži sledeće elemente:

 Envelope (koverta) element, koji identifikuje XML dokument kao


SOAP poruku. (obavezan element)

 Header element, koji sadrži zaglavlje sa informacijama. (opcioni


element)

 Body element, koji sadrži informacije o pozivu i odgovoru.


(obavezan element)

 Fault element, koji daje informacije o greškama koje nastaju


tokom procesiranja poruke. (opcioni element)
SOAP dokument
 SOAP dokument se
sastoji od obavezne
SOAP Envelope,
opcionalnog SOAP
zaglavlja i
obaveznog SOAP
tela.
SOAP poruka
Zaglavlje sadrži Omotač sadrži
instrukcije za isporuku ostatak SOAP
specifične za aplikaciju poruke, ali ne
i adresu
Envelope

Header

Body
Telo sadrži
aktuelnu poruku
SOAP dokument
 SOAP je protokol kojim su formalno definisane
standardizovane XML poruke za razmenu informacija u
raspodeljenim sistemima.
 Konceptualno, SOAP poruka zamišljena je kao pismo.
 Sastoji se od zaglavlja (engl. header) i tela (engl. body)
dokumenta, omotanih kovertom (engl. envelope)
 U stvarnosti, SOAP poruka je XML dokument čiji je koreni
element nazvan „Envelope“, a njegova dva podelementa
„Header“ i „Body“.
Arhitektura SOAP-a
SOAP protokol se sastoji od tri dela:
•koverta (envelope) koja definše framework za opisivanje šta
je u poruci i kako to procesuirati,
•skup šifriranih pravila koja odeđuju kako su podatak i
komande predstavljene kao XML, i
•način komunikacije SOAP-a sa njegovim objektima, posebno
preko modela zahteva i odgovora.Treći deo je obično u obliku
HTTP zaglavlja (skup instrukcija na na početku poruke).
Zajedno ove komponente čine SOAP poruku.
Glavni cilj dizajniranja SOAP-a je jednostavnost i proširivost.
SOAP poruka
Format SOAP poruke
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
...
</soap:Header>

<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>

</soap:Envelope>
Primer
SOAP poruka uključena u HTTP zahtev

POST /StockQuote HTTP/1.1


Host: www.stockquoteserver.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"

<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<SOAP-ENV:Body>
<m:GetLastTradePriceDetailed
xmlns:m="Some-URI">
<Symbol>DEF</Symbol>
<Company>DEF Corp</Company>
<Price>34.1</Price>
</m:GetLastTradePriceDetailed>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SOAP poruka uključena u HTTP odgovor

HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<SOAP-ENV:Header>
<t:Transaction
xmlns:t="some-URI"
xsi:type="xsd:int" mustUnderstand="1">
5
</t:Transaction>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<m:GetLastTradePriceResponse
xmlns:m="Some-URI">
<Price>34.5</Price>
</m:GetLastTradePriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
 SOAP Envelope sadrži enconding style atribut
koji definiše korištena pravila serijalizacije u
dotičnoj SOAP poruci. Taj se atribut može
pojaviti u bilo kom elementu i prenosi se na sve
podređene elemente koji ne sadrže vlastiti
atribut.
 SOAP Header je prvi podređeni element SOAP evenlope
elementa.
 Svaki element može sadržavati atribut mustUnderstand
kojim se primaocu naznačuje da je obvezno procesiranje
zaglavlja (vrednost atributa =1).
 SOAP poruka koja putuje do određene destinacije obično
na svom putu prolazi kroz skup posrednika. Za tu svrhu
postoji poseban atribut koji definiše kojim je sve
korisnicima namenjena poruka.
 SOAP Body element je podređeni element SOAP evenlope
elementa koji se koristi za prenos parametara metoda i
poruka o greški.
Poziv udaljene procedure korišćenjem
SOAP i HTTP protokola
Korišćenje SOAP-a u klasičnom
web servisu
Razmena SOAP poruka
 Postoje dva načina razmene SOAP poruka:
 Razmena dokumenata: SOAP telo poruke sadrži
jedan ili više podelemenata koji mogu da poštuju bilo
koji format (specifičan za aplikaciju). Npr. SOAP telo
može sadržavati XML formatiranu narudžbenicu.
 Poziv udaljene procedure; SOAP poruka identifikuje
ime operacije podržane u prijemnom čvoru i
uključuje parametre potrebne za njeno izvršenje (na
pr. zahtev za najnoviju cenu akcije).
Primer SOAP poruke
primer zahteva za SOAP poruku

POST /EventManager HTTP/1.1


Host: www.techmetrix.com
Content-Type: text/xml;
charset=“utf-8″
Content-Length: 60 SOAPAction=“http://www.techmetrix.com/Event
#New Customer“
<SOAP-ENV:Envelope xmlns:SOAP-ENV=“ http://schemas.xml.org/soap/envelope/“
SOAP-ENV :encodingStyle=“http://schemas.xml.org/soap/encoding/“/> <SOAP-
ENV:Header>
<t:Name
xmlns:t=“www.techmetrix.com/EventManager“
SOAP-ENV :actor=“http://schemas.xml.org/soap/actor /next/“ SOAP-ENV
:mustUnderstand=“1″> Dumser
</t:Name >
</SOAP-ENV:Header>
<SOAP:Body> <m:NewCustomer xmlns:m=“www.techmetrix.com/Event“>
SOAP zahtev

Ovo je poruka zahteva kojom se od udaljene aplikacije zahteva


informacija o ceni artikla na stanju za artikal čokolada.

<?xml version=“1.0″?>
<soap:Envelope xmlns:soap=“http://www.w3.org/2001/12/soap-
envelope„
soap:encodingStyle=“http://www.w3.org/2001/12/soap-encoding„>
<soap:Body xmlns:m=“cene“>
<m:VratiCenu>
<m:NazivArtikla>Čokolada</m:NazivArtikla >
</m:VratiCenu>
</soap:Body>
</soap:Envelope>
 Ovo je poruka odgovora kojom udaljena aplikacija vraća traženu cenu
artikla čokolada.

 <?xml version=“1.0″?>
 <soap:Envelope xmlns:soap=http://www.w3.org/2001/12/soap-
envelope soap:encodingStyle=“http://www.w3.org/2001/12/soap-
encoding„>
 <soap:Body xmlns:m=“cene“>
 <m:VratiCenuOdgovor>
 <m:Cena>121.78</m:Cena>
 </m:VratiCenuOdgovor >
 </soap:Body>
 </soap:Envelope>
SOAP povezivanje
 SOAP povezivanje se odnosi na protokol koji se koristi
za prenos SOAP poruka između SOAP čvorova. SOAP
metodologija dopušta da se između svakog para
čvorova na putanji može koristiti drugi protokol.

SOAP SOAP SOAP


čvor čvor čvor

 SOAP poruke ne sadrže informacije o povezivanju.


 Za SOAP razmenu poruka, uobičajeno je da se koristi HTTP
protokol.
HTTP protokol
HTTP (Hypertext Transport Protocol) radi tako što se klijent konektuje na HTTP
server korišćenjem TCP. Nakon uspostavljanja konekcije, klijent šalje serveru
HTTP poruku sa određenim zahtevom. Server procesira zahtev i šalje HTTP
odogovor klijentu. Odgovor sadrži statusni kod koji ukazuje na status zahteva.

Primer:
HTTP zahtev HTTP odgovor (uspešno obrađen zahtev, kod 200)

POST /item HTTP/1.1 200 OK


Host: 189.123.345.239 Content-Type: text/plain
Content-Type: text/plain Content-Length: 200
Content-Length: 200
HTTP odgovor (zahtev nije obrađen)

400 Bad Request


Content-Length: 0
SOAP preko HTTP-a
SOAP metod radi na principu HTTP zahteva i odgovora koji su u skladu
sa SOAP pravilima kodiranja.

HTTP poruka zahteva je podeljena u dve sekcije:

 zaglavlje poruke – sadrži informacije o adresi primaoca SOAP


poruke
 telo poruke – sadrži samu SOAP poruku
SOAP zahtev može biti HTTP POST ili HTTP GET zahtev. HTTP POST
zahtev sadrži najmanje dva elementa:
 Content-Type – definiše tip poruke i način kodovanja karaktera u
XML telu poruke (bilo zahteva ili odgovora)
 Content-Length – specificira broj bajtova u telu zahteva ili
odgovora
HTTP zaglavlje sadrži atribut SOAPAction koji identifikuje zahtev na
Web serveru kao SOAP zahtev.
SOAP preko HTTP-a Serveru se šalje zahtev
POST /InStock HTTP/1.1 GetStockPrice. Zahtev ima
Host: www.example.org parametar StockName. Parametar
Content-Type: application/soap+xml; charset=utf-8
SOAPAction: “” koji se vraća u odgovoru je Price.
Content-Length: nnn Prostor imena za ovu funkciju je
SOAP zahtev

<?xml version="1.0"?> definisan na


<soap:Envelope http://www.example.org/stock
xmlns:soap=“http://www.w3.org/2001/12/soap-envelope”
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> adresi.
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope> HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>
SOAP odgovor

<soap:Envelopexmlns:soap=“http://www.w3.org/2001/12/soap-envelope”
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPriceResponse>
<m:Price>34.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>
sabiranje.asmx
<%@ WebService Language="VB" Class="sabiranje" %>

Imports System
Imports System.Web
Imports System.Web.Services
Imports System.Xml.Serialization

<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
Public Class sabiranje
Inherits System.Web.Services.WebService

<WebMethod()> _
Public Function ZBIR (ByVal x As Integer, ByVal y As Integer) As Integer
Return x + y

End Function

End Class
SOAP poruka od servisa sabiranje
POST /Projects/sabiranje.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/ZBIR"

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


<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ZBIR xmlns="http://tempuri.org/">
<x>int</x>
<y>int</y>
</ZBIR>
</soap:Body>
</soap:Envelope>
<?xml version="1.0" encoding="utf-8" ?>
- <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://tempuri.org/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
- <wsdl:types>
- <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
- <s:element name="ZBIR">
- <s:complexType>
- <s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="x" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="y" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
- <s:element name="ZBIRResponse">- <s:complexType>
- <s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="ZBIRResult" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
- <wsdl:message name="ZBIRSoapIn">
<wsdl:part name="parameters" element="tns:ZBIR" />
</wsdl:message>
- <wsdl:message name="ZBIRSoapOut">
<wsdl:part name="parameters" element="tns:ZBIRResponse" />
</wsdl:message>
- <wsdl:portType name="sabiranjeSoap">
- <wsdl:operation name="ZBIR">
<wsdl:input message="tns:ZBIRSoapIn" />
<wsdl:output message="tns:ZBIRSoapOut" />
</wsdl:operation>
</wsdl:portType>
- <wsdl:binding name="sabiranjeSoap" type="tns:sabiranjeSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="ZBIR">
<soap:operation soapAction="http://tempuri.org/ZBIR" style="document" />
- <wsdl:input>
<soap:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
- <wsdl:binding name="sabiranjeSoap12" type="tns:sabiranjeSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="ZBIR">
<soap12:operation soapAction="http://tempuri.org/ZBIR" style="document" />
- <wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
- <wsdl:service name="sabiranje">
- <wsdl:port name="sabiranjeSoap" binding="tns:sabiranjeSoap">
<soap:address location="http://localhost:1575/Projects/sabiranje.asmx" />
</wsdl:port>
- <wsdl:port name="sabiranjeSoap12" binding="tns:sabiranjeSoap12">
<soap12:address location="http://localhost:1575/Projects/sabiranje.asmx" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

You might also like