Web servisi

Web servisi
ivan.ferdelja@fer.hr
FER, 2006.
SADRŽAJ:
1. Osnovno o Web servisima.................................................................................................. 4
1.1 Što je to Web servis?................................................................................................ 4
1.2 Arhitektura i tehnologije Web servisa .................................................................... 9
1.2.1 Pogled na cjelinu................................................................................................ 9
1.2.2 XML malo detaljnije ......................................................................................... 16
1.2.3 SOAP malo detaljnije....................................................................................... 19
1.2.4 WSDL malo detaljnije...................................................................................... 20
1.3 Zašto je XML tako važan? ...................................................................................... 21
1.4 Motivi i potencijali. .................................................................................................. 23
1.5 Pitanje sigurnosti..................................................................................................... 25
1.6 Organizacije i standardi.......................................................................................... 26
1.7 Korak dalje ............................................................................................................... 29
2. Razvoj Web servisa u .NET okruženju ........................................................................... 32
2.1 Što je .NET ? ............................................................................................................ 32
2.2 Softverski preduvjeti ............................................................................................... 36
2.3 Visual Studio .NET - izgradnja i korištenje Web servisa ................................... 37
2.3.1 Izgradnja Web servisa .................................................................................... 37
2.3.2 Korištenje Web servisa u .NET aplikacijama ............................................... 45
2.4 .NET SDK - izgradnja i korištenje Web servisa ............................................... 51
2.4.1 Izgradnja Web servisa .................................................................................... 51
2.4.2 Korištenje Web servisa.................................................................................... 51
2.5 SOAP...................................................................................................................... 53
2.5.1 Uvod i osnovni pojmovi................................................................................... 53
2.5.2 Struktura SOAP poruke ................................................................................... 54
2.5.3 SOAP Encoding................................................................................................. 56
2.6 UDDI i DISCO ......................................................................................................... 58
2.6.1 UDDI – Universal Description, Discovery and Integration ........................ 58
2.6.2 Microsoft UDDI Services ................................................................................. 60
2.6.3 Microsoft DISCO............................................................................................... 60
2.7 Sigurnost ................................................................................................................. 61
2.7.1 Web Services Security (WS-Security) ........................................................... 61
2.7.2 Microsoft Web Services Enhancements........................................................ 62
3. Windows Communication Foundation ............................................................................ 63
3.1 Uvod .......................................................................................................................... 63
3.1.1. Usluge i arhitektura zasnovana na uslugama (SOA)................................. 63
3.1.2. Windows Communication Foundation (WCF)............................................. 66
3.2 WCF usluge .............................................................................................................. 67
3.3 WCF klijenti .............................................................................................................. 72
REFERENCE............................................................................................................................. 75
2
Uvod
Cilj rada je pružiti uvod u tehnologiju Web servisa uz malo ili nimalo predznanja o srodnim
tehnologijama. Pojašnjene su glave ideje bez previše tehničkih detalja koji u početnoj fazi nemaju
preveliku važnost. Svi aspekti Web servisa se pokušavaju objasniti korak po korak, i pritom se
pokušava ostvariti nekakav logički slijed.
U prvom dijelu je objašnjen koncept Web servisa i odgovara se na pitanje što su uopće Web
servisi. Opisuje se arhitektura Web servisa što meñu ostalim obuhvaća i tehnologije koje se koriste za
izgradnju Web servisa. Osim cjelovitog pogleda, pokušava se malo detaljnije pojasniti tehnologije XML,
SOAP i WSDL koje su ključne za izgradnju Web servisa. Ističe se važnost XML-a u razvoju Web servisa
i zaslužnost XML-a za glavna svojstva Web servisa, neovisnost o platformi i programskom jeziku.
Obzirom na važnost sigurnosti jedno od glavnih pitanja je i pitanje sigurnosti Web servisa. Kako ideja
Web servisa ne bi ostavila dojam teorije bez prakse, opisuje se što Web servisi znače za razvoj
softvera, koje su im glavne prednosti i gdje ih se može naći u stvarnosti. Dodatni doprinos smještaju
Web servisa u stvarni svijet je i dio koji se bavi organizacijama izravno uključenima u razvoj standarda
i tehnologije Web servisa.
3
1. Osnovno o Web servisima
1.1 Što je to Web servis?
Iz samog naziva „web servis“ mogu se zaključiti dvije stvari.
Radi se o nekom servisu, tj. nekoj usluzi. Netko se poslužuje, servisira. Može se jednostavno zaključiti
da naziv web servis ukazuje da se radi o dvije strane koje meñusobno komuniciraju. Jedna strana
servisira tj. poslužuje drugu stranu. Dakle jedna strana je servis (Web servis), a druga strana je
korisnik tog servisa. Web servis poslužuje svog korisnika.
Osim toga radi se o nečemu što je dostupno i koristi se putem Weba, odnosno Interneta.
Na pitanje, što čini Web, većina bi ljudi vjerojatno odgovorila Web stranice. Web stranice su
element Web-a. One korisniku pružaju podatke. Ako se za primjer uzme jednostavna Web stranica
dnevnih novina ona bi se mogla nazvati statičkim elementom Web-a. Zašto? Zato što svi korisnici te
Web stranice dobivaju jednake informacije, jednaki sadržaj.
Web stranica dnevnih novina sadrži vijesti. Te vijesti su iste za sve korisnike koji pristupaju stranici.
Bez obzira koliko korisnika otvori stranicu u browseru oni će svi dobiti jednake vijesti i jednake
informacije. Općenito gledano sadržaj Web stranice koju korisnik otvori u svom browseru ne ovisi o
nekim posebnim parametrima, nego je rezultat običnog klika na hyperlink. Klikom na hyperlink 1
otvorit će se web stranica 1. Klikom na hyperlink 2 otvorit će se web stranica 2 itd. Ako 100 korisnika
klikne na hyperlink 1, svih 100 korisnika će dobiti jednaki sadržaj web stranice 1. Ako 100 korisnika
klikne na hyperlink 2, svih 100 korisnika će dobiti jednaki sadržaj web stranice 2. Drugim riječima,
sve što korisnik čini je dohvaćanje odreñene Web stranice, jer je to jedino što mu ta Web stranica
omogućava. Može se reći da se korisniku nad takvom Web stranicom pruža samo jedna funkcija, a to
je dohvat te stranice.
4
Slika 1.1: Dohvatom Web stranice svi korisnici dobivaju isti sadržaj
Za razliku od Web stranica, Web servisi funkcioniraju na drugačiji način. Podaci koje korisnik
dobiva od Web servisa u potpunosti ovise o podacima odnosno parametrima koje korisnik šalje Web
servisu. Izlazni podaci Web servisa su funkcija ulaznih podataka, pa se može reći da Web servisi
pružaju funkcionalnost.
Svrha Web servisa je pružanje odreñene funkcionalnosti svom korisniku. Jednako kao i Web stranice,
Web servisi su dostupni i koriste se putem Web-a. Web servisi su dakle element Web-a, baš kao i Web
stranice.
Može se postaviti pitanje: kako ja, kao krajnji korisnik, mogu koristiti Web servis odnosno
funkcionalnost koju on pruža? Odgovor je jednostavan. Nikako.
Jedna od temeljnih razlika izmeñu Web stranica i Web servisa je da Web servisi nisu predviñeni za
korištenje od strane krajnjih korisnika računala (ljudi). Ali ako ih ne koriste krajnji korisnici, tko ih onda
koristi? Pa umjesto krajnjih korisnika (ljudi), Web servise i njihovu funkcionalnost koriste aplikacije, tj.
programi.
Dakle aplikacije (programi) su te koje putem Interneta koriste Web servise i njihovu funkcionalnost.
Aplikacije šalju Web servisima ulazne podatke (parametre) i kao rezultat od Web servisa dobivaju
izlazne podatke. Bitno je naglasiti da su izlazni podaci funkcija ulaznih podataka. To znači da izlazni
podaci ovise isključivo o ulaznim podacima.
Značenje ulaznih i izlaznih podataka ovisi o namjeni aplikacije i Web servisa kojeg aplikacija koristi.
Neka aplikacija može imati bilo kakvu namjenu i pritom koristiti funkcionalnost odreñenog Web
servisa.
Slika 1.2: Slanjem svojih ulaznih podataka Web servisu, aplikacije
kao odgovor primaju svoje izlazne podatke
5
Da bi se pojam Web servisa malo povezao sa stvarnim svijetom slijedi nekoliko primjera:
-aplikacija za preračun valuta u mjenjačnici može koristiti web servis neke banke kako bi dohvatila
najnovije tečajne liste,
-Web aplikacija za rezervaciju hotelskog smještaja može koristiti Web servis nekog hotela kako bi:
dohvatila točan broj slobodnih soba, napravila rezervaciju itd. ,
-Web aplikacija za rezervaciju avionske karte može koristiti Web servise različitih avio-kompanija kako
bi: dohvatila dostupne letove, mjesta na tim letovima i njihove cijene, napravila rezervaciju itd.
Kako bi još malo razjasnili pojam funkcionalnosti web servisa i povezali ga sa prethodnom
slikom iskoristit ćemo sljedeći primjer.
Neki lanac hotela u svojem računalnom sustavu ima sve podatke o broju slobodnih soba,
kategoriji i cijeni tih soba, dodatnim mogućnostima koje se nude gostima itd. U isto vrijeme postoji
veliki broj turističkih agencija koje se bave organizacijom putovanja. Te turističke agencije imaju svoje
Web stranice (Web aplikacije) putem kojih nude informacije o odredištima, smještaju te nude
mogućnost rezervacije smještaja i razne druge usluge.
Da bi povezali svoje poslovanje, hotelski lanac uspostavlja Web servis kojim nudi sve što neka
agencija može zatrebati. Jedinstveni Web servis za cijeli hotelski lanac. Taj jedinstveni Web servis
mogu koristiti mnoge Web stranice turističkih agencija kako bi ponudile jedinstvenu uslugu na jednom
mjestu. Dakle jedan Web servis koristi veliki broj Web stranica (Web aplikacija) koje komuniciraju s
tim Web servisom. Šalju mu različite ulazne podatke i parametre, te od njega dobivaju povratne
podatke i informacije ovisno o poslanim ulaznim parametrima.
Na primjer, dok jedna Web stranica Web servisu šalje upit kojim želi saznati cijenu noćenja u
dvokrevetnoj sobi, druga Web stranica Web servisu šalje podatke osobe koja želi rezervirati smještaj.
Prva Web stranica će kao povratnu informaciju dobiti podatke o cijeni noćenja u dvokrevetnoj sobi,
dok će druga Web stranica dobiti informaciju o uspješnoj rezervaciji smještaja.
Dakle taj Web servis pruža funkcionalnost. Ta funkcionalnost su zapravo usluge i informacije o
uslugama hotelskog lanca. Tu funkcionalnost koriste Web aplikacije turističkih agencija kako bi
krajnjim korisnicima (ljudima) omogućile pregledavanje i korištenje usluga hotelskog lanca dok sjede
za svojim računalom. Primjer ilustrira slika 3a.
6
Slika 1.3: Primjer Web servisa hotelskog lanca
No čak ni to nije potpuno realistično. Mnogo je realniji scenarij gdje jedna Web aplikacija koristi
mnogo Web servisa različitih hotelskih lanaca kako bi svojim krajnjim korisnicima omogućila pristup
uslugama velikog broja hotela. To ilustrira slika 4.
Slika 1.4: Realni scenarij primjene Web servisa i njihove funkcionalnosti
Sada bi trebalo biti malo jasnije što su to Web servisi te koja je njihova svrha. Web servisi su elementi
Web-a, baš kao i Web stranice. Njihova svrha je pružanje funkcionalnosti aplikacijama putem
Interneta. Mogućnosti primjene su praktično neograničene i najveći problem je osmisliti dovoljno
inovativno rješenje.
Web servis nije nešto što se može kupiti kao gotov proizvod i zatim instalirati na odreñenom
računalu. Znamo da Web servis pruža odreñenu funkcionalnost. Da bi se u stvarnom svijetu ponudila
neka usluga, odnosno funkcionalnost u obliku Web servisa, potrebno je tu funkcionalnost softverski
implementirati, tj. programirati. Npr. da bi servis hotelskog lanca mogao zaprimiti nečiju rezervaciju,
potrebno je napisati programski kôd „koji je zadužen“ za komunikaciju s hotelskom bazom podataka i
unos rezervacija u bazu.
Dakle, Web servisi su softverski sustavi.
Potrebno je razlikovati samu uslugu tj. funkcionalnost Web servisa od njegove softverske
implementacije. Softverska implementacija Web servisa je njegov agent. Vratimo se ponovo na
primjer Web servisa hotelskog lanca. Taj Web servis pruža funkcionalnost koja je jasno definirana
(dohvat podataka o sobama, rezervacija smještaja itd). Pretpostavimo da je hotelski lanac zbog toga
angažirao softversku tvrtku koja je za potrebe lanca razvila Web servis, odnosno tvrtka je napisala
agent (program) kojim se ostvaruje funkcionalnost tog Web servisa. Iz bilo kojeg razloga, lanac može
angažirati neku drugu softversku tvrtku koja će napisati svoj agent kojim se opet ostvaruje ista
funkcionalnost hotelskog Web servisa. Dakle novi Web servis pruža iste usluge i ima istu
funkcionalnost, iako se agent promijenio. Agent i funkcionalnost koju on pruža su dvije zasebne
komponente koje čine Web servis.
7
Web servisi, kao softverski sustavi, će se nalaziti na Web poslužitelju gdje će biti dostupni za
korištenje aplikacijama putem Web-a.
Softverska implementacija Web servisa izvodi se u nekom objektno orijentiranom
programskom jeziku. Temeljni element programa pisanog objektno orijentiranim jezikom je razred
(klasa). Razred se sastoji od svojih članova: svojstava i metoda. Prilikom izvoñenja programa razred
se instancira čime nastaje objekt u memoriji računala. Nad tim objektom se pozivaju metode koje on
pruža. Softverska implementacija Web servisa (u daljnjem tekstu: program) će se dakle sastojati od
razreda koji će svojim metodama ostvarivati funkcionalnost koju Web servis pruža.
Kako bi stvar još bolje pojasnili iskoristit će se primjer već spomenutog Web servisa hotelskog lanca.
Taj Web servis, kao što je ranije spomenuto, svojim korisnicima (aplikacijama) nudi različite usluge:
informacije o dostupnim sobama i o cijenama soba, mogućnost rezervacije smještaja itd.
Softverska implementacija Web servisa tog hotelskog lanca biti će ostvarena npr. razredom
HotelskiLanac. Znamo da su metode članovi razreda i znamo da se metodama ostvaruje
funkcionalnost. To znači da će u razredu HotelskiLanac
postojati npr. metoda
DohvatiDostupneSobe koja će kao svoj rezultat vraćati informacije o dostupnim sobama, zatim
metoda RezervirajSobu koja će vršiti rezervaciju sobe te kao svoj rezultat vraćati informaciju o
uspješnoj ili neuspješnoj rezervaciji itd.
Sada bi već trebao biti jasan odgovor na pitanje: tko poziva metode razreda HotelskiLanac ? Te
metode poziva upravo korisnička aplikacija koja koristi Web servis tj. njegovu funkcionalnost. To znači
da će korisnička aplikacija, kada želi rezervirati sobu, jednostavno pozvati metodu RezervirajSobu koju
pruža naš Web servis tj. njegova softverska implementacija tj. njegov razred.
Obzirom da znamo da korisničke aplikacije komuniciraju s Web servisima preko Weba, to znači da se
metode koje Web servis pruža moraju moći pozivati preko Weba. Pozivanje metoda preko Weba
zapravo znači da korisnička aplikacija mora Web servisu poslati nekakvu poruku koja sadrži naziv
metode koja se poziva i njezine argumente ako ih metoda ima. Web servis će odgovoriti porukom koja
će sadržavati rezultat pozivanja te metode uz zadane argumente.
U nastavku je detaljnije opisano kako se ostvaruje komunikacija izmeñu aplikacije i Web servisa.
Pritom se spominje razmjena poruka, slanje zahtjeva Web servisu itd. No treba imati na umu da se ne
dešava ništa drugo osim toga da korisnička aplikacija poziva metode Web servisa i prima rezultate od
Web servisa.
Slika 1.5: Funkcioniranje Web servisa na softverskom sloju
8
Web servisi će općenito imati dvije vrste metoda. Metode koje su dostupne korisničkim aplikacijama i
metode koje to nisu (lokalne metode). Kako razlikovati te metode ovisi o konkretnoj platformi i
programskom jeziku.
Postoje mnogi jezici i mnoge platforme za razvoj Web servisa. U ovom radu se za razvoj koristi
Microsoft .NET platforma i jezik C#. Više o tome u drugom poglavlju.
1.2 Arhitektura i tehnologije Web servisa
1.2.1 Pogled na cjelinu
Do sada je poznato da je Web servis softverski sustav, pojednostavljeno rečeno: aplikacija tj.
program. Program Web servisa zove se agent Web servisa i on ostvaruje funkcionalnost koju Web
servis pruža. Agent Web servisa već spomenutog hotelskog lanca nalazi se na nekom Web serveru i
svojom funkcionalnosti korisnicima omogućava korištenje usluga hotelskog lanca.
Ranije je spomenuto da naziv Web servis ukazuje na to da postoje dvije strane koje
meñusobno komuniciraju. To su Web servis i njegov korisnik. Takoñer je spomenuto da su korisnici
Web servisa neke druge aplikacije tj. programi. Obzirom da Web servis pruža uslugu korisniku nazvat
ćemo ga pružatelj usluge ili kratko pružatelj (eng. provider). Aplikaciju koja koristi funkcionalnost
odreñenog Web servisa ćemo onda nazvati korisnik usluge ili kratko korisnik (eng. consumer).
Postavljaju se pitanja: Kako korisnik dolazi do spoznaje o pružatelju? Kako korisnik
„prepoznaje“ odgovarajućeg pružatelja, tj. pružatelja koji nudi funkcionalnost koju korisnik treba?
Kako korisnik i pružatelj meñusobno komuniciraju? Postoje li neki definirani modeli komunikacije
korisnika i pružatelja? Koji protokoli se pritom koriste? Koji format podataka se koristi u komunikaciji?
itd. Odgovore na ta pitanja daje pregled tehnologija i arhitekture Web servisa.
Komunikacijska podloga
Komunikacija izmeñu korisnika i pružatelja se odvija putem Interneta. To podrazumijeva korištenje
protokola protokola IP na mrežnoj razini, odnosno protokola TCP na transportnoj razini internetskog
modela. Na najvišoj aplikacijskoj razini za komunikaciju korisnika i pružatelja koriste se različiti
protokoli kao što su: HTTP, SMTP, FTP, JMS itd. Iako nije nužan za komunikaciju korisnika i
poslužitelja najkorišteniji protokol je HTTP (koji se ujedno koristi i za komunikaciju Web preglednika tj.
browsera i Web poslužitelja prilikom dohvata Web stranica). Protokol HTTP nije predmet promatranja
ovdje te neće biti detaljnije objašnjen, no bit će spominjan u kontekstu njegovog korištenja od strane
viših razina komunikacije korisnika i pružatelja. Pritom se podrazumijeva da se umjesto protokola
HTTP može koristiti i neki drugi protokol.
Slika 1.6: Podloga komunikacije izmeñu korisnika i pružatelja
9
Poruke
Tijekom svoje komunikacije korisnik i pružatelj razmjenjuju različite podatke. U slučaju Web
servisa hotelskog lanca koji poslužuje Web aplikaciju turističke agencije, servis (pružatelj) i aplikacija
(korisnik): razmjenjuju podatke o raspoloživosti smještaja u hotelu, uslugama i sadržajima u hotelu,
cijenama, o učinjenim rezervacijama i mnoge druge. Svi podaci se izmeñu korisnika i pružatelja
razmjenjuju unutar poruka. Poruke prenose podatke izmeñu korisnika i pružatelja. Može se reći da je
poruka jedinka komunikacije izmeñu korisnika i pružatelja.
Kao što je spomenuto ranije, sva komunikacija izmeñu korisnika i pružatelja se (najčešće) odvija iznad
protokola HTTP. To znači da korisnik i pružatelj jedan drugom šalju poruke uz pomoć protokola HTTP.
Slika 1.7: Razmjena poruka izmeñu korisnika i pružatelja. P=poruka.
Postavljaju se pitanja: postoji li neki „standardni“ oblik poruke i „standardni“ način njenog
slanja, koji je format zapisa podataka u poruci, koji je format zapisa same poruke itd.
Oblik poruke te način razmjene poruka izmeñu korisnika i pružatelja definira SOAP
specifikacija. SOAP je protokol za razmjenu informacija u raspodijeljenim okruženjima kao što je Web.
Temelji se na razmjeni SOAP poruka. SOAP poruka prenosi konkretne podatke (parametre) izmeñu
korisnika i pružatelja. Prilikom slanja zahtjeva pružatelju, korisnik kreira novu SOAP poruku, te u nju
upisuje podatke koje šalje pružatelju. Nakon što primi tu SOAP poruku, pružatelj iz SOAP poruke čita
podatke koje je poslao korisnik i obavlja svoju operaciju. Analogno tome, kod slanja odgovora
korisniku, pružatelj kreira novu SOAP poruku u koju posprema podatke i rezultate operacija
predviñene za korisnika i šalje poruku korisniku. Korisnik prima SOAP poruku i iz nje čita podatke.
Prethodno je navedeno da se poruke izmeñu korisnika i pružatelja prenose posredstvom protokola
HTTP. To znači da jedna HTTP poruka (paket) u svom tijelu sadrži tj. prenosi jednu SOAP poruku. Više
detalja o SOAP-u bit će navedeno kasnije.
10
Slika 1.8: Razmjena podataka izmeñu korisnika i pružatelja SOAP porukama
Preostaje pitanje u kojem obliku zapisa se podaci razmjenjuju izmeñu korisnika i pružatelja, te
koji je oblik zapisa same poruke. Drugim riječima, pitanje je da li su podaci samo običan niz znakova,
da li su strukturirani na neki način ili su pak zapisani u binarnom obliku.
Svi podaci koje razmjenjuju korisnik i pružatelj zapisani su u XML obliku. To znači da kada korisnik tj.
Web aplikacija turističke agencije s početka, želi pružatelju tj. Web servisu hotela poslati podatke o
osobama za koje treba napraviti rezervaciju, onda će korisnik te podatke zapisati u XML obliku, te ih
na taj način poslati pružatelju. Nakon što je priredio podatke u XML obliku, korisnik te podatke
smješta unutar SOAP poruke kao što je navedeno ranije. Osim podataka korisnika i pružatelja, SOAP
poruka mora sadržavati još neke podatke potrebne za pohranu informacija o poruci i drugih sustavskih
informacija. Cijela SOAP poruka će kao i podaci biti zapisana u XML obliku. XML je oblik zapisa SOAP
poruke i podataka koje SOAP poruka prenosi. Kako bi stvar bila jasnija slijedi primjer podataka koje
korisnik šalje pružatelju i SOAP poruke koja prenosi te podatke.
Slika 1.9: Primjer XML podataka koje korisnik šalje pružatelju
11
Slika 1.10: SOAP poruka s podacima
Malo više detalja o samo XML-u te o njegovom vrlo velikom značaju u području Web servisa, a i
raspodijeljenih okruženja općenito, bit će riječi malo kasnije.
Opisi
Vratimo se malo na izvorni primjer sa hotelskim lancem. Hotelski lanac želi ponuditi svoje
usluge u obliku Web servisa. Angažira se softverska tvrtka koja kreira Web servis koji nudi usluge
hotelskog lanca i učini taj Web servis dostupnim na Webu. Taj Web servis je postao element Weba.
Kad je Web servis kreiran i „pušten“ na Web, najjednostavnije što se može desiti je da potencijalni
korisnici tog Web servisa postanu „svjesni“ da se pojavio novi Web servis. Npr. uvidom u neku online
bazu, programer ili sama aplikacija, može saznati da se pojavio novi Web servis i da je njegov vlasnik
hotelski lanac.
Da li je sama spoznaja da Web servis postoji dovoljna da bi ga se koristilo ? Nije.
Spomenuto je ranije da su Web servisi softverski sustavi. To znači da oni prema svojim korisnicima
imaju odreñeno sučelje i da nude odreñene operacije tj. odreñenu funkcionalnost. Npr. Web servis
hotelskog lanca nudi operacije: rezervacije, provjere slobodnih kapaciteta itd. Složenost Web servisa i
funkcionalnost koju pruža može biti različita. I na tom mjestu u „igru“ ulaze opisi Web servisa. Opis
Web servisa (eng. description) ima ulogu pružiti sve potrebne informacije o tome što Web servis pruža
i kako ga iskoristiti.
Postoji li neki standardni (formalni) način opisivanja Web servisa? Postoji.
Opis Web servisa je dokument koji opisuje Web servis, odnosno njegovo sučelje i njegovo značenje tj.
semantiku. Opis Web servisa zove se WSD – Web Service Description. Za kreiranje opisa Web servisa
tj. za kreiranje WSD dokumenata postoji jezik: WDSL – Web Services Description Language.
WSDL dokument je XML dokument tj. opis Web servisa je zapisan u XML formatu. Ta činjenica
zajedno sa već ranije spomenutim SOAP porukama koje se takoñer u potpunosti temelje na XML
formatu zapisa podataka ukazuje na važnost XML-a koja će kasnije biti posebno naglašena. Jeziku
WSDL će malo kasnije biti posvećeno više pozornosti.
Već je poznato da Web servis čini njegova klasa koja pak sadrži članove (metode, svojstva...).
Opisi Web servisa omogućavaju korisničkim aplikacijama da dobiju informacije o Web servisu potrebne
12
da bi s njim komunicirale. Opisi dolaze u obliku .wsdl dokumenata. Svaki Web servis ima svoj .wsdl
dokument koji, meñu ostalim, opisuje one metode Web servisa koje su dostupne njegovim
korisnicima. Zašto samo te metode? Pa obzirom da .wsdl dokumenti služe korisnicima Web servisa
logično je da je njima bitan samo onaj dio Web servisa kojemu imaju pristup, a to su upravo te
metode ! Jednako kao i metode namijenjene korisniku, opis Web servisa je takoñer dostupan na Webu
što je i logično.
Slika 1.11: Opisi Web servisa
Koncept proxy klase
Najjednostavnije rečeno, proxy klasa je klasa koja se nalazi na strani korisničke aplikacije i
koja omogućava korisničkoj aplikaciji da koristi Web servis na jednak način kao sve druge klase u
svom (lokalnom) okruženju. To znači da će aplikacija koristiti proxy klasu na jedan način kao što
koristi i klasu za komunikaciju s datotekama, klasu za grafički prikaz itd. Proxy klasa se može nazvati
predstavnikom Web servisa u lokalnom okruženju korisničke aplikacije.
Proxy klasa se stvara na temelju .wsdl dokumenata Web servisa. Stvara se tijekom razvoja
aplikacije te zapravo postaje sastavni dio aplikacije.
Ukoliko se stvari analiziraju malo detaljnije, proxy klasa je ta koja ustvari komunicira s Web
servisom u ime korisničke aplikacije, no normalno se kaže da korisnička aplikacija koristi Web servis.
Takoñer je bitno naglasiti da proxy klasa „obavlja“ sve poslove oko komunikacije s Web
servisom, a to znači: stvaranje i analiziranje SOAP poruka, razmjena poruka itd. Programer koristi
proxy klasu kao i svaku drugu klasu (instanciranje klase, pozivanje metoda nad objektima klase itd.)
te pritom uopće ne mora brinuti o detaljima komunikacije !
Cijeli koncept prikazuje sljedeća slika.
13
Slika 1.12: Koncept proxy klase
Do sada su navedena dva bitna elementa arhitekture Web servisa: poruke i opisi. Oba se u
potpunosti temelje na XML formatu zapisa podataka. Opis Web servisa opisuje sučelje i funkcionalnost
Web servisa koju pruža svojoj okolini. Poruke rješavaju pitanje komunikacije izmeñu korisnika i
pružatelja. Sve se to dešava povrh protokola HTTP.
Slika 1.13: Djelomični pregled elemenata arhitekture Web servisa
Procesi
Nakon što smo pojasnili na koji način Web servis može komunicirati te kako opisom može
omogućiti korištenje vlastite funkcionalnosti nastavljamo korak dalje.
Zamislimo scenarij u kojem postoji mnogo Web servisa i mnogo korisnika. Svi mogu komunicirati
meñusobno. Takoñer svaki Web servis ima svoj WSD opis. U toj situaciji možemo Web servise i
njihove korisnike promatrati kao zasebne objekte u raspodijeljenom okruženju kao što je Web.
14
Slika 1.14: Korisnici i pružatelji kao zasebni objekti u raspodijeljenom okruženju
Iz ovakve perspektive moguće je promatrati odnose i dogañaje meñu prikazanim objektima u
mreži. Proces je općeniti naziv za neko dogañanje i odnos u mreži. Npr. najjednostavniji proces je
očito jednostavno korištenje Web servisa od strane korisničke aplikacije. Osim takvih jednostavnih
procesa mogu postojati složeniji procesi. Složeniji primjer procesa bi bila agregacija tj. ugnježñivanje
Web servisa gdje jedan Web servis koristi drugi koji koristi treći itd. Ovdje će biti izdvojena jedna vrsta
procesa koja je od izuzetne važnosti za arhitekturu Web servisa i koja uz poruke i opise čini treći
element arhitekture, a to je otkrivanje (eng. discovery).
Otkrivanje je proces pronalaženja Web servisa po odreñenom kriteriju. Obzirom da opis Web servisa
ima ulogu svojevrsne „osobne karte“ Web servisa, proces otkrivanja će zapravo podrazumijevati
pronalaženje opisa odgovarajućeg ili odgovarajućih Web servisa.
Do procesa otkrivanja dolazi kada korisnička aplikacija ima potrebu korištenja Web servisa odreñenog
tipa. Otkrivanjem se pronalazi odgovarajući Web servis koji se potom može koristiti kao pružatelj.
Može se postaviti pitanje, da li otkrivanje vrši korisnička aplikacija ili programer koji tu aplikaciju
kreira. Odgovor je oboje. Otkrivanje može biti „ručno“ tj. Web servis može otkriti sam programer, a
može biti i „samostalno“ tj. od strane same aplikacije koja vrši otkrivanje odgovarajućeg Web servisa.
Opis Web servisa o kojem je bilo riječi ranije i proces otkrivanja se u potpunosti nadopunjuju jer je
svrha opisa omogućiti otkrivanje i korištenje Web servisa. U proces otkrivanja programer ili sama
aplikacije zapravo „ulaze“ sa kriterijima o Web servisu koji traže tj. koji im je potreban. Pritom oni ne
znaju hoće li ili neće pronaći odgovarajući Web servis. U procesu otkrivanja se onda usporeñuju
kriteriji programera sa opisima ponuñenih Web servisa. Ako opis odreñenog Web servisa odgovara
kriterijima, taj Web servis se može koristiti kao pružatelj funkcionalnosti aplikaciji.
Postoje tri osnovna pristupa kako „utjeloviti“ tj. formalno izvesti proces otkrivanja Web servisa.
Otkrivanje putem središnjeg registra se vrši onda kada postoji središnji registar Web servisa koji
postoje na mreži. Da bi to funkcioniralo potrebno je prilikom kreiranja novog Web servisa tj. njegovog
opisa, u središnji registar dodati opis Web servisa. Potrebno je izravno registrirati novi Web servis u
registru. Primjer za ovakav način otkrivanja Web servisa je UDDI ili Microsoft DISCO.
Otkrivanje putem indeksa se vrši pretragom indeksa tj. popisa ili liste odreñenih Web servisa. Bilo tko
ima slobodu sastaviti vlastiti indeks tj. popis odreñenih Web servisa. U ovom slučaju ne postoji
15
registracija novih Web servisa jer je indeks samo pokazivač na lokaciju Web servisa, a ne sadrži
njihove opise kao registar. Primjer za ovakav način otkrivanja Web servisa je Google.
P2P otkrivanje je alternativa registarskom pristupu i omogućava meñusobno otkrivanje Web servisa.
Potrebno je da postoji mreža Web servisa koji „znaju“ jedni za druge. Kod traženja odgovarajućeg
Web servisa, jedan Web servis će od svojih susjeda za koje zna da postoje, zatražiti odgovarajući Web
servis. Taj upit će se dalje distribuirati kroz mrežu Web servisa dok se ne pronañe odgovarajući. Treba
uočiti da je moguće da Web servis interno ima sastavljen indeks drugih Web servisa što je onda
kombinacija s prethodnim načinom pretraživanja.
Nakon uspješnog procesa otkrivanja Web servisa, tražitelj će i Web servis će se „dogovoriti“ o načinu
komunikacije tj. o protokolu. Na taj način tražitelj postaje korisnik Web servisa.
Procesi čine treći bitni element arhitekture Web servisa koja je sada potpuna. Komunikacijsku
podlogu pruža protokol HTTP. Korisnik i pružatelj meñusobno razmjenjuju SOAP poruke. Pružatelj ima
svoj opis kojim omogućava da ga potencijalni korisnici pronañu u procesu otkrivanja. Sve zajedno je
bazirano na XML-u kao temeljnom načinu zapisivanja podataka.
Slika 1.15: Potpuni pregled elemenata arhitekture Web servisa
1.2.2 XML malo detaljnije
XML (Extensible Markup Language) je jezik za opis strukturiranih podataka tj. jezik za
kreiranje dokumenata koji sadrže strukturirane podatke. Pritom je istovremeno omogućeno zapisivanje
podataka i njihovog značenja. Struktura XML dokumenata se temelji na oznakama (eng. tag).
Specifikacija jezika XML definira načine kreiranja i korištenja oznaka.
16
XML dozvoljava autoru XML dokumenata da kreira vlastite oznake i upravo oznake
omogućavaju opis strukture dokumenata jer sadrže informacije o značenju podataka izmeñu oznaka.
Npr. u primjeru: <ime> Marko </ime>, <ime> je početna oznaka, Marko je podatak,
a </ime> je završna oznaka. Očito oznaka označava značenje podatka kojeg obuhvaća. Početna
oznaka i završna oznaka zajedno čine element.
Iako podsjeća na jezik HTML, jezik XML nikako nije naprednija verzija jezika HTML. Obzirom da se u
XML-u mogu kreirati oznake HTML-a, očito se u XML-u može kreirati potpuni HTML dokument što
znači da je jezik XML širi od jezika HTML.
XML dokumenti se mogu promatrati kroz dva osnovna svojstva. Prvo svojstvo je dobra
oblikovanost, a drugo svojstvo je valjanost.
Da bi XML dokument bio dobro oblikovan, on mora poštivati neka opća pravila koja vrijede za
sve XML dokumente. Ta pravila definira sam jezik XML. Npr. svaki element u XML dokumentu mora
imati početnu i završnu oznaku, XML dokument smije sadržavati samo jedan korijenski element, tj.
smije postojati samo jedan element čija početna i završna oznaka obuhvaćaju sve ostale elemente,
nazivi početnih i završnih oznaka moraju biti pisani ili malih ili velikim slovima i moraju se podudarati,
elementi se moraju pravilno ugnježñivati tj. ne smije biti preklapanja itd. Ta pravila mora poštivati
svaki XML dokument bez iznimke. Ukoliko ih poštuje tada je taj XML dokument dobro oblikovan.
Za pojašnjenje valjanosti XML dokumenta iskoristit će se primjer Web servisa s početka.
Pretpostavimo da postoji Web servis hotelskog lanca kao što je ranije opisano. I pretpostavimo da
postoji veliki broj Web aplikacija raznih turističkih agencija koje koriste taj Web servis. Kad smo ranije
opisivali razmjenu poruka izmeñu korisnika i pružatelja rekli smo da poruka sadrži sustavske
informacije i konkretne podatke koje korisnik (aplikacija) šalje Web servisu (pružatelju) ili obrnuto. Ti
konkretni podaci nisu ništa drugo nego XML dokumenti. Dakle korisnici i pružatelji razmjenjuju XML
dokumente.
Slijede dva primjera o svojstvu valjanosti XML dokumenta.
Pretpostavimo da Web servis ima definiran element koji opisuje rezervaciju na sljedeći način.
<rezervacija> (podaci o rezervaciji) </rezervacija>. Podaci o rezervaciji sadrže ime,
prezime, adresu i broj rezervacije. Kako Web servis zna da element rezervacija koji je poslala
aplikacija ima strukturu identičnu onoj koju koristi on sam? Kada se pojavi nova aplikacija koja želi
koristiti Web servis, kako ta aplikacija zna koje elemente koristi Web servis i koja je njihova struktura?
Pretpostavimo da postoji više hotela koji svi imaju svoje Web servise. Jedan hotel definira da
u njegovim XML dokumentima rezervacija mora sadržavati ime, prezime i adresu. Drugi hotel definira
da u njegovim XML dokumentima rezervacija mora sadržavati prezime i broj kreditne kartice. Kako
osigurati da aplikacije koje koriste te različite Web servise pravilno komuniciraju s njima tj. kako
osigurati da aplikacije tj. servisi razumiju XML dokumente koje razmjenjuju?
U svakom jasno definiranom okruženju (djelokrugu, komunikacijskom prostoru...) mora postojati
precizna definicija o tome koje tipove tj. elemente neki XML dokument smije sadržavati.
17
Npr. u okruženju izmeñu aplikacije A i servisa S1 mora postojati definicija da element rezervacija
sadrži elemente ime, prezime i adresu. U okruženju izmeñu iste aplikacije A i servisa S2 mora postojati
definicija da element rezervacija sadrži elemente prezime i broj kreditne kartice.
Document Type Definition
DTD je jedno od mogućih rješenja za navedene probleme. DTD je jezik za opis strukture XML
dokumenata. Dozvoljenu strukturu nekog XML dokumenta definira pripadna DTD datoteka.
DTD datoteka je mjesto na kojem će se definirati kakvu strukturu ima element rezervacija. Na
prethodnom primjeru to znači da u okruženju izmeñu aplikacije A i servisa S1 mora postojati DTD
datoteka u kojoj je definirano da element rezervacija sadrži elemente ime, prezime i adresu. U
okruženju izmeñu aplikacije A i servisa S2 mora postojati DTD datoteka u kojoj je definirano da
element rezervacija sadrži elemente prezime i broj kreditne kartice.
Što to znači da u okruženju izmeñu aplikacije i servisa postoji DTD datoteka? Tijekom svoje
komunikacije aplikacija i servis razmjenjuju XML dokumente. Na početku svakog XML dokumenta
mora biti navedena DTD datoteka na temelju koje je grañen XML dokument i obje strane moraju imati
pristup toj datoteci. I servis i aplikacija imaju pristup istoj DTD datoteci kojom provjeravaju da li je
primljeni XML dokument valjan u njihovom okruženju. To je značenje valjanosti XML dokumenta. XML
dokument je valjan ako odgovara pravilima iz zadane DTD datoteke.
Slika 1.16: Provjera valjanosti XML dokumenata
Unatoč svojim mogućnostima DTD tehnologija ima dosta ograničenja. U XML dokumentu ili skupini
XML dokumenata koji koriste odreñenu DTD datoteku, dozvoljeno je koristiti samo one elemente koji
su definirani u toj datoteci. Ako se DTD datoteka promatra kao rječnik dozvoljenih riječi onda je svaki
XML dokument koji se izgradi prema toj DTD datoteci ograničen na korištenje točno onih riječi koje su
definirane u toj DTD datoteci.
XML namespaces
Problem rječnika rješava tehnologija pod nazivom XML namespaces. XML namespace ili XML prostor
imena je jedinstveni rječnik elemenata identificiran jedinstvenim URI (Uniform Resource Identifier)
identifikatorom. To omogućava da se u istom XML dokumentu koriste različiti rječnici. Konkretno
omogućeno je da se npr. u istom XML dokumentu pojavi element rezervacija iz rječnika hotela A, te
element rezervacija iz rječnika hotela B. Ta dva elementa se razlikuju oznakom prostora imena kojem
pripadaju. To omogućava sam XML.
18
Slika 1.17: XML namespace primjena
Jasno je da tehnologije DTD i XML prostori imena ne mogu funkcionirati zajedno. Stoga se postavlja
pitanje kako održati funkcionalnost koju ostvaruje DTD i istovremeno imati mogućnost korištenja XML
prostora imena.
XML Schema
Odgovor na taj problem je XML Schema. XML Schema je tehnologija analogna DTD-u no mnogo
snažnijih i naprednijih mogućnosti. Kao što je kod primjene tehnologije DTD postojala DTD datoteka
koja je definirala dozvoljene elemente i strukturu XML dokumenata, kod primjere XML Scheme koristi
se XSD (XML Schema Definition) dokument koji sadrži analogne definicije no u naprednijem obliku.
XSD dokument se u XML dokument uključuje kao prostor imena na način opisan u prethodnom
primjeru.
Slika 1.18: Odnos DTD i XML Schema tehnologija kod validacije XML dokumenata
1.2.3 SOAP malo detaljnije
Do sada je spomenuto da korisnik i pružatelj meñusobno komuniciraju tako da razmjenjuju
poruke. Spomenuto je da je SOAP formalni tj. standardni način za ostvarivanje komunikacije
porukama. Jedna SOAP poruka se prenosi jednim HTTP paketom. Jedna SOAP poruka sadrži
konkretne podatke koje razmjenjuju korisnik i pružatelj. Rečeno je da ti podaci mogu npr. biti podaci o
osobi koja želi rezervirati sobu u hotelu, podaci o slobodnom smještaju itd. Drugim riječima, podaci
koje prenosi SOAP poruka su upravo ono zbog čega postoje dotični korisnik i pružatelj. Postoje da bi
19
ostvarili neku funkcionalnost i da osobi za računalom ponude neku uslugu. Dok osoba sjedi za
računalom i vrši svoju rezervaciju, stvaraju se SOAP poruke koje te podatke prenose do Web servisa
na drugoj strani, te naravno SOAP poruke kojima servis vraća broj uspješno provedene rezervacije.
Ukoliko se sve odvilo u redu naravno. Pritom je to sve potpuno skriveno od osobe koja pokreće i
koristi cijeli proces.
Strogo gledano SOAP nije protokol. SOAP je zapravo fleksibilna platforma tj. okruženje za razmjenu
XML poruka. SOAP specifikacija je prijedlog (eng. recommendation) organizacije W3C. Dakle nije
norma ni formalni standard. Sama riječ SOAP u najnovijoj varijanti nije akronim za zapravo ništa.
SOAP je jednostavno SOAP. U prošlosti je SOAP bio akronim za Simple Object Access Protocol, a
koristila se i varijanta Service Oriented Architecture Protocol.
Struktura SOAP poruke
Ranije je navedeno da SOAP poruka sadrži sustavski dio i dio s podacima. Ti dijelovi se
formalno zovu zaglavlje SOAP poruke (eng. header) i tijelo SOAP poruke (eng. body). Zaglavlje i tijelo
poruke su sadržani unutar omotnice SOAP poruke (eng. envelope).
Zaglavlje se ne mora obavezno koristiti no najčešće sadrži odreñene kontrolne informacije o tome
kako obraditi SOAP poruku, kako ju prosljeñivati itd. U realnim scenarijima je moguće da SOAP poruka
ne putuju isključivo od korisnika do pružatelja nego da na svom putu proñe više točaka koje se zovu
SOAP čvorovi. Upravo za tu namjenu postoji tzv. blok zaglavlja koji se nalazi u zaglavlju poruke i kojih
može biti više. Pojedini od tih blokova zaglavlja mogu biti namijenjeni odreñenim čvorovima na putu
poruke.
Tijelo SOAP poruke je obavezni dio svake SOAP poruke. Tijelo sadrži konkretne podatke koje prenosi
SOAP poruka od izvora gdje je stvorena, do odredišta.
Ranije je spomenuto da se podaci izmeñu korisnika i pružatelja razmjenjuju u XML obliku. Sama SOAP
poruka je takoñer u XML obliku tj. SOAP poruka je XML dokument. Omotnica SOAP poruke je očito
glavni tj. korijenski element SOAP poruke.
Slika 1.19: Opća struktura SOAP poruke
1.2.4 WSDL malo detaljnije
Što je uopće WSDL? WSDL (Web Services Description Language) je jezik za opisivanje Web
servisa baziran na XML-u. Na temelju jezika WSDL se generiraju WSDL dokumenti koji su očito XML
dokumenti.
Ranije je spomenuto da su Web servisi softverski sustavi. To znači da oni uvijek imaju nekakvo sučelje
putem kojeg omogućavaju korištenje svoje funkcionalnosti. Korisničke aplikacije koriste to sučelje i
20
stoga je WSDL dokumentom bitno opisati sučelje, a ne internu arhitekturu Web servisa. Što
podrazumijeva opis sučelja Web servisa? Podrazumijeva opis poruka na kojima se temelji
komunikacija, tipova podataka koji se razmjenjuju, operacija (metodama) koje Web servis pruža,
lokaciju na kojoj se nalazi Web servis itd.
WSDL opis će se kod kreiranja novog Web servisa npr. unijeti u centralnu bazu podataka Web servisa
(npr. UDDI) otkuda će potencijalni korisnici moći dohvatiti informacije o tom Web servisu, njegovoj
lokaciji itd.
WSDL opis sastoji se od nekoliko elemenata koji pojedinačno opisuju glavne elemente sučelja Web
servisa. Oni su navedeni u nastavku.
<portType>
Opisuje operacije koje svojim korisnicima pruža Web servis. Zbog toga je i najvažniji element WSDL
dokumenta. Može se usporediti sa razredom (klasom) u terminima objektno orijentiranih programskih
jezika. Kao što razred sadrži metode koje pruža svojim korisnicima, tako i ovaj element sadrži
operacije (metode) koje Web servis pruža svojim korisnicima.
<message>
Opisuje poruke koje se koriste tijekom korištenja neke operacije Web servisa. Sastoji se od proizvoljno
mnogo logičkih dijelova (eng. parts). Svaki logički dio poruke definira se imenom i tipom. Ovaj
element se može usporediti sa skupom ulaznih tj. izlaznih parametara kod pozivanja neke metode.
<types>
Opisuje tipove podataka koji se koriste tijekom korištenja operacija Web servisa. Tipovima se opisuju
dijelovi poruka. Može se usporediti sa ulaznim tj. izlaznim tipovima podataka kod korištenja metoda u
standardnim programskim jezicima.
<binding>
Prethodni elementi opisuju komunikaciju na apstraktan način, neovisno o konkretnim protokolima koji
će se koristiti za izvoñenje te komunikacije u stvarnosti. Ovaj element definira konkretni protokol i
povezuje prethodne apstraktne elemente na konkretne protokole, npr. SOAP.
Slika 1.21: Segment WSDL dokumenta
Treba naglasiti da se WSDL može smatrati „strojnim jezikom“ jer ga opise Web servisa u WSDL-u ne
pišu ljudi, jednako kao što ni proxy klase na temelju WSDL dokumenata ne pišu ljudi već za oboje
postoje aplikacije koje generiraju WSDL dokumente odnosno proxy klase.
1.3 Zašto je XML tako važan?
XML je do sada spomenut nekoliko puta. SOAP poruke koje meñusobno izmjenjuju Web
servisi i njihovi korisnici su u XML formatu. Konkretni podaci koji se prenose unutar SOAP poruka su
takoñer u XML formatu. WSDL dokumenti koji opisuju Web servise su XML dokumenti. XSD dokumenti
su XML dokumenti. Obzirom na sve to XML je ključna tehnologija za Web servise.
21
XML je glavni razlog za dva izuzetno bitna svojstva koja posjeduju Web servisi, a to su:
-platformska neovisnost tj. neovisnost o platformi i
-jezična neovisnost tj. neovisnost o programskom jeziku.
Neovisnost o platformi podrazumijeva neovisnost o operacijskom sustavu iznad kojeg se izvršava Web
servis ili korisnička aplikacija. Neovisnost o programskom jeziku podrazumijeva neovisnost o
razvojnom okruženju i programskom jeziku koji se koristi za razvoj Web servisa ili korisničke aplikacije.
Što zapravo znači neovisnost o platformi tj. operacijskom sustavu? Znači da je moguća baš bilo koja
kombinacija operacijskih sustava za funkcioniranje tehnologije Web servisa. Obzirom da se radi o dvije
strane koje komuniciraju, tj. o Web servisu i korisničkoj aplikaciji, neovisnost o platformi znači da se
softver Web servisa može nalaziti na bilo kojem operacijskom sustavu, te da ga pritom može koristiti
aplikacija s bilo kojeg drugog operacijskog sustava.
To je moguće upravo zbog XML-a. XML datoteka je u potpunosti neovisna o svojstvima pojedinih
operacijskih sustava i zbog toga je moguće prenošenje podataka u XML obliku izmeñu bilo koje dvije
platforme.
Slika 1.22: Neovisnost o platformi - jedna od mogućih kombinacija platformi
Drugo važno svojstvo Web servisa je neovisnost o programskom jeziku. To ponovo omogućava upravo
XML. XML datoteka je potpuno neovisna o pojedinom programskom jeziku što omogućava da bilo koji
programski jezik kreira XML datoteku. Isto tako bilo koji programski jezik može „čitati“ XML datoteku
koje je stvorio bilo koji drugi programski jezik.
Npr. Web servis pisan u programskom jeziku C# mogu koristiti aplikacije pisane u jezicima Java, Perl,
Python, PHP itd. Moguće su različite varijante.
22
Kombinacija neovisnosti o platformi i neovisnosti o programskom jeziku daje Web servisima veliki
potencijal.
Slika 1.23: Neovisnost o programskom jeziku - jedna od mogućih kombinacija jezika
Što u realnosti znači neovisnost o platformi i programskom jeziku?
Pretpostavimo da postoje razvijene složene aplikacije pisane u različitim programskim jezicima na
različitim platformama. Ukoliko bilo koja od tih aplikacija želi koristiti neki Web servis dostupan na
Webu sve što ta aplikacija mora imati je sposobnost rukovanja XML dokumentima. Velika većina
programskih jezika ima razvijenu podršku za rukovanje XML dokumentima. Aplikacija pritom može na
temelju WSDL opisa Web servisa, ( koji je opet XML dokument ! ) doznati sve bitne informacije o Web
servisu potrebne za njegovo korištenje.
Zbog svega navedenog, Web servisi imaju svojstvo XML centričnosti (XML centric).
1.4 Motivi i potencijali.
Primjena Web servisa nije isključivo u izgradnji novih Web servisa. Bilo koja postojeća
aplikacija se može pružiti na korištenje putem Weba kao Web servis. Dakle ako negdje postoji neka
složena aplikacija čiju funkcionalnost bi bilo vrlo skupo i dugotrajno programirati, ta aplikacija se može
kao Web servis ponuditi na korištenje drugim aplikacijama. Sve što je potrebno je ostvariti vezu
23
aplikacije na Web i programski ostvariti sučelje putem kojeg vanjski korisnici mogu koristiti tu
aplikaciju. To vodi do zaključka da Web servisi zapravo omogućavaju recikliranje softvera. To osobito
dolazi do izražaja kod aplikacija koje su bile izrazito ovisne o nekoj platformi i nisu mogle komunicirati
npr. s drugim operacijskim sustavima.
Slika 1.24: Recikliranje softvera uz pomoć Web servisa
Web servisi omogućavaju drugačiji način razvoja softvera. Izgradnja softvera temeljenog na
Web servisima sastoji se od korištenja postojećih Web servisa kao komponenti u aplikaciji. Time se
zapravo pojednostavljuje cijeli proces razvoja softvera jer nije potrebno svu funkcionalnost pisati
ispočetka. Funkcionalnost postoji na Webu i samo je treba iskoristiti. Očito se Web servisi mogu
promatrati kao objekti na Webu koji pružaju funkcionalnost. Ako neki Web servis postoji na Webu
znači da ga se može koristiti ponovo i ponovo. To je svojstvo ponovne iskoristivosti (eng. reusability).
Iako je prilično logično, treba naglasiti da i sami Web servisi mogu biti korisnici drugih Web servisa.
Time su mogućnosti praktički neograničene i mogu se graditi najrazličitije Web strukture.
Slika 1.25: Različite mogućnosti komunikacije aplikacija i Web servisa
Prednosti Web servisa na strani korisnika i na strani pružatelja:
Strana pružatelja
Strana korisnika
24
Standardizirani, platformski i jezično neovisni
pristup funkcionalnosti postojećeg softvera
Brži pristup do novog softvera
Pouzdaniji i otporniji softver
Skraćenje vremena
postojećeg softvera
razvoja
zbog
korištenja
Izbjegavanje iscrpnog testiranja softvera zbog
korištenja isprobanog postojećeg softvera
Smanjenje troškova razvoja
korištenja postojećeg softvera
softvera
zbog
Ubrzanje izlaska softvera na tržište
Jednostavno dodavanje nove funkcionalnosti
putem ugradnje postojećeg softvera
Uklanjanje platformske ovisnosti pretvaranjem
aplikacije u Web servis
Jedna
od
osobito
zanimljivih
primjena
Web servisa su vrlo
popularni Web portali.
Web portali objedinjuju
veliki
broj
različitih
usluga za koje se podaci
često
dobavljaju
sa
različitih strana. Web
servisi se u tom slučaju
nameću kao logično
rješenje na način da
svaki element portala
„iza sebe“ ima Web
servis, putem kojeg
izravno
dobavlja
podatke i objavljuje ih
na portalu bez potrebe
za posredovanjem.
Slika 1.26: Web servisi i portali
1.5 Pitanje sigurnosti
Unatoč tome što se Web servisi nameću kao vrlo prihvatljiva tehnologija, još uvijek su u
odreñenoj mjeri ograničeni pitanjem sigurnosti. Sigurnost danas znači sve pa to i nije sasvim
25
neobično. Kada se govori o sigurnosti Web servisa treba znati da to ne znači isključivo sigurnost
samog Web servisa nego i sigurnost aplikacije koja ga koristi te sigurnost komunikacije izmeñu njih.
Riješiti pitanje sigurnosti Web servisa, a pritom ne riješiti pitanje sigurnosti aplikacije koja ga koristi je
napola riješen tj. neriješen problem. Isto tako nije dovoljno riješiti pitanje sigurnosti aplikacije, a
pritom zanemariti sigurnost Web servisa kojeg aplikacija koristi.
Sigurnost Web servisa može se promatrati na više razina, a jedno od najčešćih pitanja je
pitanje povjerenja platforme. To pitanje se može ukratko opisati ovako: koliko je sigurno imati
aplikaciju na ekstremno skupom IBM/UNIX stroju koja koristi Web servis na Windows stroju kućne
izrade. To je naravno samo primjer no ilustrira problem platforme.
Uz sigurnosne mjere koje su već uobičajene u računalnim sustavima, ipak je potrebno
naglasiti neke mjere pri korištenju Web servisa. Neke od tih mjera su:
•
•
•
•
stroga autentikacija i provjera identiteta izmeñu aplikacija i Web servisa,
kontrola pristupa kojom se upravlja funkcionalnošću Web servisa koju aplikacije smiju koristiti
kontrola valjanosti podataka koji se prenose
osigurana enkripcija podataka putem dokazanih standarda (SSL, PKI...)
Sigurnost koja će biti primijenjena uvelike ovisi i o namjeni Web servisa i podacima koji će se
prenositi. Nije svejedno prenose li se podaci o trenutnoj vremenskoj prognozi ili podaci o bankovnoj
transakciji. Sigurnost nadalje ovisi o tome da li je Web servis javno dostupan za korištenje ili nije. Nije
svejedno da li je Web servis dostupan na korištenje bez posebnih ograničenja ili je namijenjen samo
ograničenom krugu korisnika.
Važan faktor je odabir Web servisa iz pouzdanog izvora tj. tvrtke. Sigurno nije svejedno odabrati
vlasnika Web servisa koji postoji na tržištu dugi niz godina i za kojeg se zna da ima razvijene
sigurnosne mjere, u odnosu na vlasnika Web servisa koji postoji tek nekoliko dana.
Sigurnost Web servisa se u velikoj mjeri oslanja na postojeće sigurnosne standarde koji se već koriste
i koji su dokazani u računalnim sustavima, npr. digitalni certifikat, digitalni potpis itd. Ipak nije
dovoljno osloniti se samo na postojeće sigurnosne mjere kao što je firewall nego sigurnost Web
servisa treba rješavati odvojeno.
Pitanje sigurnosti daleko nadilazi sadržaj ovog rada.
1.6 Organizacije i standardi
26
Web servisi nisu tehnologija u vlasništvu neke kompanije. Tehnologija Web servisa se temelji
na nizu otvorenih standarda koje razvijaju različite organizacije. Te organizacije svojim radom
okupljaju velik broj stručnjaka iz kompanija koje su posebno zainteresirane za Web tehnologije.
Vjerojatno najistaknutija organizacija je World Wide Web consortium ili kraće
W3C. W3C je meñunarodni konzorcij koji se bavi isključivo razvojem Web
standarda. W3C je 1994. godine osnovao Tim Berners Lee koji je ujedno i
kreator Weba kakvog poznamo danas. Od svog osnivanja do danas W3C je izdao
preko 90 standarda u obliku W3C prijedloga (eng. W3C recommendation).
W3C trenutno ima preko 400 članova meñu kojima su i najveće IT kompanije npr. AT&T, HP, IBM,
Microsoft, Google, Intel, Deutsche Telecom, Sun, Yahoo, te brojna sveučilišta. Slijedi popis nekih od
važnijih standarda vezanih za Web servise koje je izdao W3C.
•
•
•
•
•
•
•
•
SOAP Version 1.2 Part 0: Primer
SOAP Version 1.2 Part 1: Messaging Framework
SOAP Version 1.2 Part 2: Adjuncts
SOAP Message Transmission Optimization Mechanism
Web Services Addressing 1.0 - Core
Web Services Addressing 1.0 - SOAP Binding
Web Services Architecture
Web Services Description Language (WSDL) Version 2.0 Part 0: Primer
OASIS je takoñer meñunarodni konzorcij koji se primarno bavi
razvoje e-bussines standarda. U okviru toga u velikoj mjeri se
bavi i tehnologijom Web servisa te takoñer nudi veliki broj
standarda koji su primarno orijentirani na bussines okruženja.
U nastavku slijedi popis nekih od važnijih standarda koje izdaje OASIS.
•
•
•
•
•
•
•
•
•
•
•
Universal Description, Discovery and Integration (UDDI) v3.0.2
Universal Business Language (UBL) v1.0
Universal Business Language Naming & Design Rules v1.0 (UBL NDR)
WS-Reliability (WS-R) v1.1
Web Services Resource Framework (WSRF) v1.2
Web Services for Remote Portlets (WSRP) v1.0
Web Services Security v1.0 (WS-Security 2004)
Web Services Security v1.1
Web Services Security SAML Token Profile v 1.0 and REL Token Profile v1.0
WSDM Management Using Web Services v1.0 (WSDM-MUWS)
WSDM Management Using Web Services v1.0 (WSDM-MOWS)
Slijedi prikaz aktualnih standarda vezanih za Web servise uz njihova važna svojstva.
27
Standard ili specifikacija
Kategorija
Svrha
Održava
Izvorna
godina
Izvorni
sponzori
Osnovni standardi
XML 1.0
Podaci
Opis i pohrana
podataka
W3C
1998
Izveden iz
jezika SGML
SOAP 1.2
Poruke
Razmjena poruka
W3C
2000
IBM i
Microsoft
Opisi
Opis Web servisa
W3C
2000
IBM,
Microsoft, i
Ariba
Oglašavanje i
objavljivanje
Objavljivanje Web OASIS
servisa
2000
IBM,
Microsoft, i
Ariba
Arhitektura
Arhitektura za opis W3C
glavnih
komponenti i
meñusobnih
odnosa
2002
Software AG,
IBM, Iona, i
BEA
WSDL 2.0
UDDI 3.0.2
Web Services
Architecture
Komunikacija i poruke
Poruke
Garantira
—
pouzdanu dostavu
HTTP paketa (koji
mogu sadržavati
SOAP poruke)
izmeñu klijenta i
servera.
2001
IBM
Poruke
Dodatak na SOAP IETF
koji omogućava
slanje binarnih
sadržaja bez
pretvaranja u XML
2002
IBM i
Microsoft
Reliable HTTP
(HTTPR)
Web Services
Attachments
Sigurnost
XML Signature
Syntax and
Processing
XML Key
Management
Specification
(XKMS)
Sigurnost
XML-bazirani
digitalni potpisi
W3C
2001
Motorola,
Citigroup, i
W3C
Sigurnost
XML-orijentiran
W3C
plan za integraciju
PKI tehnologije u
Internet
2001
VeriSign,
Microsoft, i
WebMethods
Sigurnost
Dodatak na SOAP
za očuvanje
integriteta,
povjerljivosti i
autentikacije
—
2002
Microsoft,
IBM, i
VeriSign
OASIS
2002
IBM,
Epicentric, i
Web Services
Security (WSSecurity)
Korisničko sučelje
Web Services
Korisničko
sučelje
Standardni skup
sučelja za PnP
28
Standard ili specifikacija
Kategorija
Održava
Izvorna
godina
integraciju Web
servisa u portale ili
interaktivne
aplikacije.
for Remote
Portlets (WSRP)
and
Web Services
for Interactive
Applications
(WSIA)
Web Services
Experience
Language (WSXL)
Svrha
Korisničko
sučelje
Model za
—
komercijalnu
distribuciju
interaktivnih Web
servisa i
sintetiziranje novih
Web servisa.
Izvorni
sponzori
WebCollage
2001
IBM
1.7 Korak dalje
Ipak nije sve tako jednostavno kao što se čini. Nije dovoljno napisati softver i objaviti Web
servis. Stvari postaju složenije kad se na Webu nañe veliki broj Web servisa koji nude najrazličitije
29
funkcionalnosti i ne razlikuju se samo po složenosti nego i po važnosti, razini potrebne sigurnosti itd.
Pitanja vezana za Web servise treba gledati organizirano po nekakvim smislenim područjima.
Jedno od tih područja pokriva sam proces kreiranja Web servisa i obuhvaća alate dostupne na tržištu
za izgradnju i razvoj Web servisa. Za razvoj Web servisa postoje vrlo snažni alati od kompanija koje su
ujedno i najistaknutije na području razvoja standarda Web servisa, npr. Microsoft Visual Studio .NET,
IBM Web Services ToolKit, Sun JavaEE itd.
Kada se na Webu nañe dostupan veliki broj Web servisa ili se na neki način želi sustavno nadzirati rad
Web servisa govori se o području upravljanja Web servisima (eng. Web services managment). Web
servi se može općenito nalaziti u dva stanja: aktivnom (dostupnom) i neaktivnom (nedostupnom).
Izmeñu ta dva stanja Web servis prelazi aktivacijom odnosno deaktivacijom. Što znači da je Web
servis aktivan (neaktivan). Znači da Web servis može (ne može) prihvaćati zahtjeve svojih korisnika.
Osim glavnih stanja dostupnosti i nedostupnosti, postoje i podstanja. Za vrijeme dok je dostupan,
Web servis može biti zauzet (eng. busy) ili u stanju pripravnosti (eng. idle). Za vrijeme dok je
nedostupan Web servis može biti zaustavljen (npr. administracijski razlozi), zasićen (zbog prevelikog
broja zahtjeva) i u stanju greške (zbog interne pogreške sustava i sl.). Osim upravljanja postoje još i
područje pružanja podrške Web servisima, integracija, posredovanje Web servisima itd.
Prije kreiranja Web servisa i bilo kakvih konkretnih odluka pružatelj tj. vlasnik Web servisa
mora voditi računa o različitim faktorima koji su navedeni u nastavku:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
odreñivanje cijena i pravila licenciranja korisnika Web servisa
garancija dostupnosti, performansi i skalabilnosti Web servisa
pravila održavanja koja odreñuju što se dešava u slučaju problema bilo kojeg tipa
zaštita od odgovornosti u slučaju manipulacije, prijevare i neovlaštenog korištenja podataka
od strane korisnika Web servisa
mehanizmi testiranja
odabir platforme
garancije i pravila privatnosti
sigurnosne mjere
balansiranje opterećenja
scenariji oporavka u slučaju razrušenja sustava
rješenja za pitanja intelektualnog vlasništva
pitanje oglašavanja, da li vlasnik Web servisa može reći tko koristi njegov Web servis
upravljanje Web servisom što uključuje upravljanje problemima, performansama i mrežom
nadziranje korištenja Web servisa
Arhitektura zasnovana na servisima - Service Oriented Architecture SOA
Servis, odnosno Web servis je osnovni element SOA arhitekture. Po OASIS definiciji SOA je
način organiziranja i korištenja raspodijeljenih funkcionalnosti koje mogu biti pod nadzorom različitih
vlasnika. SOA nudi jedinstveni način za ponudu, otkrivanje, komunikaciju i korištenje funkcionalnosti
za ostvarenje željenih ciljeva.
Ono što se promatra u SOA arhitekturi je jedino funkcionalnost tj. usluga koju servis pruža. Detalji
implementacije nisu važni. Bitni principi razvoja, održavanja i korištenja SOA sustava su identifikacija i
kategorizacija servisa, nadziranje i upravljanje servisima, isporuka servisa, modularnost, usklañenost
sa standardima itd.
30
Slika 1.27: Servis kao osnovna grañevna jedinka SOA arhitekture
Ako se stvari gledaju na razini servisa tj. funkcionalnosti koju oni pružaju omogućeno je da se
poslovni procesi modeliraju mnogo jednostavnije tj. isključivo pomoću usluga i neovisno o nižim
detaljima. Nije potrebno misliti o tehničkim detaljima, kompatibilnosti, komunikaciji itd već je dovoljno
„slagati“ blokove prema njihovoj funkcionalnosti, a sve ovisno o tome kakva se aplikacija gradi. Treba
naglasiti da servis kao osnovni grañevni element SOA arhitekture ne podrazumijeva Web servis. Web
servisi su samo jedan način implementacije servisa tj. usluga.
31
2. Razvoj Web servisa u .NET okruženju
2.1 Što je .NET ?
Razvojem Interneta i internetskih tehnologija došlo je i do razvoja softvera temeljenog na
komponentama. Softverske komponente su, jednostavno rečeno, elementi softverskog sustava
izgrañeni u skladu s odreñenim specifikacijama, koji nude odreñenu uslugu softverskom sustavu i
mogu komunicirati s drugim komponentama u softverskom sustavu. Objekti su jedan oblik softverskih
komponenti.
Razvoj Interneta je potisnuo funkciju računala kao stroja koji radi sam za sebe i nametnuo novu
funkciju računala, a to je računalo kao dio mreže tj. većeg raspodijeljenog sustava velikog broja
umreženih računala. Računalo je dakle postalo dio veće mreže i time dobilo mogućnost komunikacije s
drugim računalima u mreži. Na isti način je i softver koji se nalazi na odreñenom računalu postao dio
mreže, a obzirom da softver čine komponente, i one su postale dio mreže.
Internet je na taj način unio dvije nove i osnovne funkcije softvera tj. softverskih komponenti. S jedne
strane softver na jednom računalu je dobio mogućnost koristiti komponente na nekom drugom
računalu u mreži, dok je s druge strane softverska komponenta na nekom računalu pružala
mogućnost da ju se iskoristi kao element nekog softverskog sustava. Stoga je pod sve većim
utjecajem Interneta i programiranje temeljeno na komponentama počelo koristiti udaljene (eng.
remote) tj. nelokalne softverske komponente.
Kako bi se iskoristila mogućnost korištenja udaljenih komponenti u softverskim sustavima razvijen je
velik broj različitih komunikacijskih modela. Dva možda najpoznatija su Microsoftov DCOM
(Distributed Component Object Model) i OMGova CORBA (Common Object Request Broker
Architecture). Problem tih i drugih komunikacijskih modela je u specifičnim i različitim načinima na
kojima oni ostvaruju komunikaciju putem Interneta. To se konkretno odnosi na mrežne protokole i
mrežne portove koje DCOM i CORBA koriste u svojem radu. DCOM se zasniva na korištenju RPC
tehnologije, dok CORBA koristi protokol IIOP. Oba protokola koriste različite mrežne portove što je
jedan od glavnih nedostataka. Obzirom na stanje sigurnosti na Internetu praktično svaki računalni
sustav koji pristupa Internetu ima vlastite zaštite kojima onemogućava svaku komunikaciju putem
nestandardnih mrežnih portova što obuhvaća i portove koje koriste različiti komunikacijski modeli, a
meñu njima DCOM i CORBA.
Dakle jedan od glavnih problema razvoja softvera u raspodijeljenom okruženju je upravo velik broj
različitih komunikacijskih modela i njihova nekompatibilnost. Tom problemu se pridružuje dobro
poznati problem nekompatibilnosti platformi (Windows, Unix...) i nekompatibilnosti programskih
jezika. Cijelu priču dodatno pogoršava činjenica da sve snažnijim razvojem Interneta aplikacije teže
„životu na mreži“ za razliku od starog modela aplikacije koja se izvršava na samostalnom računalu
odvojena od ostatka svijeta.
.NET je Microsoftova strategija koja pokušava dati odgovor na te probleme. Web servisi su
ključan element te strategije jer upravo oni daju odgovor na sve gore navedene probleme. Treba
naglasiti da Web servisi nisu vlasništvo ili patent Microsofta. Web servisi su otvorena tehnologija koja
je upravo zbog svojih dobrih svojstava dobila ključnu ulogu u .NET strategiji.
Iz prethodnog poglavlja bi trebalo biti sasvim jasno zbog čega Web servisi daju odgovor na navedene
probleme. Web servisi se u svojem radu u potpunosti oslanjaju na komunikaciju putem mrežnog
protokola HTTP koji za svoj rad koristi standardni port 80. Port 80 je standardni WWW port te stoga
nije onemogućen zaštitama računalnih sustava. Kao što Web stranice prolaze kroz zaštite i dolaze do
korisnikovog preglednika koristeći protokol HTTP, tako i Web servisi putem protokola HTTP
komuniciraju sa svojim korisnicima tj. aplikacijama koje ih koriste.
U prvom poglavlju je objašnjeno kako jedan HTTP paket sadrži jednu SOAP poruku koja pak sadržava
podatke koje razmjenjuju Web servis i korisnička aplikacija. Ti podaci kao i sama SOAP poruka su u
32
XML obliku što je zapravo obični tekst. Obzirom na univerzalnost XML-a pokazano je kako na taj način
Web servisi rješavaju i problem platformske i jezične nekompatibilnosti. Zbog značaja XML-a često se
pojavljuje naziv XML Web servisi.
.NET se stoga u potpunosti oslanja na razvoj aplikacija koje „žive na mreži“, koje pritom koriste usluge
drugih aplikacija na mreži, a ujedno i same pružaju mogućnost da budu iskorištene od nekih drugih
aplikacija na mreži, tj. pružaju svoju uslugu. U svemu tome Web servisi su ključna tehnologija jer je
upravo Web servis rješenje kojim će .NET aplikacija ponuditi svoju funkcionalnost drugoj aplikaciji.
Obzirom da se u potpunosti oslanja na Web servise, to znači da se .NET zapravo oslanja na korištenje
protokola HTTP tj. jezika XML za komunikaciju što mu daje velike mogućnosti u pogledu komunikacije
s različitim platformama i jezicima.
Zaviri li se u budućnost, moguće je svaku aplikaciju promatrati kao komadić funkcionalnosti tj. uslugu
na Webu koja se pruža na korištenje drugim aplikacijama. Na taj način Web postaje platforma za
razvoj aplikacija baziranih na uslugama. Danas još uvijek aplikacije koriste usluge operacijskog
sustava nad kojim se izvršavaju, no logično je za očekivati da će u budućnosti aplikacije biti u
potpunosti orijentirane prema Webu i koristiti usluge dostupne na Webu. Web na taj način postaje
platforma za pružanje usluga. Na tom putu leži SOA (Service Oriented Architecture) o kojoj je bilo
govora u prvom poglavlju i koja nadilazi sadržaj ovog rada.
Jedna od bitnih karakteristika .NET-a je potpuna transparentnost komunikacije izmeñu aplikacija
meñusobno udaljenih na mreži. To znači da .NET skriva sve detalje oko toga kako se ustvari odvija
komunikacija izmeñu Web servisa i aplikacije koja ga koristi. To omogućava vrlo lagan i brz razvoj
aplikacija temeljenih na Web servisima jer se prilikom razvoja aplikacije udaljeni Web servis koristi
jednako kao i usluga koja se nalazi na lokalnom računalu !
.NET Web servis može koristiti aplikacija s bilo koje druge platforme. Isto tako .NET aplikacija može
koristiti Web servis koji se nalazi na bilo kojoj platformi. Specifičnost .NET strategije je to da je za
izvoñenje .NET Web servisa i aplikacija potreban isključivo Windows operacijski sustav.
Slika 2.1: Microsoft .NET na Webu
Treba naglasiti da je „.NET“ samo strategija. Da bi se na računalu (Windows) omogućilo izvoñenje i
razvoj .NET aplikacija potrebno je instalirati softversku platformu koja omogućava upravo to, a ta
platforma se naziva .NET Framework i trenutno je u verziji 2.0. O samom .NET Frameworku će više
govora biti malo kasnije.
33
.NET strategija se može promatrati kroz nekoliko razina proizvoda i usluga koje pruža Microsoft.
.NET razvojni alati i jezici
Glavni, a ujedno i najnapredniji .NET razvojni alat je Microsoft Visual Studio .NET koji se
trenutno nalazi u verziji 2005. Osim velike podrške profesionalnom razvoju .NET aplikacija važno
svojstvo Visual Studia .NET je da omogućava izuzetno jednostavan, a time i brz razvoj .NET aplikacija
čak i programeru početniku. Ipak za razvoj .NET aplikacija nije potreban isključivo Visual Studio .NET
jer postoji i besplatna varijanta koja takoñer omogućava razvoj .NET aplikacija, a koja dolazi u obliku
.NET Framework SDK (Software Development Kit) paketa. Razumljivo je da je i u slučaju Visual Studia
.NET ili .NET Framework SDK paketa osnovna stvar već spomenuti .NET Framework koji je prvi i
osnovni preduvjet za razvoj i izvoñenje .NET aplikacija.
.NET tj. .NET Framework omogućava razvoj aplikacija u velikom broju različitih programskih
jezika. Neki od tih jezika su Visual C# .NET, Visual Basic .NET, Visual C++ .NET itd. Neki od skriptnih
jezika su VBScript, JScript .NET itd.
.NET serveri
.NET serveri meñu ostalim pružaju potpunu podršku za udomljavanje (hosting) Web servisa i
zapravo postaju izlazna točka .NET Web servisa prema korisnicima na Webu.
Microsoftovi Web servisi
Osim što svojim alatima pruža podršku razvoju Web servisa, Microsoft i sam razvija vlastite
Web servise koji se mogu koristiti u novim aplikacijama. Neki od tih Web servisa su:
MSN Search koji omogućava aplikacijama da pretražuju Internet korištenjem MSN Search pretraživača,
MetaWeblogApi i MSN Space koji omogućavaju ureñivanje i objavljivanje blogova, Virtual Earth Map i
TerraService koji pružaju usluge kartografskih servisa, itd.
Smart ureñaji
Što su uopće smart ureñaji? To su desktop računala, notebook računala, dlanovna računala,
Tablet računala, mobilni telefoni i drugi mobilni ureñaji, ugrañeni (eng. embedded) ureñaji itd. Zovu
se smart ureñajima jer imaju sposobnost pristupati i koristiti informacije i usluge na mreži neovisno o
tome gdje se korisnik nalazi i kakav ureñaj ima. Usluge koje koriste smart ureñaji su upravo Web
servisi i ideja smart ureñaja će u potpunosti biti ostvarena tek u budućnosti kada Web postane
platforma puna usluga (Web servisa) te kada ugrañeni (eng. embedded) smart ureñaji u potpunosti
uñu u svakodnevni život. Potpuna integracija smart ureñaja zapravo znači da je npr. svaki kućanski
aparat, računalo, PDA, mobitel, igraća konzola itd., ustvari jedan smart ureñaj koji je umrežen s
drugim smart ureñajima i koji pristupa Webu i pritom koristi dostupne usluge. Mogućnosti primjene
smart ureñaja su zaista beskonačne i kao što je spomenuto ranije za Web servise, jedini problem je
osmisliti dovoljno inovativno rješenje.
Za podršku smart ureñajima Microsoft razvija specijalne ugrañene (eng. embedded)
operacijske sustave. Windows Embedded familija proizvoda se trenutno sastoji od dva glavna sustava:
Windows CE koji je trenutno u verziji 5.0, te Windows XP Embedded.
Windows CE ponajprije služi na uporabu na PDA, medicinskim i industrijskim ureñajima te
potrošačkoj elektronici kao što su CD playeri, digitalne kamere, DVD playeri itd.
Windows XP Embedded služi ponajprije za uporabu na POS (Point of Service) terminalima,
thin client ureñajima (računala koja najveći dio procesiranja obavljaju na središnjem poslužitelju,
najčešće bez tvrdog diska) te naprednim STB (Set-Top Box) ureñajima (ureñaji koji omogućavaju da
standardni TV ureñaj postane sučelje prema Internetu, te da prima i dekodira digitalne DTV signale).
34
Ranije je spomenuto kako je .NET strategija te da je prvi i osnovni preduvjet za razvoj ili
izvoñenje .NET aplikacija upravo .NET Framework. Može se reći da je .NET Framework temeljni
„vidljivi“ dio .NET strategije. U nastavku će se ukratko opisati .NET Framework, njegovi glavni dijelovi i
glavne funkcije.
Glavni dijelovi .NET Frameworka su:
1.) .NET Framework Common Language Runtime – CLR
2.) .NET Framework Base Class Library – BCL
CLR – Common Language Runtime
CLR se potpuno opravdano može nazvati srcem .NET Frameworka. CLR je run-time okruženje
za izvoñenje .NET aplikacija i ostvaruje njihovu vezu s operacijskim sustavom. Prevoñenje .NET kôda
se vrši u dva koraka. U prvom koraku se izvorni kôd prevodi u prenosivi CIL (Common Intermediate
Language) oblik. U drugom koraku CLR prevodi kôd u CIL-u u strojni jezik računala na kojem se
nalazi. Prevoñenje CIL-a u strojni kod računala naziva se JIT (Just In Time) prevoñenje. .NET
omogućava programiranje u bilo kojem jeziku uz preduvjet da za taj jezik postoji prevodioc (eng.
compiler) koji radi na temelju CLS (Common Language Specification) specifikacije. Takav prevodioc
prevodi izvorni kôd u CIL oblik kojeg dalje preuzima CLR. Danas postoji .NET podrška za velik broj
programskih jezika.
Treba spomenuti i ostale važne funkcije CLR-a kao što su: provjera sigurnosti, čišćenje smeća
(eng. garbage collection), pružanje zajedničkih tipova podataka svih .NET jezicima, obrada iznimki
(eng. exception handling) itd.
BCL – Base Class Library
BCL je biblioteka razreda (eng. class) dostupnih u sklopu .NET Frameworka. Biblioteka se
sastoji od vrlo velikog broja razreda koji u potpunosti stoje na raspolaganju programeru. Razredi su
grupirani u prostore imena (eng. namespace) i omogućavaju pristup i upravljanje svim bitnim
dijelovima računalnog sustava. Postoje prostori imena za upravljanje podacima, upravljanje
datotekama, izgradnju korisničkih sučelja, višedretveno programiranje, sigurnost, XML/SOAP
programiranje itd. Razredi za upravljanje podacima grupiraju se u ADO.NET skupinu. Razredi za razvoj
Web aplikacija grupiraju se u ASP.NET skupinu.
Slika 2.2: Microsoft.NET Framework
Slika 2.3: Prevoñenje .NET kôda
Više detalja o .NET Frameworku može se pronaći na http://msdn.microsoft.com/netframework/
35
2.2 Softverski preduvjeti
Opis softvera potrebnog za razvoj i pokretanje Web servisa:
1.)
IIS – Internet Information Services (trenutno u verziji 6.0)
Microsoftov Web server koji u interakciji s ASP.NET procesom na računalu omogućava razvoj,
izvršavanje i posluživanje Web servisa. IIS je potrebno instalirati na računalu čak i ako to
računalo služi samo za razvoj Web servisa, a ne i njihovo udomljavanje (hosting) ! Takoñer
IIS je zbog uočenih problema potrebno instalirati prije .NET Frameworka ! Potrebno je
provjeriti da li je IIS instaliran na računalu, te ako nije instalirati ga. IIS se instalira kao
Windows komponenta na sljedeći način:
Start / Control Panel / Add or Remove Programs / Add Remove Windows Components
2.)
.NET Framework (trenutno u verziji 2.0, 3.0 beta)
Temeljni preduvjet za razvoj i izvršavanje bilo koje .NET aplikacije. .NET Framework moguće
je preuzeti s Microsoftovog Web sjedišta. http://msdn.microsoft.com/netframework/
3.)
Visual Studio .NET (trenutno u verziji 2005)
Microsoftovo vizualno razvojno okruženje za razvoj .NET aplikacija. VS.NET je dostupan
studentima u sklopu MSDNAA (MSDN Academic Aliance) programa. Prije instalacije VS.NET
potrebno je sa računala deinstalirati sve eventualno instalirane beta verzije Visual Studia .NET,
.NET Frameworka ili Microsoft SQL Servera.
Virtualni direktoriji
Virtualni direktorij je običan fizički direktorij na disku računala, no ono što ga čini virtualnim je
mogućnost da mu se pristupa putem Weba tj. URL adrese. Npr. fizička adresa nekog direktorija može
biti C:\webservisi\mojservis\, dok virtualna adresa (URL) tog istog direktorija može glasiti
http://NazivRačunalaNaMreži/mojservis/ . U oba slučaja pristupa se istom direktoriju, dakle istim
datotekama, no fizička adresa se koristi kod pristupanja direktoriju s lokalnog računala na kojem se on
nalazi, dok se URL adresa koristi kod pristupanja tom direktoriju putem Weba. Dakle taj virtualni
direktorij je dostupan na Webu.
Zbog toga je logično upravo u takav direktorij smjestiti Web servis tj. datoteke koje čine Web
servis. Detalji o datotekama koje čine Web servis ovdje nisu bitni i o njima će više govora biti malo
kasnije.
No nije svaki fizički direktorij na računalu ujedno i virtualni direktorij. To jest da bi se neki
fizički direktorij učinilo dostupnim na Webu potrebno je učiniti ga virtualnim. To je zadatak IIS-a.
Virtualni direktorij stvara se tako da se prvo kreira fizički direktorij negdje na disku računala.
Zatim se pokrene IIS (Control panel / Administrative tools) te se odabere Local computer / Web sites.
Nakog toga se desnim klikom na Default Web site otvara izbornik u kojem se odabire opcija New /
Virtual Directory. Nakon toga slijedi niz prozora u kojem se odabire alias za fizički direktorij u njegovoj
URL adresi te dozvole pristupa. U svrhu primjera koji slijedi u nastavku otvoren je fizički direktorij
E:\FER\WebServis, zadan mu je alias WebServis što znači da je URL tog direktorija
http://localhost/WebServis .
Tijekom instalacije Visual Studio .NET paketa može doći do poteškoća ukoliko nije instaliran IIS ili iz
nekog drugog sličnog razloga. Takve probleme može se pokušati riješiti na sljedeći način: Start / Run ,
te pokretanjem naredbe (za .NET Framework 2.0) :
C:\WINDOWS\microsoft.net\framework\v2.0.50727\aspnet_regiis
Ovisno o verziji .NET Frameworka staza se može razlikovati te o tome treba voditi računa.
Sve probleme kod kojih postoji neka vrsta poruke o pogrešci, koju dojavljuje neki od alata, može se
pokušati riješiti na način da se tekst poruke o pogrešci (ili njegov opći dio) kopira u neki od
pretraživača (npr. http://www.google.com) ili u http://support.microsoft.com/search .
36
2.3 Visual Studio .NET - izgradnja i korištenje Web servisa
U ovom poglavlju obrañena je izgradnja i korištenje Web servisa primjenom razvojne okoline
Visual Studio 2005. Pretpostavlja se instalirani IIS, .NET Framework te Visual Studio 2005. Takoñer se
pretpostavlja poznavanje osnova programskog jezika C# (klase, metode, atributi, prostori imena,
code-behind...). Prije početka izrade Web servisa preporučljivo je kreirati virtualni direktorij za
smještaj datoteka Web servisa.
2.3.1 Izgradnja Web servisa
Pokretanje novog projekta – stvaranje novog Web servisa
Nakon pokretanja Visual Studio .NET okruženja, odabiru se naredbe File / New / Web site ,
te se dobiva prozor za odabir vrste Web projekta u kojem se odabire ASP.NET Web service, željeni
programski jezik (u ovom slučaju C#) te pripremljeni virtualni direktorij na računalu.
U prikazanom slučaju odabran je pristup putem URL-a željenom direktoriju te je odabran virtualni
direktorij o kojem je bilo govora u prethodnom poglavlju. Nakon pritiska na OK, Visual Studio u
odabranom virtualnom direktoriju stvara datoteke koje čine Web servis.
37
Sadržaj virtualnog direktorija i glavne datoteke
Sadržaj virtualnog direktorija može se jednostavno vidjeti iz Solution explorera na radnoj površini.
Na slici je vidljivo da je kreiran novi Visual Studio Solution te unutar njega novi Project te da je naziv
tog Projecta upravo URL našeg virtualnog direktorija. Tim URL-om se virtualnom direktoriju može
pristupiti i iz Web preglednika.
Datoteke Service.asmx i Service.cs su glavne datoteke Web servisa. Service.asmx datoteka je
datoteka
kojom
će
se
pozivati
Web
servis
tj.
URL
Web
servisa
će
biti
http://localhost/WebServis/Service.asmx . Ona sadrži informaciju o programskom jeziku u kojem je
pisan Web servis, o lokaciji te nazivu klase Web servisa. .asmx je ekstenzija specifična isključivo za
.NET Web servise.
Service.cs datoteka sadrži programski kôd Web servisa. Naziv .cs datoteke u načelu odgovara nazivu
klase Web servisa stoga je Service naziv klase Web servisa.
Obzirom da je Visual Studio automatski kreirao datoteke Service.asmx i Service.cs znači da je
primijenjen code-behind način organizacije programskog kôda pri kojemu se „čisti“ C# programski kôd
pohranjuje u datoteke s ekstenzijom .cs, dok se ostale informacije o Web servisu pohranjuju u
datoteku s ekstenzijom .asmx. Kada se ne primjenjuje code-behind organizacija programskog kôda,
onda se specijalne informacije o Web servisu pohranjuju zajedno s programskim kôdom Web servisa u
.asmx datoteku.
Nazive .asmx i .cs datoteka moguće je prilagoditi vlastitim željama. U tu svrhu se pomoću Solution
explorera mogu preimenovati datoteke Service.asmx i Service.cs u HotelskiServis.asmx i
HotelskiServis.cs. Takoñer je potrebno u datoteci HotelskiServis.asmx učiniti potrebne preinake
obzirom. Nakon prilagodbi situaciju u Solution exploreru te .asmx datoteci izgleda kao na slikama.
38
Primjer Web servisa
U datoteci HotelskiServis.cs nalazi se početni C# kôd koji je automatski generirao Visual Studio nakon
kreiranja novog projekta. Umjesto tog kôda ovdje će se analizirati sadržaj datoteke HotelskiServis.cs
na primjeru jednog jednostavnog Web servisa. Funkcionalnost tog servisa je bazirana na primjeru
hotelskog lanca iz prvog poglavlja.
using System;
using System.Web;
using System.Web.Services;
[WebService(Name = "Web servis hotelskog lanca",
Namespace = "http://HoteliAvalon")]
public class HotelskiServis : WebService
{
public
public
public
public
int
int
int
int
SlobodneJednokrevetne = 13;
SlobodneDvokrevetne = 17;
SlobodneTrokrevetne = 10;
OsnovnaCijena = 145;
[WebMethod]
public int BrojSlobodnihSoba(int BrojKreveta) {
if (BrojKreveta==1) return this.SlobodneJednokrevetne;
if (BrojKreveta==2) return this.SlobodneDvokrevetne;
if (BrojKreveta==3) return this.SlobodneTrokrevetne;
return -1;
}
[WebMethod]
public int CijenaSobe(int BrojKreveta, int BrojDanaBoravka)
{
return BrojKreveta * BrojDanaBoravka * this.OsnovnaCijena;
}
}
Uočljivo je da je definirana klasa Web servisa naziva HotelskiServis, te da ona sadrži dvije članske
metode (BrojSlobodnihSoba i CijenaSobe) te četiri varijable. Programski kôd se u najvećem
dijelu ne razlikuje od programskog kôda bilo koje .NET aplikacije, stoga će u nastaviti biti detaljnije
opisani upravo oni dijelovi koji su su specifični upravo za Web servise.
Možda najvažnija specifičnost kôda Web servisa u odnosu na kôd drugih .NET aplikacija je korištenje
WebMethod atributa. Dodavanjem tog atributa pojedinoj metodi, ta metoda postaje Web metoda tj.
metoda dostupna na Webu. U prvom poglavlju je spomenut pojam javno dostupnih metoda koje se
mogu pozivati od strane korisničkih aplikacija i Web metode su upravo te javno dostupne metode.
Pojednostavljeno rečeno: ukoliko želimo neku metodu dati na korištenje korisničkim aplikacijama tada
ćemo joj dodijeliti WebMethod atribut. Metode koje nemaju WebMethod atribut nisu Web metode.
WebMethod atribut meñu ostalim omogućava da se za svaku Web metodu definira njezino ime i opis.
[WebMethod (MessageName ="IzračunCijene",
Description="Metoda za izračun cijene")]
Sljedeća specifičnost je WebService atribut koji se dodjeljuje klasi Web servisa. Taj atribut nije
obavezan no vrlo je koristan te se njegovo korištenje svakako preporuča. Web service atribut
omogućava da se za Web servis definira: naziv, opis i XML namespace (prostor imena) Web servisa.
XML namespace ne treba miješati sa .NET namespaceom. Koncept XML namespacea je objašnjen u
poglavlju 1.2.2. Defaultni XML namespace za Web servise je http://tempuri.org i potrebno ga je
obavezno promijeniti prije objavljivanja Web servisa na Web. XML namespace ovog Web servisa je
http://HoteliAvalon .
39
Posljednja specifičnost koju je potrebno spomenuti je da klasa HotelskiLanac naslijeñuje klasu
WebService. To nasljeñivanje nije obavezno no donosi mogućnost korištenja objekata kao što su:
Session, Application, User itd. koji su inače specifični za Web aplikacije.
Funkcionalnost razreda je izuzetno pojednostavljena i u realnoj situaciji bi programska logika za
dohvaćanje slobodnih soba i izračuna cijene boravka bila znatno složenija. Prethodni primjer Web
servisa je na sljedećoj slici stavljen u realnu situaciju na Webu. Posebno je naglašen odnos izmeñu
Web metoda i lokalnih metoda (njih nema u primjeru) koje nema WebMethod atribut.
Slika 2.4: Web metode Web servisa hotelskog lanca
Može se sa sigurnošću reći da Web metode predstavljaju smisao Web servisa jer je smisao
Web servisa u funkcionalnosti dostupnoj sa Weba. Web metode su dostupne s Weba jer ih mogu
pozivati korisničke aplikacije. S druge strane metode nisu ništa drugo nego funkcije što jasno indicira
funkcionalnost. Cijelo „čudo“ Web servisa je upravo u toj povezanosti Weba sa komadićima
funkcionalnosti, a to ostvaruju Web metode.
Ono što daje poseban značaj cijeloj priči oko komadića funkcionalnosti dostupnih s Weba
je činjenica da ta funkcionalnost može biti bilo što ako se može opisati programskim
jezikom ! Jedini problem je biti dovoljno inovativan !
Slika 2.5: Web metode kao komadići funkcionalnosti dostupni na Webu
40
Prevoñenje i testiranje Web servisa
Prevoñenje Web servisa vrši se odabirom naredbi Build / Build Web Site. Nakon prevoñenja,
projekt se može „pokrenuti“ odabirom naredbi Debug / Start Debugging. Nakon što se prvi puta
odaberu navedene naredbe prikazat će se sljedeći prozor.
Web.config je konfiguracijska datoteka ASP.NET aplikacija koju Visual Studio 2005 ne stvara
automatski za razliku od svog prethodnika. Obzirom da je korisno tijekom razvoja aplikacije imati
mogućnost debugiranja odabire se prva opcija nakon čega se u virtualnom direktoriju stvara
web.config datoteka s odgovarajućim postavkama.
Web.config je XML datoteka koja pruža
snažne konfiguracijske mogućnosti ASP.NET
aplikacijama. Više govora o web.config
datoteci će biti u poglavlju o sigurnosti Web
servisa.
Osim stvaranja Web.config datoteke u Web pregledniku se otvara URL Web servisa, u ovom slučaju
http://localhost/WebServis/HotelskiServis.asmx te se dobiva automatski generirana stranica sa
popisom svih dostupnih Web metoda te osnovnim podacima o Web servisu (ukoliko su definirani
WebService atributom).
41
Ovakav prikaz Web servisa u Web pregledniku omogućava ASP.NET u svrhu jednostavnog testiranja
ispravnosti rada Web metoda. Podrazumijeva se da popis metoda sadrži samo Web metode, a to su
upravo metode koje su u ranije prikazanom kôdu označene WebMethod atributom. Klikom na neku od
tih metoda dobiva se jednostavni formular koji omogućava programeru da unosom argumenata testira
funkcioniranje metoda !
Unosom željenih vrijednosti argumenata metode i klikom na Invoke dobiva se rezultat izvoñenja
metode ! U ovom slučaju unesen je BrojKreveta = 3 te BrojDanaBoravka = 7.
Općenito postoje tri moguća načina pozivanja Web metode. Pod pozivanjem se podrazumijeva slanje
jednog HTTP paketa, koji sadrži naziv metode i argumente, Web servisu. Razlika izmeñu ta 3 načina je
upravo u sadržaju HTTP paketa.
Temeljni i najčešći način je upravo slanje SOAP poruke jer je SOAP temeljni protokol Web servisa.
Osim slanja SOAP poruke metode se mogu pozivati primjenom HTTP GET i HTTP POST metoda. Način
prikazan gore tj. način koji ASP.NET koristi za testiranje Web servisa je upravo HTTP POST. Može se
postaviti pitanje: zbog čega bismo htjeli koristiti bilo koju drugu metodu osim slanja SOAP poruke?
Zbog toga što se Web servis može koristiti u scenariju gdje je slanje SOAP poruke presloženo ili čak
neizvedivo. To se npr. dešava u situaciji kada HTML forma koristi Web servis. Ipak u najvećem broju
primjena Web servise će koristiti aplikacije tj. razmjenjivat će se SOAP poruke. U nastavku je dan
prikaz HTTP paketa te moguća primjena za svaku od navedenih metoda.
42
I) SOAP
Kao što je spomenuto, u najvećem broju slučajeva će se s Web servisom komunicirati putem SOAP
poruka. U tom slučaju korisnička aplikacija formira SOAP poruku u koju upisuje naziv metode koju želi
pozvati te argumente koje joj želi predati. Ta SOAP poruka se smješta u HTTP paket i šalje Web
servisu. Slijedi prikaz HTTP paketa koji sadrži SOAP poruku koja se šalje Web servisu.
POST /WebServis/HotelskiServis.asmx HTTP/1.1
Host: localhost
Content-Type: application/soap+xml; charset=utf-8
Content-Length:
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<CijenaSobe xmlns="http://HoteliAvalon">
<BrojKreveta>3</BrojKreveta>
<BrojDanaBoravka>6</BrojDanaBoravka>
</CijenaSobe>
</soap12:Body>
</soap12:Envelope>
Slijedi prikaz povratnog HTTP paketa koji sadrži povratnu SOAP poruku s rezultatom izvoñenja.
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length:
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<CijenaSobeResponse xmlns="http://HoteliAvalon">
<CijenaSobeResult>2610</CijenaSobeResult>
</CijenaSobeResponse>
</soap12:Body>
</soap12:Envelope>
Detaljnija analiza SOAP poruka slijedi u idučem poglavlju.
II) HTTP POST
HTTP POST metoda je mnogo jednostavnija od SOAP metode. No u toj jednostavnosti leži i veliki
nedostatak POST metode, a to je nemogućnost prenošenja složenijih tipova podataka ! To se može
ilustrirati na primjeru HTTP paketa koji se šalje Web servisu te sadrži POST zahtjev.
POST /WebServis/HotelskiServis.asmx/CijenaSobe HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length:
BrojKreveta=3&BrojDanaBoravka=6
Slijedi prikaz povratnog HTTP paketa s rezultatom izvoñenja metode.
43
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length:
<?xml version="1.0" encoding="utf-8"?>
<int xmlns="http://HoteliAvalon">2610</int>
Dakle problem kod POST metode je ograničenost na jednostavne tipove podataka koji se mogu
prenijet prikazanim načinom. Da bi se Web servisu poslalo složeniji tip podataka, potrebno je te
podatke zapisati u XML obliku (serijalizirati) što je moguće jedino SOAP porukom.
Zgodan primjer gdje se može na jednostavan način iskoristiti POST metoda je pozivanje Web servisa
iz jednostavne HTML forme, a to je upravo ono što se koristi u gore prikazanom načinu testiranja Web
servisa.
III) HTTP GET
HTTP GET metoda se bazira na slanju argumenata Web metodi u sklopu URL-a.
GET /WebServis/HotelskiServis.asmx/CijenaSobe?BrojKreveta=3&BrojDanaBoravka=6 HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length:
Dok rezultat dolazi kao kod POST metode.
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length:
<?xml version="1.0" encoding="utf-8"?>
<int xmlns="http://HoteliAvalon">2610</int>
Očito je da ove HTTP POST i HTTP GET metode testiranja (koje omogućava i ASP.NET) nisu
prikladne za složenije tipove podataka. Za testiranje rada Web servisa sa složenijim tipovima ulaznih
podataka potrebno je razviti specifičnu testnu okolinu.
Treba spomenuti da se u Web pregledniku takoñer može vidjet i WSDL opis Web servisa i to tako da
se
na
URL
Web
servisa
doda
niz
?WSDL.
Dakle
otvaranjem
URL-a
http://localhost/WebServis/HotelskiServis.asmx?WSDL u Web pregledniku se dobiva cjeloviti WSDL
dokument koji opisuje izgrañeni Web servis. Kao što je spomenuto ranije, WSDL dokumenti se
generiraju i analiziraju programski.
44
2.3.2 Korištenje Web servisa u .NET aplikacijama
Primjer korištenja Web servisa bit će prikazan na primjeru jednostavne ASP.NET Web
aplikacije koja će putem jednostavne forme pružati jednostavnu funkcionalnost u skladu s onim što
pruža već pokazani Web servis. Bitno je naglasiti da osim Web aplikacija funkcionalnost Web servisa
mogu koristiti i konzolne aplikacije te Windows aplikacije, pa čak i sami Web servisi.
Primjer jednostavne Web aplikacije
Nova Web aplikacija može se kreirati dok se nalazimo u ranije izgrañenom projektu Web servisa. Na
taj način Web aplikacija postaje dio Solutiona kao novi projekt. Za smještaj Web aplikacije kreiran je
novi fizički direktorij E:\FER\WebAplikacija koji je takoñer pretvoren u virtualni direktorij te mu se
može pristupiti preko URL-a http://localhost/WebAplikacija . Stvaranje nove Web aplikacija započinje
se odabirom naredbi File / Add / Web Site u glavnom izborniku. Nakon toga se dobiva već poznati
prozor u kojem će sada odabir biti drugačiji nego ranije kod Web servisa.
Nakon odabira OK, u Solution Exploreru se pojavljuje novi projekt.
Treba uočiti da je projekt Web servisa
„zatamnjen“ što znači da je on aktivan. To
znači da će se on prevoditi i pokretati
odabirom naredbi iz menija. Ukoliko želimo
prevoditi i pokretati Web aplikaciju moramo
projekt Web aplikacije učiniti aktivnim. To
možemo učiniti tako da desnim klikom miša na
naziv projekta, u izborniku odaberemo opciju
Set as StartUp Project ili nakon što smo
kliknuli na naziv projekta u Solution Exploreru
odaberemo naredbe WebSite / Set as StartUp
Project u glavnom izborniku.
45
Na prethodnoj slici treba uočiti da su za Web aplikaciju takoñer generirane datoteke u code-behind
principu. .aspx datoteka će sadržavati HTML kôd sučelja aplikacije, dok će .cs datoteka sadržavati C#
programski kôd Web aplikacije. Visual Studio omogućava da se .aspx datoteka pregledava u Source i
Design načinu. Odabir pojedinog prikaza vrši se gumbom na dnu razvojnog okruženja. U Source
načinu se može ureñivati HTML kôd, dok se u Design načinu može vidjeti kako to sučelje izgleda u
Web pregledniku. U nastavku je dan prikaz svih varijanti gotove jednostavne Web aplikacije
Prikaz .aspx datoteke u Design načinu – sučelje jednostavne Web aplikacije
Slijedi sadržaj .aspx datoteke u Source prikazu.
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Primjer jednostavne Web aplikacije</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Broj kreveta u sobi:<asp:TextBox ID="TextBox1" runat="server"
Width="62px"></asp:TextBox><br/>
Broj dana boravka:<asp:TextBox ID="TextBox2" runat="server"
Width="62px"></asp:TextBox><br/>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click"
Text="Dohvat slobodnih soba" Width="192px"/><br/>
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click"
Text="Izračun cijene boravka"/><br/>
<asp:Label ID="Label1" runat="server"></asp:Label></div>
</form>
</body>
</html>
46
Prevoñenjem i pokretanjem Web aplikacije može se vidjeti sučelje aplikacije u Web pregledniku.
Dvostrukim klikom mišem na svaki od gumba u Design prikazu (u razvojnom okruženju), se u .cs
datoteci stvara odgovarajući Event Handler koji se izvršava pritiskom na odgovarajući gumb.
Prikaz .cs datoteke sa dodanim Event Handlerima.
using
using
using
using
using
System;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
namespace WebApp
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
protected void Button1_Click(object sender, EventArgs e)
{
//Button1 je gumb za dohvat slobodnih soba
//Ovdje je potrebno programirati funkcionalnost
//za dohvat slobodnih soba
}
protected void Button2_Click(object sender, EventArgs e)
{
//Button2je gumb za izračun cijene
//Ovdje je potrebno programirati funkcionalnost
//za izračun cijene boravka
}
}
}
Preostaje samo iskoristiti Web servis i funkcionalnost koju on pruža. Kao što je spomenuto u prvom
poglavlju, posrednik u komunikaciji izmeñu aplikacije i servisa je proxy klasa. U nastavku je
objašnjeno kako kreirati proxy klasu te kako programirati potrebnu funkcionalnost.
47
Dodavanje Web reference
Uključivanje Web servisa u .NET aplikaciju odnosno stvaranje proxy klase, vrši se dodavanjem
Web reference. Postupak dodavanja je vrlo jednostavan i svodi se na traženje Web servisa i na kraju
jednostavno korištenje proxy klase. Proxy klasa se generira automatski na temelju WSDL dokumenta
odabranog Web servisa. Postupak dodavanja Web reference počinje klikom na projekt Web aplikacije
u Solution Exploreru te odabirom naredbi Website / Add Web Reference iz glavnog menija ili
padajućeg izbornika. Slijedi prikaz prvog koraka.
Nude se više mogućnosti oko toga gdje treba tražiti Web servise no u našem slučaju se Web servis
nalazi na lokalnom računalu, kao i aplikacija iz koje smo pokrenuli ovaj postupak. Nakon odabira
opcije Web services on the local machine Visual Studio automatski pretražuje računalo za svim
dostupnim Web servisima te nakon pretrage prikazuje rezultate.
Uočljivo je da je Web servis u drugom redu odozdo upravo Web servis koji je razvijen kao primjer u
ovom radu, a naveden je i njegov URL: http://localhost/WebServis/HotelskiServis.asmx .
Odabirom tog Web servisa prikazuje se detaljan prikaz Web servisa s njegovim imenom (iz
WebService atributa), opisom, popisom Web metoda i njihovim nazivima.
48
U ovom završnom prozoru postupka uključivanja Web servisa u aplikaciju, može se odabrati naziv
Web reference. Za naziv Web reference se obično uzima naziv računala na kojem se Web servis
nalazi. U ovom slučaju to je localhost. Klikom na Add Reference referenca je dodana i pojavila se u
Solution Exploreru.
Vidi se da je automatski generiran i .wsdl opis
Web servisa te takoñer i .disco dokument koji
služi kao „link“ na Web servis. O otkrivanju Web
servisa i .disco dokumentima će biti govora
kasnije.
Web referenca, u ovom slučaju localhost,
predstavlja namespace koji sadrži proxy klasu.
To znači da se sada proxy klasa može koristiti
kao bilo koja druga klasa u aplikaciji. Naziv
proxy klase je pritom naziv koji je Web servisu
dodijeljen putem Name svojstva u WebService
atributu (bez razmaka). Proxy klasa se nadalje
instancira u objekt nad kojim se pozivaju
metode, a to su upravo Web metode Web
servisa.
Slijedi prikaz potpunog programskog kôda .cs datoteke.
using
using
using
using
using
System;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
namespace WebApp
{
public partial class _Default : System.Web.UI.Page
{
//Deklaracije varijabli
public localhost.Webservishotelskoglanca Servis;
public int Rezultat;
protected void Page_Load(object sender, EventArgs e){ }
//Event handler za gumb Dohvat slobodnih soba
49
protected void Button1_Click(object sender, EventArgs e)
{
//Instanciranje proxy klase
Servis = new localhost.Webservishotelskoglanca();
//Pozivanje metode nad objektom Servis
int BrojKreveta = int.Parse(TextBox1.Text)
Rezultat = Servis.BrojSlobodnihSoba(BrojKreveta);
//Prikaz poruke s rezultatom u sučelju
Label1.Text = "Slobodnih soba je " + Rezultat.ToString();
}
//Event handler za gumb Izračun cijene
protected void Button2_Click(object sender, EventArgs e)
{
//Instanciranje proxy klase
Servis = new localhost.Webservishotelskoglanca();
//Pozivanje metode nad objektom Servis
int BrojKreveta = int.Parse(TextBox1.Text)
int BrojDana = int.Parse(TextBox2.Text)
Rezultat = Servis.CijenaSobe(BrojKreveta,BrojDana);
//Prikaz poruke s rezultatom u sučelju
Label1.Text = "Cijena boravka je " + Rezultat.ToString() +
"kn";
}
}
}
Vidljivo je da se proxy klasa koristi kao bilo koja druga klasa u kôdu. Takoñer je bitno znati da proxy
klasa skriva sve detalje oko komunikacije sa servisom te programeru daje privid da izravno koristi sam
Web servis. Otvaranjem Web aplikacije u pregledniku može se provjeriti rad aplikacije tj. komunikacija
s Web servisom.
50
2.4
.NET SDK - izgradnja i korištenje Web servisa
U ovom poglavlju obrañena je izgradnja i korištenje Web servisa primjenom .NET SDK
(Software Development Kit) paketa. .NET SDK se automatski instalira kod instalacije Visual Studio
paketa no moguće ga je besplatno skinuti s Interneta neovisno od Visual Studio paketa. Omogućava
razvoj .NET aplikacija bez razvojnog okruženja kao što je Visual Studio tj. razvoj se vrši pomoću bilo
kojeg tekstualnog editora te osnovnih alata koje donosi SDK.
2.4.1 Izgradnja Web servisa
Izgradnja Web servisa pomoću .NET SDK se temelji na jednostavnom kreriranju .asmx i .cs
datoteka, ako se primjenjuje code-behind, odnosno .asmx datoteke ako se ne primjenjuje codebehind. Datoteke se pohranjuju u virtualnom direktoriju predviñenom za smještanje Web servisa.
Virtualni direktoriji se kreiraju na način koji je pojašnjen ranije. Za primjer će se iskoristiti isti Web
servis koji je izgrañen ranije. Sadržaji datoteka HotelskiServis.asmx i HotelskiServis.cs su identični.
Sadržaj virtualnog direktorija nakon kreiranja i pohranjivanja datoteka izgleda kao na slikama.
Nakon spremanja datoteka Web servis se može na isti način kao i ranije pozvati iz Web preglednika
putem svojeg URL-a http://localhost/WebServisSDK/HotelskiServis.asmx . Treba uočiti da nije
potrebno prevoditi izvornu datoteku s programskim kôdom jer to, jednostavno rečeno, čini .NET
Framework prilikom pozivanja Web servisa.
2.4.2 Korištenje Web servisa
Za primjer aplikacije koja koristi Web servis će se iskoristiti jednostavna Web aplikacija iz
prethodnog primjera. Sadržaj datoteka Default.aspx i Default.aspx.cs je potpuno jednak te se pomoću
tekst editora mogu kreirati navedene datoteke koje se smještaju u predviñeni virtualni direktorij.
Sadržaj takvog virtualnog direktorija u kojem se nalazi Web aplikacija izgleda kao na slici.
51
Preostaje pitanje kako u slučaju korištenja SDK-a generirati proxy klasu te kako tu klasu
uključiti u aplikaciju. Za generiranje proxy klase služi wsdl.exe alat. Pokreće se iz komandne linije te
na temelju WSDL dokumenta nekog Web servisa može generirati .cs datoteku koja sadrži proxy klasu
za taj Web servis. Do WSDL.exe alata, a i do svih drugih alata koje sadrži .NET SDK može se doći
pokretanjem SDK komandne linije naredbama Start / Programs / Microsoft .NET Framework SDK 2.0 /
SDK Command Prompt .
Za generiranje proxy klase u odgovarajućoj .cs datoteci, WSDL.exe alatu je potreban samo URL Web
servisa. Takoñer je potrebno odabrati naziv namespacea koji će sadržavati proxy klasu, a to je upravo
Web referenca u Visual Studio okruženju. Tamo je rečeno da se za ime Web reference tj. namespacea
obično odabire naziv računala na kojem se nalazi Web servis pa će se isto primijeniti i ovdje. Naredba
kojom se pokreće generiranje proxy klase glasi:
> wsdl /n:localhost http://localhost/WebServisSDK/HotelskiServis.asmx?wsdl
Pojednostavljeni opći oblik wsdl.exe alata:
Neke opcije wsdl.exe alata:
•
•
•
•
wsdl.exe <opcije> <url ili staza>
/language:<language>
Omogućava odabir programskog jezika u kojem će biti generirana proxy klasa, kratka
verzija opcije je /l: . Defaultni jezik je C#.
/namespace:<namespace>
Omogućava definiranje namespacea za proxy klasu, kratka verzija /n:
/out:<izlazna_datoteka ili staza>
Omogućava definiranje direktorija u koji treba generirati proxy klasu te definiranje
naziva same datoteke proxy klase, kratka verzija /o:
/protocol:<protokol>
Omogućava odabiranje protokola za pozivanje Web servisa, osim SOAP-a mogu se
izabrati HTTPGET i HTTPSOAP kao što je spomenuto ranije kod testiranja Web
servisa. Defaultni protokol je SOAP.
Nakon izvršenja, u glavnom direktoriju SDK-a (direktorij u kojem se nalazi nakon što se
pokrene SDK command prompt) se nalazi generirana proxy klasa u .cs datoteci. Naziv datoteke, i
same klase, je jednak nazivu Web servisa koji je definiran Name svojstvo WebService atributa (bez
razmaka). U ovom slučaju generirana je datoteka Webservishotelskoglanca.cs. U toj datoteci se
nalazi proxy klasa koja je takoñer istog imena. Sve što preostaje je uključiti datoteku s proxy klasom u
Web aplikaciju, a to se svodi na jednostavno pohranjivanje dobivene .cs datoteke u App_Code
poddirektorij Web aplikacije ! Sadržaji direktorija nakon navedenog izgledaju kao na slici.
Nakon toga moguće je aplikaciju jednostavno pokrenuti u pregledniku putem njezinog URL-a
http://localhost/WebAplikacijaSDK/Default.aspx .
52
2.5
SOAP
Već je spomenuto kako je protokol SOAP jedan od temelja arhitekture Web servisa. Razmjena
podataka izmeñu korisnika i Web servisa se odvija upravo pomoću protokola SOAP. Spomenuto je i da
se SOAP poruke prenose protokolom HTTP tj. jedan HTTP paket sadrži jednu SOAP poruku. Iako u
najvećem broju primjena korisnik izravno ne utječe na SOAP komunikaciju, u ovom dijelu će biti
detaljnije opisane SOAP poruke, njihova struktura i mogućnosti.
2.5.1 Uvod i osnovni pojmovi
Protokol SOAP je izvorno zamišljen kao protokol za slanje poruka u jednom smjeru (one-way)
no u različitim primjenama se mogu ostvariti različite varijante komunikacije kao što su zahtjev i
odgovor (request / response), zahtjev i više odgovora itd. U slučaju Web servisa se ostvaruje upravo
request/response način komunikacije gdje se razmjenjuju dvije poruke. Prvo korisnik šalje SOAP
poruku Web servisu, a zatim Web servis odgovara slanjem nove SOAP poruke. U slučaju Web servisa
se request/response način komunikacije temelji upravo na protokolu HTTP kojemu je
request/response prirodan način komunikacije. Dakle primjenom protokola HTTP se ostvaruje
request/response komunikacija SOAP porukama.
Bitno je naqlasiti da protokol SOAP ni na koji način ne „razumije“ značenje podataka koje
prenosi tj. semantiku komunikacije.
Osnovna jedinka koja vrši razmjenu SOAP poruka je SOAP čvor (eng. node). SOAP čvor može
biti SOAP pošiljatelj (eng. sender), SOAP primatelj (eng. receiver) i SOAP posrednik (eng.
intermediary). Ovisno o primjeni mogu se izgraditi složene strukture SOAP čvorova.
SOAP poruka je tekstualna poruka u XML formatu podataka, a u XML obliku su i podaci koji se
prenose SOAP porukom. Što ponovno ukazuje na značaj XML-a.
Slika 2.6: SOAP komunikacija
53
2.5.2 Struktura SOAP poruke
Temeljni okvir SOAP poruke čini SOAP omotnica (eng. envelope). SOAP omotnica sadrži
cjelokupnu strukturu SOAP poruke. Dva temeljna gradivna elementa SOAP omotnice su SOAP zaglavlje
(eng. header, u daljnjem tekstu: zaglavlje) i SOAP tijelo (eng. body, u daljnjem tekstu tijelo). SOAP
zaglavlje nije obavezni dio SOAP poruke. SOAP tijelo je obavezni dio SOAP poruke.
Zaglavlje najčešće služi za prijenos „sustavnih“ informacija koje nisu izravno povezane sa podacima
koji se prenosi. Takve informacije mogu npr. poslužiti za definiranje uputa oko usmjeravanja (eng.
routing) SOAP poruke te oko načina obrade podataka koje poruka prenosi. Sve zapravo ovisi o
primjeni te zahtjevima koje je u odreñenom sustavu potrebno ispuniti. Zaglavlje se dalje može dijeliti
na blokove.
Tijelo ima primarnu i glavnu funkciju da sadrži podatke koji se prenose SOAP porukom.
Obzirom da je SOAP poruka XML dokument ona se sastoji od oznaka (eng. tag). Kao što je opisano u
prvom poglavlju potrebno je razlikovati oznake koje opisuju strukturu SOAP poruke od oznaka koje
opisuju podatke koje SOAP poruka prenosi. To je zadatak XML namespacea i monikera kojima se
definira koja oznaka pripada kojem prostoru imena.
Slijedi primjer SOAP poruke. Za oznake SOAP poruke koristi se env moniker. XML namespace za
oznake SOAP poruke se nalazi na URL-u http://www.w3.org/2003/05/soap-envelope .
<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header>
<mojns:secure xmlns:mojns="http://HoteliAvalon">
pqff98fe8j7d
</mojns:secure>
</env:Header>
<env:Body>
<mojns:rezervacija xmlns:mojns="http://HoteliAvalon">
<mojns:popis_osoba>
<mojns:osoba>Ivo Ivic</mojns:osoba>
<mojns:osoba>Marko Markic</mojns:osoba>
</mojns:popis_osoba>
<mojns:podaci_rezervacija>
<mojns:trajanje>17</mojns:trajanje>
<mojns:dolazak>010107</mojns:dolazak>
<mojns:odlazak>010107</mojns:odlazak>
</mojns:podaci_rezervacija>
</env:Body>
</env:Envelope>
SOAP zaglavlje
Zaglavlje općenito sadrži informacije koje nisu sastavni dio podataka koje prenosi poruka.
Takve informacije se najčešće odnose na usmjeravanje poruke i procesiranje podataka iz poruke. Npr.
ukoliko su podaci u tijelu poruke kriptirani na odreñeni način, primatelj poruke mora znati kojim
enkripcijskim algoritmom su podaci kriptirani da bi ih mogao dekriptirati. Očito nema smisla te podatke
pohraniti u samo tijelo tj. podatke, nego za takve i slične podatke služi upravo zaglavlje.
Najčešći sadržaj/primjenu zaglavlja: podaci o autentičnosti pošiljatelja, digitalni potpis koji garantira
valjanost podataka u poruci, podaci o usmjeravanju itd.
Zaglavlje je opcionalan element SOAP poruke i ukoliko ga SOAP poruka sadržava, zaglavlje se u
samom zapisu poruke nalazi na samom početku omotnice, kao što je prikazano u primjeru gore.
Informacije koje se nalaze u zaglavlju se grupiraju u blokove.
54
Općenito gledano, zaglavlje može sadržavati informacije koje su dio SOAP standarda i
informacije koje nisu dio standarda i koje se unose ovisno o primjeni. Svaki SOAP čvor je obvezan kod
primitka poruke, analizirati one dijelove zaglavlja koji su definirani standardom. Jasno je da su ti
dijelovi dio env namespacea tj. koristi se env: moniker.
SOAP standard definira atribute zaglavlja koji donose neke mogućnosti oko procesiranja i
usmjeravanja poruka. U nastavku će biti pojašnjeni role i mustUnderstand atributi.
I) role atribut
Ovisno o primjeni, različitim čvorovima se mogu namijeniti različite funkcije tj. uloge. Jasno
je da čvorovi „znaju“ koju ulogu imaju. Na konceptu uloge se temelji mehanizam odlučivanja koji blok
zaglavlja treba ili ne treba obraditi. Role atributom se svakom bloku zaglavlja dodjeljuje uloga koju
čvor treba ispunjavati da bi smio obraditi taj blok zaglavlja. Drugim riječima, ukoliko čvor analizira
sadržaj role atributa, i uoči da role atribut sadrži njegovu ulogu, on procesira taj blok.
Primjer:
<?xml version="1.0" ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header>
<ns1:PrviBlok xmlns:ns1="http://namespace_prvog_bloka"
env:role="http://uloga-x">
...
</ns1:PrviBlok>
<ns2:DrugiBlok xmlns:ns2="http://namespace_drugog_bloka"
env:role="http://uloga-y">
...
</ns2:DrugiBlok>
</env:Header>
<env:Body >
...
</env:Body>
</env:Envelope>
Čvor koji ima ulogu x će obraditi prvi blok zaglavlja, a čvor koji ima ulogu y drugi blok.
II) mustUnderstand atribut
Nakon što je čvor analizom zaglavlja pronašao sve blokove koji se odnose na njega, iz bilo
kojeg razloga se može desiti da čvor u potpunosti ili djelomično ne izvršili ili ne analizira neki od tih
blokova. Zbog toga postoji mustUnderstand atribut koji, ukoliko je prisutan u odreñenom bloku,
obvezuje čvor da bez iznimke obavi sve što je definirano u dotičnom bloku.
Primjer:
<?xml version="1.0" ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header>
<ns1:PrviBlok xmlns:ns1="http://namespace_prvog_bloka"
env:role="http://uloga-x" env:mustUnderstand="true">
...
</ns1:PrviBlok>
</env:Header>
<env:Body >
...
</env:Body>
</env:Envelope>
55
SOAP tijelo
Tijelo je obvezni dio SOAP poruke. Tijelo sadrži podatke koje pošiljatelj šalje primatelju.
Podaci mogu biti u XML obliku, mogu biti niz znakova, mogu biti u binarnom obliku. SOAP standard
definira način pohranjivanja podataka u poruku o čemu će biti više govora kasnije. SOAP poruke se,
obzirom na podatke koje sadrže, mogu biti orijentirane na procedure (eng. procedure oriented) i
orijentirane na dokumente (eng. document oriented)
Poruke orijentirane na proceduru se koriste u RPC (Remote Procedure Call) komunikaciji,
što je ujedno i način komunikacije kod Web servisa. Tijelo ovakvih poruka sadrži podatke o udaljenim
procedurama (funkcijama, metodama) koje se pozivaju te ulazne parametre koji im se šalju, odnosno
rezultate izvoñenja procedura.
Poruke orijentirane na dokumente se koriste u jednosmjernoj (eng. one way) komunikaciji i
to najčešće u različitim poslovnim primjenama, za slanje poslovnih dokumenata itd.
Slijedi primjer razmjene poruka u RPC komunikaciji koja se izvodi za udaljeno pozivanje jednostavne
metode za zbrajanje koja izgleda ovako:
public int Zbrajanje(int x, int y)
{
return x + y;
}
Tijelo SOAP poruke koja sadrži poziv te metode sadrži naziv metode te ulazne argumente i izgleda
ovako (nije prikazana cijela poruka nego samo tijelo poruke):
<env:Body>
<mojns:Zbrajanje xmlns:mojns=“http://moj_namespace“>
<mojns:x>1</mojns:x>
<mojns:y>2</mojns:y>
</mojns:Zbrajanje>
</env:Body>
Ovako npr. izgleda odgovor:
<env:Body>
<mojns:RezultatZbrajanja xmlns:mojns=“http://moj_namespace“>
<mojns:rez>1</mojns:rez>
</mojns: RezultatZbrajanja >
</env:Body>
2.5.3 SOAP Encoding
SOAP Encoding standardom je definiran način zapisivanja različitih tipova podataka u SOAP
poruku. U nastavku će putem primjera biti ukratko prikazan način zapisivanja najvažnijih tipova
podataka. Područje zapisivanja podataka u XML obliku je vrlo opsežno i nadilazi granice ovog rada.
Jednostavni tipovi
Jednostavni tipovi podataka su cijeli brojevi, nizovi znakova, logičke varijable itd. Način
zapisivanja jednostavnih tipova se temelji na kreiranju oznake s nazivom varijable tog tipa. Npr.
<var1>24</var1>
<var2>IBAZCSP</var2>
56
Složeni tipovi - strukture
Primjer podatkovne strukture:
public struct OsobniPodaci
{
public string Ime;
public string Prezime;
public string JMBG;
}
čija se instanca Podaci_XY u XML formatu zapisuje ovako:
<Podaci_XY>
<Ime>Marko</Ime>
<Prezime>Markic</Prezime>
<JMBG>0001111222333</JMBG>
</Podaci_XY>
Složeni tipovi - polja
Polje cijelih brojeva, imena PrimjerPolja, zapisuje se na sljedeći način:
<PrimjerPolja soap-enc:arrayType="xsi:int[3]">
<int>11</int>
<int>68</int>
<int>22</int>
</PrimjerPolja>
Treba uočiti arrayType atribut, definiran soap-enc: monikerom, koji preciznije opisuje polje tj.
naglašava tip podataka u polju te broj elemenata polja.
XML tehnologije su vrlo široko područje i njihovo objašnjenje nadilazi ovaj rad.
57
2.6 UDDI i DISCO
Do sada je bilo govora o tome što je Web servis, kako izgraditi Web servis, kako koristiti Web
servis, opisana je komunikacija putem poruka i općenito je opisano što sačinjava jedan Web servis no
nije bilo govora o procesima u kojima sudjeluju Web servisi. Najvažniji, a vjerojatno i najprirodniji
proces za Web servise je proces otkrivanja. Ako izgradimo Web servis, on je u najvećem broju
slučajeva beskoristan, ukoliko ga ne otkriju novi korisnici. To je uostalom i priroda Web servisa.
Stoga se odmah u startu pojavila potreba za načinom distribuiranja podataka o Web servisima
na Webu kako bi ih potencijalni korisnici mogli pronaći. Proces otkrivanja se može implementirati na
različite načine ali ovdje će biti govora samo o konceptu direktorija (baze) Web servisa.
UDDI je možda najvažniji protokol koji definira standardni način objavljivanja i otkrivanja Web servisa.
DISCO je Microsoftov standard za distribuciju informacija o Web servisima.
2.6.1 UDDI – Universal Description, Discovery and Integration
Za razliku od većine drugih standarda vezanih za Web servise koje razvija W3C, UDDI je
razvijen od strane OASIS-a. Na tom tragu nalaze se i neki standardi sigurnosti Web servisa koje
takoñer razvija OASIS.
UDDI standard se temelji na konceptu središnjeg registra kojemu je glavna funkcija upravo
pohrana i ustupanje podataka i metapodataka o Web servisima. Registar se može koristiti u intranet ili
Internet okruženju tj. može biti dostupan isključivo unutar nekog poslovnog okruženja ili može biti
dostupan svima na Webu. UDDI registar na standardom predviñen način organizira i grupira Web
servise te omogućava da potencijalni korisnici pronañu upravo one Web servise koji su im potrebni.
UDDI registar može npr. omogućavati neke od sljedećih funkcija: objavljivanje podataka o
Web servisima prema kategorijama, pretraživanje Web servisa prema definiranim kriterijima,
utvrñivanje sigurnosti koju ima odreñeni Web servis, utvrñivanje načina komunikacije s Web servisom
itd.
Posebno je važno da je UDDI registar i sam ustvari Web servis jer nudi standardno
programsko sučelje (API) za svoje usluge, baš kao što to čine i Web servisi !
Osim toga UDDI se temelji na istim tehnologijama kao i Web servisi, kao što su SOAP, HTTP, XML, i
WSDL.
UDDI model podataka
Obzirom na značaj XML-a, podatkovni model UDDI registra je definiran skupom XML Schema
dokumenata. XML i u ovom slučaju ima isti značaj kao što je spomenuto ranije jer pruža neovisnost o
programskom jeziku i platformi. Druga prednost XML Scheme je što podržava složene tipove podataka
što dalje znači da UDDI registar može podržavati različite složene tipove Web servisa. Slijedi kratki
opis najvažnijih tipova podataka UDDI registra.
•
businessService,
•
•
•
businessEntity,
bindingTemplate,
tModel,
opisuje poslovnu funkcionalnost tj. uslugu koju Web servis
pruža
sadrži informacije o organizaciji koja je objavila Web servis
opisuje tehničke detalje Web servisa, njegov URL itd.
različiti metapodaci koji se odnose na komunikacija sa
servisom, sigurnost, digitalne potpise itd.
58
UDDI API
API (Application Programming Interface) je skup metoda kojima neki sustav nudi svoje
usluge. UDDI API je skup metoda kojima UDDI registar nudi svoje usluge potencijalnim korisnicima.
Konkretno, to znači da se prilikom razvoja aplikacije, mogu koristiti metode koje nudi UDDI (kao što
se koriste metode Web servisa) i na taj način aplikacija može imati sposobnost komunikacije s UDDI
registrom. UDDI API se dijeli na nekoliko različitih skupova metoda, gdje se skupovi meñusobno
razlikuju po svojoj namjeni. Prema UDDI v3 standardu koji je trenutno aktualan, postoji 6 skupova
metoda, od kojih su možda najvažniji:
•
•
•
UDDI Inquiry,
omogućava pretraživanje i dohvaćanje podataka iz UDDI registra.
Primjeri funkcija: find_binding, find_business, find_service itd.
UDDI Publication, omogućava objavljivanje i obnavljanje podataka u UDDI registru.
Primjeri funkcija: save_service, save_business, delete_service itd.
UDDI Security Policy, rješava odreñena pitanja sigurnosti komunikacije
Struktura UDDI registra
Jasno je da je UDDI registar fizička tj. računalna struktura. UDDI standard definira i neke
aspekte fizičke strukture UDDI registra.
Definiranje strukture registra kreće od koncepta UDDI čvora. Standard kaže da UDDI čvor (što
god on bio u stvarnosti) meñu ostalim mora omogućavati interakciju s UDDI podacima kroz jedan ili
više API skupova metoda te da je svaki UDDI čvor pripadnik točno jednog UDDI registra. Standard ne
definira kako čvor treba biti fizički izveden što ostavlja prilično širok manevarski prostor. U načelu
UDDI čvor može biti čak i mobilni ureñaj.
UDDI registar je viša i veća struktura od UDDI čvora. Da bi se računalni sustav mogao nazvati
UDDI registrom, on meñu ostalim, mora sadržavati jedan ili više UDDI čvorova. Takoñer čvorovi u
registru moraju zajednički upravljati UDDI podacima te izmeñu čvorova dolazi do replikacije podataka.
Kao i u slučaju UDDI čvora, standard ne definira fizičku izvedbu UDDI registra.
Ako se uzmu u obzir: koncept UDDI registra koji se sastoji od više UDDI čvorova koji
meñusobno komuniciraju i održavaju registar, koncept UDDI registra dostupnog na Webu, koncept
privatnog UDDI registra koji djeluje unutar privatnog poslovnog intraneta, onda je za očekivati da
tijekom vremena može doći do formiranja različitih složenih UDDI struktura.
Slika 2.7: Primjer UDDI strukture i prirode podataka u registrima
59
2.6.2 Microsoft UDDI Services
Djelovanje Microsofta na području koje definira UDDI standard se u najvećoj mjeri odnosi na
Microsoft UDDI Services platformu koja omogućava uspostavu UDDI registra Web servisa u intranet ili
Internet okruženju. Microsoft UDDI Services je podržan isključivo na Windows Server 2003
operacijskom sustavu što je i logično obzirom na prirodu i funkciju UDDI registra.
UDDI Services platforma se bazira na .NET Frameworku te omogućava Web pristup putem
korisničkog sučelja ili programski pristup putem protokola SOAP.
Glavni razvojni alat za sve Microsoft scenarije je Visual Studio .NET koji prepoznaje Web servise u
formi Web referenci. Ranije je prikazano kako prilikom dodavanja nove Web reference, postoji i
mogućnost pretraživanja UDDI registra.
2.6.3 Microsoft DISCO
Iako UDDI pruža prilično napredne mogućnosti u području objavljivanja i otkrivanja Web
servisa, Microsoft je razvio DISCO protokol koji pokriva jednu alternativnu vrstu scenarija. UDDI se
bazira na centraliziranoj bazi podataka koja sadrži informacije, ne o Web servisima koji postoje, nego
o Web servisima koji su u bazi objavljeni. Stoga da bi Web servis mogao biti korišten potrebno ga je
objaviti u bazi. Nadalje UDDI predviña pretraživanje baze, a ne pretraživanje odreñenog URL-a.
DISCO protokol nudi rješenje za takve i slične slučajeve gdje programer već kod razvoja Web
servisa može putem .disco dokumenata omogućiti pristup Web servisu bez da je servis objavljen u
registru. Osim toga DISCO protokol omogućava da se na zadanom URL-u utvrdi postojanje Web
servisa putem .disco dokumenata. Iako se može činiti kao dva naziva za istu stvar, to ipak nije tako.
A jedan od argumenata je i sama jednostavnost .disco dokumenta kojim se i formalno potvrñuje
postojanje Web servisa na računalu. .disco dokumenti su (naravno) XML dokumenti koji se smještaju
upravo u virtualni direktorij gdje je smješten i sam Web servis.
Primjer .disco dokumenta izgleda ovako:
<disco:discovery xmlns:disco="http://schemas.xmlsoap.org/disco/"
xmlns:wsdl=“http://schemas.xmlsoap.org/wsdl/“>
<wsdl:contractRef ref=“http://localhost/WebServis/Servis.asmx?WSDL/>
</disco:discovery>
Jedna od prednosti .disco dokumenata je da se mogu neograničeno širiti URL-ovima Web servisa.
Protokol DISCO nije standard i na području Web servisa on je već prošao svoj vrhunac. Tijekom
vremena DISCO će zamijeniti WS-Inspection protokol, koji za razliku od DISCO protokola, je standard.
60
2.7 Sigurnost
Uzme li se u obzir činjenica da će većina u budućnosti Web servisa vrlo vjerojatno imati neku
vrstu naplate za usluge koje pružaju, te činjenica da je sigurnost danas pitanje broj jedan, logično je
da sigurnost Web servisa ima veliku važnost.
Do sada je bilo dosta govora o protokolu SOAP koji prema standardu nema riješeno pitanje
sigurnosti nego se pouzdaje u sigurnost svog nositelja, a u ovom slučaju je to protokol HTTP. Za
sigurnu komunikaciju putem HTTP-a zaslužan je protokol SSL koji bi se trebao koristiti uvijek kada se
zahtjeva očuvanje sigurnosti i povjerljivosti podataka koji se prenose. No to nije dovoljno.
Sigurnosnim standardima za Web servise se u najvećoj mjeri bavi OASIS te je razvijeno nekoliko
standarda koji apstraktno opisuju različite aspekte sigurnosti Web servisa. Te apstraktne modele iz
standarda je potrebno implementirati nekim konkretnim postojećim rješenjima.
2.7.1 Web Services Security (WS-Security)
Web Services Security standard (u daljnjem tekstu WSS) je izvorno opisan zajedničkom
suradnjom Microsofta i IBM-a, a kasnije je OASIS preuzeo daljni razvoj. WSS standard opisuje
sigurnosna rješenja u obliku nadogradnji na protokol SOAP (SOAP extensions) te je stoga i puni naziv
standarda Web Services Security: SOAP Message Security.
U realnosti se može očekivati nekoliko osnovnih vrsta opasnosti: poruka može biti promijenjena ili
pročitana od strane napadača, napadač može poslati neautentičnu poruku servisu, može izmijeniti
sadržaj poruke te uzrokovati da servis radi za napadača umjesto za svog pravog korisnika itd.
Ako se obuhvate sve moguće prijetnje, može se reći da je u temelju potrebno osigurati: očuvanje
integriteta podataka i očuvanje povjerljivosti podataka. Kao što je već spomenuto, standard ne
predviña konkretna rješenja, nego je modele iz standarda potrebno implementirati konkretnim
rješenjima kao što su npr. SSL, PKI, Kerberos itd.
Neki od mehanizama koji bi trebali poslužiti kod izgradnje konkretnih sigurnosnih rješenja su:
•
tokeni (sigurnosne propusnice) – rješava pitanje autentičnosti korisnika na način da se
tijekom komunikacije razmjenjuje token kojim se
garantira autentičnost obje strane. Token se izdaje
na početku komunikacije i tijekom komunikacije se
može primijeniti na različite načine npr. kod
pozivanja svake metode ili u definiranim momentima
itd.
•
digitalni potpis
- omogućava digitalno potpisivanje bloka podataka i
time garantira njegov integritet npr. XML Signature
•
kodiranje podataka
- kodiranjem se osigurava integritet i povjerljivost
podataka. Integritet poruke osigurava XML
Signature, dok povjerljivost osigurava XML
Encryption mehanizam, oba u kombinaciji s
tokenima
61
2.7.2 Microsoft Web Services Enhancements
Microsoft WSE (trenutno u v2 SP3) je dodatak .NET Frameworku kojim se omogućava
implementacija sigurnosti u SOAP porukama prema WSS standardu. Neki od mehanizama dostupnih
programeru putem WSE dodatka su: tokeni s korisničkim imenom, binarni tokeni temeljeni na X.509
certifikatima, binarni tokeni temeljeni na Kerberos propusnicama (ticket), vlastiti binarni tokeni, XML
tokeni, enkripcija XML podataka itd.
WSE funkcionira u obliku „filtera“ kroz koje prolaze SOAP poruke i koji ih mijenjaju u skladu sa
programskim rješenjem.
62
3. Windows Communication Foundation
3.1 Uvod
Web usluge obrañene u 1. i 2. poglavlju su zapravo dio šireg područja koje se jednostavno naziva
usluge (eng. services). Web usluge se mogu promatrati i kao prethodnik usluga no i kao jedna
instanca ili tip usluga. Kad se govori o Web uslugama, podrazumijeva se postojanje usluge i klijenta
koji meñusobno komuniciraju porukama putem Interneta tj. Weba. Oblik poruka, metoda razmjene i
ostale detalje definira SOAP specifikacija, dok se kao transportni mehanizam koristi protokol HTTP.
Iako izmeñu usluga i Web usluga postoje velike sličnosti i iako se najvećim dijelom koriste iste
tehnologije, usluge ipak nisu ograničene samo na korištenje protokola HTTP za prijenos poruka. Osim
prijenosnog protokola, može se reći da su usluge nešto naprednije od Web usluga po pitanju
sigurnosti, podrške obavljanju transakcija, pouzdanosti, performansama itd. WCF je upravo primjer
okvira koji objedinjuje sve to u jedinstveni programski model za razvoj usluga. Iako postoje jasne
razlike izmeñu usluga i Web usluga, to ne znači da one meñusobno ne mgu komunicirati ili da se radi
o nekompatibilnim tehnologijama.
Web usluge su, kao što je objašnjeno ranije, evolucija u razvoju raspodijeljenog softvera. Nakon
različitih pokušaja i tehnologija kao što su COM, DCOM, COM+ itd. Web usluge su prvi puta omogućile
komunikaciju koja do tada nije bila moguća ili nije bila jednostavno izvediva. To znači komunikaciju
izmeñu aplikacija na različitih platformama, različitim operacijskim sustavima, različitim programskim
jezicima, različitih modelima podataka itd.
Takva komunikacija „bez granica“ postaje standard u razvoju raspodijeljenih sustava i očekuje se da
aplikacije mogu meñusobno komunicirati bez obzira na detalje implementacije. Usluge omogućavaju
baš takvu komunikaciju i zbog toga se razvoj softvera okreće prema razvoju usluga. Web usluge su
jedan korak u tom procesu. Ono što slijedi nakon Web usluga su usluge. U nastavku će se detaljnije
pojasniti koncept usluge i arhitekture zasnovane na uslugama. Nakon toga će se detaljnije pojasniti
što je to WCF i na koji način WCF podržava razvoj raspodijeljenih sustava zasnovanih na uslugama.
3.1.1. Usluge i arhitektura zasnovana na uslugama (SOA)
Softver koji se danas razvija je primarno okrenut komunikaciji. Softver mora komunicirati s
korisnicima, bazama podataka, drugim softverom itd. Načina za ostvarenje te komunikacije je mnogo,
a jedan od tih načina je promatranje aplikacija kao usluga. Uslužna orijentacija (eng. service
orientation) je pristup razvoju softvera koji aplikacije promatra kao usluge koje komuniciraju
razmjenom poruka. Iz usluga se grade složenija rješenja, nove usluge i općenito raspodijeljeni sustavi.
Iako se može činiti da je uslužna orijentacija naslijedila objektnu orijentaciju to nije tako. Unatoč
brojnom pozitivnim stvarima koje uslužna orijentacija ima u odnosu na objektnu, nije moguće, niti je
potrebno, u potpunosti izbjeći objektnu orijentaciju. Najjednostavniji primjer je elementarna usluga
koja se sama ne sastoji od drugih usluga nego od razreda i objekata tj. ostvarena je na objektnoorijentirani način. Jedna očita razlika izmeñu objektne i uslužne orijentacije je da kod objektne
orijentacije postoji jasna hijerarhija razreda u nekom raspodijeljenom sustavu, dok kod uslužne
orijentacije ne postoji hijerarhija usluga. To dovodi do vrlo važne razlike izmeñu objektne i uslužne
orijentacije, a to je povezanost. Raspodijeljeni sustavi temeljeni na objektnoj orijentaciji tj. objektima
su čvrstvo povezani (eng. tightly coupled), dok su sustavi temeljeni na uslužnoj orijentaciji slabo
povezani (eng. loosely coupled). Čvrsta povezanost znači da u objektnoorijentiranom sustavu mora
postojati čvrsta i jasna hijerarhija razreda koju „razumiju“ sve aplikacije uključene u sustav. To kod
usluga nije slučaj jer osim što ne postoji hijerarhija razreda ni hijerarhija usluga, pojedine usluge tj.
aplikacije u sustavu zaista ne moraju imati nikakve informacije o implementaciji drugih usluga. Slaba
povezanost donosi brojne prednosti u odnosu na čvrstu povezanost. Meñu ostalim, upravo je slaba
povezanost zaslužna za mogućnost komunikacije izmeñu nekompatibilnih platformi, jezika i
operacijskih sustava.
63
Slika 3.1: Objektna orijentacija u raspodijeljenom sustavu
Slika 3.2: Uslužna orijentacija u raspodijeljenom sustavu
Može se reći da se uslužna orijentacija temelji na četiri osnovna elementa koja vrijede u svakom
raspodijeljenom sustavu temeljenom na uslugama. Ti elementi su:
-Eksplicitne granice izmeñu aplikacija tj. usluga
-Autonomnost pojedinih usluga
-Dijeljenje modela podataka koji se razmjenjuju, a ne hijerarhija razreda
-Ponašanje usluge prema korisniku ovisi o ugovoru s korisnikom (eng. policy)
Spomenuto je da se uslužno-orijentirana komunikacija temelji na razmjeni poruka. Bitno je uočiti jasnu
granicu oko svage usluge u raspodijeljenom sustavu. Tu granicu upravo čini javno sučelje svake
usluge koje je dostupno svima i putem javnog sučelja se šalju i primaju poruke. Iza granice tj. iza
javnog sučelja je skrivena implementacija usluge i korisnici usluge ne znaju, niti trebaju znati išta o
64
implementaciji usluge. Sve što im je potrebno je javno sučelje. U javnom sučelju su definirani modeli
podataka koji se mogu razmjenjivati s uslugom, oblici poruka itd. Iako ovakav opis podsjeća na
objektnu orijentaciju i koncept enkapsulacije to ipak nije tako. U objektno orijentiranom
raspodijeljenom sustavu i dalje postoji enkapsulacija na razini razreda i objekata, no ne postoji
enkapsulacija na razini usluga. Upravo tu enkapsulaciju ostvaruje uslužna orijentacija. Enkapsulacija
na razini usluga donosi prednosti koje postoje i kod razreda. Korištenje usluge postaje potpuno
neovisno o njezinoj implementaciji. Ipak treba voditi računa o razumnom korištenju i pozivanju usluga
jer svako pozivanje usluge donosi neki trošak u pogledu performansi, suvišne komunikacije itd.
Autonomija usluga je vrlo bitan koncept koji omogućava robustnost sustava i otpornost na promjene
koje su neizbježne tijekom vremena. U sustav mogu ući nove usluge, mogu se mijenjati
implementacije pojedinih usluga, verzije usluga i drugi elementi koji ne smiju poremetiti rad sustava.
Obzirom da se komunikacija izmeñu usluga u raspodijeljenom sustavu temelji na porukama te da su
usluge meñusobno neovisne, nije potrebno razmjenjivati razrede i hijerarhije razreda. Ono što može
zanimati korisnika usluge je javno sučelje koje ta usluga ima. Obzirom da se sučelje uvijek sastoji od
funkcionalnosti koje nudi usluga te od podataka koji se mogu razmjenjivati s uslugom, dovoljno je da
usluge meñusobno mogu razmjenjivati modele podataka što omogućava razmjenu konkretnih
podataka kod korištenja usluge. Osim modela podataka (eng. schema) koji opisuju podatke, svaka
usluga posjeduje i ugovor (eng. policy) kojim se opisuje ponašanje usluge.
Upravo ugovori definiraju na koji način se može koristiti pojedina usluga tj. njezina funkcionalnost.
Ugovori omogućavaju različite kombinacije u pogledu naplate usluge i sl. Ugovor zapravo razdvaja
punu funkcionalnost usluge od funkcionalnosti dostupne pojedinim korisnicima. Neki korisnici mogu
koristiti više, a neki manje funkcionalnosti iste usluge.
Sveukupno gledano uslužna orijentacija i slaba povezanost donose sljedeće pozitivne pomake u
razvoju raspodijeljenih sustava temeljenih na uslugama:
-Autonomnost usluga – promjene u implementaciji usluge, uz nepromijenjeno sučelje, nemaju
učinka na korištenje usluge od strane korisnika. Korisnici ne smiju biti ovisni o implementaciji
usluge.
-Neovisnost o prijenosnom protokolu, formatu podataka, programskom jeziku i operacijskom
sustavu
-Skalabilnost
-Dostupna funkcionalnost je definirana ugovorom
Dakle, arhitektura zasnovana na uslugama je svaka arhitektura raspodijeljenog sustava izgrañenog
prema principima uslužne orijentacije. To znači sustav temeljen na slabo povezanima autonomnim
uslugama opisanih javnim sučeljem i javnim ugovorima.
65
3.1.2. Windows Communication Foundation (WCF)
Windows Communication Foundation (Indigo) je Microsoftov okvir za razvoj, namijenjen primarno
razvoju uslužno-orijentiranih aplikacija i sustava. Microsoft je u okviru .NET frameworka 2.0 podržao
razvoj Web usluga, te osim toga bio je omogućen razvoj aplikacija temeljenih na .NET Remotingu,
primjeni transakcija itd. WCF objedinjuje prethodne tehnologije za razvoj raspodijeljenih sustava kao
što su Web usluge, Remoting u jedinstveni okvir za razvoj. Pritom je razvoj softvera primarno okrenut
prema razvoju usluga.
WCF je općenitija, šira tehnologija za razvoj koja meñu ostalim omogućava i razvoj Web usluga. To ne
znači da su WCF aplikacije i ASP.NET Web usluge nekompatibilne. WCF aplikacije mogu normalno
komunicirati s ASP.NET Web uslugama i klijentima. Iako su obje vrste aplikacija kompatibilne, postoje
razrañeni postupci migracije na WCF s ASP.NET okvira.
ASP.NET
ASMX
.NET
Remoting
Enterprise
Services
WSE
MSMQ
WCF
Web usluge neovisne o
platformi, jeziku, os-u....
.NET - .NET komunikacija
Transakcije
WS-*
Redovi poruka
Jedna od osnovnih razlika izmeñu Web usluga i WCF usluga je transportni protokol koji se koristi za
prijenos poruka. U slučaju ASP.NET Web usluga, poruke se prenose primjenom protokola HTTP, dok
WCF to proširuje i podržava niz drugih protokola kao što su TCP, MSMQ itd. Osim toga, u WCF okviru
je mnogo bolje integrirana podrška za ostvarenje sigurnosti, transakcija, pouzdanosti i drugih
specifikacija (WS-*) i svojstava komunikacije koje su u slučaju Web usluga bile dostupne kroz WSE
dodatke. Kao i u slučaju ASP.NET Web usluga, XML se opsežno koristi za podatke i metapodatke te se
i dalje vrši serijalizacija izmeñu .NET objekata i XML poruka koje se razmjenjuju i obrnuto.
Tendencija jednostavnosti je nastavljena i u .NET 3.0 okviru tj. u njegovom modelu za razvoj usluga.
Kao i kod ASMX usluga, za potpunu funkcionalnost, dovoljno je korištenje nekolicine glavnih razreda
koji opisuju glavne elemente kao što su usluga, proxy, sučelje i slično.
WCF u osnovi omogućava tri načina razvoja usluga, što je takoñer djelomično nastavak na ASMX
usluge. Ti načini su:
-deklarativno programiranje primjenom atributa
-imperativno programiranje primjenom izvornog kôda, razreda i objekata
-programiranje temeljeno na konfiguracijskim datotekama
U razvoju tipične WCF usluge, koriste se sva tri načina programiranja za rješavanje odreñenog dijela
problema. Pritom se atributima definiraju ugovori i sučelja usluge, konfiguracijskim datotekama se
rješava pitanje sigurnosti, upravljanja itd., a u izvornom kôdu se implementira funkcionalnost usluge.
WCF je „fizički“ ostvaren kao skup asemblija „iznad“ .NET Frameworka 3.0. Ti asembliji sadrže tipove
koji čine WCF API sučelje.
66
Slika 3.3: WCF u kontekstu Windowsa i .NET Frameworka
U poglavljima koja slijede će se na praktičnim primjerima objasniti razvoj i struktura WCF usluga te
WCF klijenata.
3.2 WCF usluge
Analogno kao u slučaju ASMX usluga, WCF usluge se takoñer programski ostvaruju kao razredi u
nekom programskom jeziku podržanom u .NET-u. Detaljnije će biti analizirana struktura razreda koji
ostvaruje uslugu. Osim razreda, za usluge je bitno njihovo smještanje na odreñenom hostu tj.
domaćinu. I konačno bitno je omogućiti da klijenti na neki način mogu pristupiti tom razredu tj. usluzi
smještenoj na domaćinu.
Slika 3.4: Osnovna struktura WCF usluge
Sva komunikacija s uslugom se odvija putem pristupnih točaka. U svakoj pristupnoj točki je definirano
sučelje (eng. service contract) koje opisuje koje metode razreda su dostupne u toj točki, zatim
uvezivanje (eng. binding) koje opisuje na koji način klijent može komunicirati s tom pristupnom
točkom, te konačno adresa koja definira lokaciju usluge.
Razred koji ostvaruje WCF uslugu je razred kao i svaki drugi, uz dodatak da omogućava definiranje
tzv. sučelja (eng. service contract) koja opisuju dostupnu funkcionalnost usluge. Svaki razred može
imati jedno ili više sučelja. Za definiranje sučelja, potrebno je znati koje metode razreda trebaju biti
dostupne klijentima, a koje ne. Problem oko integriranja takvih detalja u programski kôd je riješen
primjenom .NET atributa. Atributi su najobičniji nizovi znakova koji se pojavljuju na različitim
67
mjestima, npr. prije definicije razreda, prije definicije metode i sl. Atributi mogu imati svojstva i
zapravo mijenjaju ponašanje objekta kojem su pridruženi.
Definiranje razreda i sučelja usluge
Razred usluge je razred (class) bilo kojeg programskog jezika podržanog u .NET-u koji implementira
metode tj. operacije koje usluga nudi svojim korisnicima. Konceptualno ne postoje veće razlike u
odnosu na ASMX usluge. Svaki razred koji implementira WCF uslugu (nadalje: razred) mora
implementirati barem jedno ili više sučelja usluge (service contract). Sučelja usluge opisuju metode tj.
operacije koje usluga nudi svojim korisnicima. Osim sučelja usluge u razredu se može definirati i
sučelje podataka koje opisuje tipove podataka koji se mogu razmjenjivati s uslugom. Analogno
definiranju Web metoda u ASMX uslugama, u WCF uslugama se za definiranje javnih sučelja koriste
atributi.
Temeljni atribut je ServiceContract atribut (System.ServiceModel prostor imena) koji služi za
definiranje nekog razreda kao WCF usluge što implicitno definira javno sučelje usluge.
Atribut OperationContract služi za definiranje neke metode u razredu kao javne metode. To znači da
sve metode označene ovim atributom postanu javno „izložene“ i može im se pristupiti SOAP
porukama. Analogno kao i kod ASMX usluga, metode koje nisu označene tim atributom, neće biti
javno dostupne.
Sljedeći primjer pokazuje dva osnovna načina za primjenu navedenih atributa.
using System.ServiceModel;
[ServiceContract]
class Studomat
{
[OperationContract]
private int PrijaviIspit(int StudID, int PredmetID)
{
return _KomBaza(0, StudID, PredmetID, ...);
}
[OperationContract]
public int OdjaviIspit(int StudID, int IspitID)
{
return _KomBaza(1, StudID, PredmetID, ...);
}
public int _KomBaza(int TipPosla, int StudID, int PredmetID, ...)
{
... ; return NoviIspitID;
}
}
Primjer 3.1.: Jedna varijanta korištenja atributa ServiceContract i OperationContract
U prethodnom primjeru je cijeli razred označen ServiceContract atributom, što znači da postoji samo
jedno moguće sučelje koje će se moći naći na pristupnim točkama, a to sučelje će činiti one metode iz
razreda koje su označene OperationContract atributom. Obzirom da može postojati više pristupnih
točaka koje se mogu razlikovati npr. po prijenosnom protokolu, sigurnosnim postavkama ili nekom
drugom parametru, u slučaju ovakvog razreda, na svim pristupnim točkama će biti dostupne iste
metode. Dodatno je korisno spomenuti da, kao što je prikazano u primjeru, ključne riječi public i
private ne čine razliku ako su metode označene kao javne.
68
Mnogo bolji način je prikazan u idućem primjeru gdje se primjenjuje koncept sučelja razreda
(interface) koje zatim nasljeñuje razred usluge. U ovom slučaju se pojedina sučelja razreda (interface)
označavaju ServiceContract atributima i glavni razred ih nasljeñuje, te nije potrebno dodatno i razred
označavati ServiceContract atributom. Jedna od glavnih prednosti koje donosi ovakav pristup je
mogućnost definiranja praktični beskonačnog broja sučelja razreda (interface) te korištenje različitih
interfacea na različitim pristupnim točkama.
[ServiceContract]
interface IStudent
{
[OperationContract]
int PrijaviIspit(int StudID, int PredmetID)
[OperationContract]
int OdjaviIspit(int StudID, int IspitID)
}
class Studomat : IStudent
{
private int PrijaviIspit(int StudID, int PredmetID)
{
return _KomBaza(0, StudID, PredmetID, ...);
}
public int OdjaviIspit(int StudID, int IspitID)
{
return _KomBaza(1, StudID, PredmetID, ...);
}
public int _KomBaza(int TipPosla, int StudID, int PredmetID, ...)
{
... ; return NoviIspitID;
}
}
Primjer 3.2.: Bolja varijanta korištenja atributa ServiceContract i OperationContract
Kada se razredi i metode označe navedenim atributima kao u prethodnim primjerima, to omogućava
automatsko generiranje WSDL opisa (što je opet analogno ASMX uslugama).
U prethodnim primjerima su korišteni najjednostavniji tipovi podataka. Pritom se zapravo implicitno
definiralo koji tipovi podataka se prenose jer zbog njihove jednostavnosti nije bila potrebna dodatna
definicija. No često je potrebno prenositi različite složene tipove podataka i u tom slučaju je potrebno
eksplicitno definirati podatke koji se prenose. Za to se koristi DataContract atribut i služi za definiranje
složenijih tipova podataka koji se prenose, te za definiranje na koji način se vrši serijalizacija iz .NET
objekata u oblik za prijenos nekim transportnim protokolom. Idući primjer demonstrira primjenu ovog
atributa.
[DataContract]
struct Student {
[DataMember] public string Name;
int public age;
[DataMember] private int ProsjekOcjena;
}
Primjer 3.3.: Korištenje DataContract i DataMember atributa
69
Atribut DataContract služi već opisanoj svrsi, dok atribut DataMember služi za definiranje članova
strukture koji se trebaju pojaviti u serijaliziranoj verziji .NET objekta. To konkretno znači da kad se
instanca ovakve strukture prenosi u nekoj metodi označenoj kao javnoj, ustvari se prenose samo
članovi označeni DataMember atributom.
Definiranje domaćina (hosta) usluge
Razred koji implementira WCF uslugu se najčešće prevodi u biblioteku te je potreban neki host gdje će
ta biblioteka biti dostupna potencijalnim korisnicima. Osnovni načini su:
-objava usluge u proizvoljnom procesu
-objava usluge kao Windows usluge (različito od WCF usluge)
-objava usluge primjenom IIS-a
-objava usluge primjenom WAS (Windows Activation Services) usluge, samo uz IIS 7.0 (Vista)
Iako je objava WCF usluge kao Windows usluge prilično jednostavna i rješava brojne probleme,
ponekad je poželjna fleksibilnost koju omogućava hostanje WCF usluge u nekom proizvoljnom
procesu. Za takve potrebe postoji razred ServiceHost koji omogućava vrlo jednostavno hostanje bilo
koje WCF usluge, što pokazuje sljedeći primjer.
using System.ServiceModel;
public class StudomatHost
{
public static void Main()
{
ServiceHost stud = new ServiceHost(typeof(Studomat));
stud.Open();
}
}
Primjer 3.4.: Hostanje WCF usluge u proizvoljnom procesu
Kod instanciranja ServiceHost razreda moguće je definirati baznu adresu usluge, što u prethodnom
primjeru nije učinjeno. Bazna adresa usluge, definirana ovdje, se uvijek spaja s adresom definiranom
u konfiguracijskoj datoteci usluge, a obzirom da bazna adresa u primjeru definirana, to znači da će se
koristiti isključivo adresa navedena u konfiguracijskog datoteci. Nakon poziva metode open(), WCF
runtime će automatski kreirati Listener objekt koji će zaprimati sve zahtjeve klijenata prema toj usluzi.
Definiranje pristupnih točaka
Ranije je spomenuto da je usluga dostupna klijentima u pristupnim točkama (endpoints). Broj
pristupnih točaka kojima se može pristupati jednoj usluzi nije ograničen. Takoñer je moguće da se u
svakoj pristupnoj točki pristupa drugom sučelju iste usluge tj. drugom skupu operacija usluge. Za
svaku pristupnu točku potrebno je definirati koje sučelje usluge (ServiceContract) je u toj točki
dostupno, koja je adresa te pristupne točke te koje uvezivanje (eng. binding) se primjenjuje za pristup
usluzi putem te pristupne točke. O sučeljima je već bilo govora kada se govorilo o definiranju razreda
usluge. Adresa pristupne točke je URL koji na jedinstven način indentificira pristupnu točku i
omogućava nedvosmislen pristup od strane pojedinog klijenta.
70
Vrlo bitna komponenta svake pristupne točke je uvezivanje (binding). Binding definira način na koji
klijent može pristupiti usluzi. To uključuje: prijenosni protokol, mehanizme za osiguravanje pozdanosti,
sigurnosne mehanizme itd. Npr. ako vlasnik usluge želi klijentima omogućiti pristup putem protokola
HTTP i protokola TCP, mora to ostvariti kroz dva različita bindinga tj. kroz dvije različite pristupne
točke. Iako se u obje točke pristupa istoj usluzi, koriste se različiti prijenosni protokoli. Svaki binding
čine elementi bindinga. Svaki pojedini element se odnosi na odreñenu funkcionalnost, npr. protokol,
pouzdanost, sigurnost itd. Kombiniranjem različitih elemenata se ostvaruje željeno konačno uvezivanje
tj. binding. Elementi koji su obavezni u svakom bindingu su element koji definiraju prijenosni protokol
i element koji definira kodiranje sadržaja poruke. Svaki binding element čini jedan kanal (channel).
Kod objave usluge WCF runtime slaže sve kanale konfigurirane za neku uslugu, u zajednički kanalni
stog (channel stack). Kanalni stog se takoñer stvara na strani klijenta kod pristupanja usluzi ali o tome
nešto više kasnije.
U standardnoj WCF biblioteci (System.ServiceModel.Channels prostor imena) postoji niz gotovih tipova
koji ostvaruju različite elemente bindinga. Npr:
-BinaryMessageEncodingBinaryElement koji ostvaruje binarno de/kodiranje XML poruka,
-AsymetricSecurityBindingElement koji ostvaruje asimetrično kriptiranje,
-HTTPSTransportBindingElement koji ostvaruje prijenos protokolom HTTP
-ReliableSessionBindingElement koji ostvaruje pouzdani prijenos poruka itd.
Iako postoji vrlo veliki broj kombinacija, zbog kompatibilnosti s klijentima treba imati na umu da samo
kanalni stog usluge koji se podudara s kanalnim stogom na strani klijenta osigurava ispravnu
komunikaciju, te takoñer treba voditi računa o tome da velik dio klijenata, a pogotovo ne-Windows
klijenti „ne razumiju“ sve elemente koji su možda dodani u kanalni stog usluge. WCF sadrži niz gotovih
bindinga koji se mogu koristiti kod razvoja usluga i klijenata, kao što su BasicHttpBinding,
WSHttpBinding, WSDualHttpBinding, WSFederationBinding itd.
Preostaje još vidjet na koji način se praktično koristi neki binding. Ukoliko se za hostanje usluge koristi
proizvoljna aplikacija tj. ServiceHost razred, tada se binding može instancirati u izvornom kôdu, na
temelju njega se može kreirati pristupna točka te se ta pristupna točka može dodati usluzi pomoću
AddServiceEndpoint metode koja pripada ServiceHost razredu. Bitno fleksibilniji način je primjena
konfiguracijske datoteke za definiranje pristupnih točaka, bindinga i drugih parametara. To pokazuje
idući primjer.
71
Primjer 3.5: Primjer definiranja jedne pristupne točke
3.3 WCF klijenti
Klijenti su korisnici usluga tj. operacija koje pružaju usluge. U općem slučaju klijenti WCF usluga (ni
drugih usluga) ne moraju biti WCF klijenti tj. klijenti programirani u .NET 3.0 okruženju no u ovom
slučaju se govori upravo o takvim klijentima.
Klijenti pristupaju usluzi putem pristupnih točaka koje su pojašnjene u prethodnom poglavlju. Svakoj
pristupnoj točki može pristupiti jedan ili više klijenata. Analogno kao kod ASMX usluga, za pristup
usluzi klijenti i dalje koriste koncept proxy objekta koji predstavlja uslugu na strani klijenta te obavlja
komunikaciju s samom uslugom za klijenta.
Klijenti su inicijatori komunikacije te u najvećem broju slučajeva klijenti pokreću sve procese u
uslužno-orijentiranim sustavima. Jasno je da i same usluge mogu biti klijenti drugih usluga, što
praktično znači da se programski kôd pozivanja usluge može nalaziti i u samim uslugama.
72
Slika 3.5: Pristup klijenta usluzi
Obzirom da se komunikacija odvija putem proxy objekta, upravo proxy objekt otvara kanal za
komunikaciju s uslugom koji je analogan kanalu o kojem je bilo govora kod izgradnje usluge.
Slaganjem kanala u podudarni kanalni stog s obje strane omogućava se komunikacija izmeñu usluge i
klijenta. Klijent koristi operacije usluge na način da poziva javne metode usluge. Sam proxy objekt koji
predstavlja neku uslugu se u klijentu može dobiti na više načina, a najčešći način je automatsko
generiranje iz metapodataka usluge tj. WSDL opisa usluge.
Klijent i usluga komuniciraju razmjenom poruka. U komunikaciji s WCF uslugama postoji nekoliko
osnovnih modela razmjene poruka, kao što su: datagramska komunikacija, zahtjev-odgovor
komunikacija i duplex komunikacija. Kod datagramske komunikacije klijent šalje usluzi poruku i ne
očekuje odgovor. Komunikacija zahtjev-odgovor se primjenjuje kada usluga na primljeni zahtjev treba
odgovoriti nekim odgovorom. Duplex komunikacija se koristi kod složenijih modela komunikacije
izmeñu klijenta i usluge.
Slika 3.6: Osnovni modeli razmjene poruka
73
Kod razvoja klijenta potrebno je prije svega generirati proxy razred za pristup usluzi. To se može
učiniti na dva načina. Jedno je instanciranje proxy razreda dobivenog svcutil alatom, iz metaopisa
usluge. Drugi način je primjena ChannelFactory razreda za „ručno“ instanciranje kanala za slanje
poruke.
Proxy klasa koju se generira iz metaopisa usluge ima isto ime kao i usluga, s sufiksom „proxy“. U
programskog kôdu klijenta potrebno je jednostavno instancirati proxy klasu te pozivati metode usluge.
U konstruktoru proxy klase može se definirati pristupna točka i uvezivanje usluge kojoj se pristupa.
EndpointAddress address =
new EndpointAddress("http://localhost:8000/Studomat/");
BasicProfileBinding binding = new BasicProfileBinding();
StudomatProxy proxy = new StudomatProxy(address, binding);
proxy.PrijaviIspit();
proxy.Close();
Primjer 3.5. : Instanciranje proxy klase i korištenje operacija usluge
Postavlja se pitanje na koji način se generira proxy razred kao ovaj korišten u prethodnom primjeru.
To je moguće ostvariti na nekoliko načina no uvijek se koristi svcutil alat. Najčešća mogućnost je
generiranje proxy razreda na temelju adrese usluge. Svcutil pristupa adresi i dohvaća potrebne
metapodatke za generiranje proxy razreda.
svcutil http://localhost:8000/Studomat/
Primjer 3.6. : Generiranje proxy klase iz adrese usluge
Druga mogućnost je generiranje proxy klase iz asemblija same usluge, što i nije često dostupno. U
slučaju da je dostupno taj proces se odvija u dva koraka. U prvom koraku se svcutil alatom na temelju
asemblija generira metaopis usluge, a u drugom koraku se istim alatom na temelju tog opisa generira
proxy razred.
svcutil Studomat.dll
svcutil *.wsdl *.xsd
Primjer 3.7. : Generiranje proxy klase iz asemblija usluge
74
REFERENCE
[1]
W3C - World Wide Web Consortium
[2]
W3C: Web Services Architecture, 2004.
[3]
W3C: Extensible Markup Language (XML) 1.0, 2004.
[4]
W3C: SOAP Version 1.2 Part 0: Primer, 2003.
[5]
W3C: Web Services Description Language (WSDL) Version 2.0 Part 0: Primer, 2006.
[6]
OASIS - Organization for the Advancement of Structured Information Standards
[7]
Ivana Kuzle: XML početnica, FER RASIP, 2004.
[8]
Anura Guruge: Web services theory and practice, Digital Press, 2004.
[9]
Erik T. Ray: Learning XML, O'Reilly, 2003.
[10]
Tomičić, Žarković, Rebernik: Arhitektura temeljena na servisima, FOI, 2006.
[11]
Scott Short: Building XML Web services for the Microsoft .NET platform, MSPress, 2002.
[12]
Matthew MacDonald: Microsoft .NET Distributed Applications: Integrating XML Web Services
and .NET Remoting, MSPress, 2003.
[13]
Eric Newcomer: Understanding Web Services; XML, WSDL, SOAP and UDDI, AWesley, 2002.
[14]
Auditorne vježbe iz kolegija Programske paradigme i jezici, FER, 2006.
[15]
Matthew MacDonald: Beginning ASP.NET 2.0 in C#, APress, 2006.
[16]
John Sharp: Microsoft Windows Communication Foundation Step by Step, Microsoft Press,
2007.
[17]
Justin Smith: Inside Microsoft Windows Communication Foundation, Microsoft Press, 2007.
[18]
David Pallmann, Programming Indigo BETA EDITION, Microsoft Press, 2005.
75