Vodič za SOAP web usluge: Što je SOAP protokol?
⚡ Pametni sažetak
SOAP (Simple Object Access Protocol) je protokol temeljen na XML-u za pristup web uslugama putem HTTP-a. Ovaj resurs objašnjava SOAP građevne blokove, strukturu poruke, elemente omotača i greške, komunikacijski model i praktičan primjer ASMX web usluge.
Što je SOAP?
SOAP je protokol temeljen na XML-u za pristup web uslugama putem HTTP-a. Ima neke specifikacije koje se mogu koristiti u svim aplikacijama.
SOAP je poznat kao Simple Object Access Protocol, ali je kasnije skraćen na SOAP v1.2. SOAP je protokol ili, drugim riječima, definicija načina na koji web servisi međusobno komuniciraju ili komuniciraju s klijentskim aplikacijama koje ih pozivaju.
SOAP je razvijen kao međujezik kako bi aplikacije izgrađene na različitim programskim jezicima mogle lako komunicirati jedna s drugom i izbjeći ekstremne razvojne napore.
Uvod u SOAP
U današnjem svijetu postoji ogroman broj aplikacija koje su izgrađene na različitim programskim jezicima. Na primjer, mogla bi postojati web aplikacija dizajnirana u Java, još jedan u .Netu i još jedan u PHP.
Razmjena podataka između aplikacija ključna je u današnjem umreženom svijetu. Ali razmjena podataka između ovih heterogenih aplikacija bila bi složena. To će biti i složenost koda za postizanje ove razmjene podataka.
Jedna od metoda koja se koristi za borbu protiv ove složenosti je korištenje XML-a (Extensible Markup Language) kao međujezika za razmjenu podataka između aplikacija.
Svaki programski jezik može razumjeti XML označni jezik. Stoga je XML korišten kao temeljni medij za razmjenu podataka.
Ali ne postoje standardne specifikacije o korištenju XML-a u svim programskim jezicima za razmjenu podataka. Tu nastupa SOAP softver.
SOAP je dizajniran za rad s XML-om preko HTTP-a i ima neku vrstu specifikacije koja se može koristiti u svim aplikacijama. U sljedećim poglavljima razmotrit ćemo dodatne detalje o SOAP protokolu.
Prednosti SOAP-a
SOAP je protokol koji se koristi za razmjenu podataka između aplikacija. Ispod su neki od razloga zašto se koristi SOAP.
- Kada se razvijaping Za web servise temeljene na SOAP-u potreban vam je neki jezik koji se može koristiti za komunikaciju web servisa s klijentskim aplikacijama. SOAP je savršen medij koji je razvijen kako bi se postigao taj cilj. Ovaj protokol također preporučuje W3C konzorcij, koji je upravljačko tijelo za sve web standarde.
- SOAP je lagani protokol koji se koristi za razmjenu podataka između aplikacija. Zabilježite ključnu riječ 'svjetloBudući da se SOAP programiranje temelji na XML jeziku, koji je sam po sebi lagani jezik za razmjenu podataka, SOAP kao protokol također spada u istu kategoriju.
- SOAP je dizajniran da bude neovisan o platformi i operativnom sustavu. Dakle, SOAP protokol može raditi s bilo kojom aplikacijom temeljenom na programskom jeziku na oba Windows i Linux platforme.
- Radi na HTTP protokolu – SOAP radi na HTTP protokolu, što je zadani protokol koji koriste sve web aplikacije. Stoga nije potrebna nikakva prilagodba za pokretanje web servisa izgrađenih na SOAP protokolu za rad na World Wide Webu.
SOAP građevni blokovi
SOAP specifikacija definira nešto što je poznato kao "SOAP poruka„, što se šalje web servisu i klijentskoj aplikaciji.
Donji dijagram SOAP arhitekture prikazuje različite građevne blokove SOAP poruke.
SOAP poruka nije ništa drugo nego obični XML dokument koji ima dolje navedene komponente.
- An Omotnica element koji identificira XML dokument kao SOAP poruku – Ovo je sadržni dio SOAP poruke i koristi se za enkapsulaciju svih detalja u SOAP poruci. Ovo je korijenski element u SOAP poruci.
- A Kombajn element koji sadrži informacije zaglavlja – Element zaglavlja može sadržavati informacije poput vjerodajnica za autentifikaciju koje može koristiti aplikacija koja poziva. Također može sadržavati definiciju složenih tipova koji se mogu koristiti u SOAP poruci. Prema zadanim postavkama, SOAP poruka može sadržavati parametre koji mogu biti jednostavnih tipova poput nizova znakova i brojeva, ali mogu biti i složeni objektni tip.
Jednostavan primjer SOAP usluge složenog tipa prikazan je u nastavku. Pretpostavimo da želimo poslati strukturirani tip podataka koji ima kombinaciju "Naziva vodiča" i "Vodič Description”, tada bismo definirali kompleksni tip kao što je prikazano dolje. Kompleksni tip definiran je oznakom elementa Svi potrebni elementi strukture, zajedno s njihovim odgovarajućim tipovima podataka, zatim se definiraju u kolekciji složenih tipova.
<xsd:complexType> <xsd:sequence> <xsd:element name="Tutorial Name" type="string"/> <xsd:element name="Tutorial Description" type="string"/> </xsd:sequence> </xsd:complexType>
A Tijelo element koji sadrži informacije o pozivu i odgovoru – Ovaj element sadrži stvarne podatke koji se trebaju slati između web servisa i aplikacije koja poziva. U nastavku je primjer SOAP web servisa za tijelo SOAP-a koje zapravo radi na složenom tipu definiranom u odjeljku zaglavlja. Evo odgovora naziva vodiča i vodiča. Description koji se šalje pozivnoj aplikaciji koja poziva ovu web uslugu.
<soap:Body> <GetTutorialInfo> <TutorialName>Web Services</TutorialName> <TutorialDescription>All about web services</TutorialDescription> </GetTutorialInfo> </soap:Body>
Struktura SOAP poruke
Jedna stvar koju treba napomenuti je da SOAP poruke obično automatski generira web usluga kada se pozove.
Kad god klijentska aplikacija pozove metodu u web-usluzi, web-usluga će automatski generirati SOAP poruku koja će sadržavati potrebne pojedinosti o podacima koji će biti poslani s web-usluge klijentskoj aplikaciji.
Kao što je objašnjeno u prethodnoj temi ovog SOAP tutorijala, jednostavna SOAP poruka ima sljedeće elemente:
- Element Envelope
- Element zaglavlja i
- Element tijela
- Element greške (neobavezno)
Pogledajmo primjer jednostavne SOAP poruke u nastavku i vidimo što svaki element zapravo radi.

- Kao što se vidi iz gornje SOAP poruke, prvi dio SOAP poruke je element omotnice koji se koristi za kapsuliranje cijele SOAP poruke.
- Sljedeći element je tijelo SOAP-a koje sadrži detalje stvarne poruke.
- Naša poruka sadrži web uslugu pod nazivom „Guru99WebService”.
- "Guru"99Webservice" prihvaća parametar tipa 'int' i ima naziv TutorialID.
Sada će se gornja SOAP poruka proslijediti između web usluge i klijentske aplikacije.
Možete vidjeti koliko su gore navedene informacije korisne za klijentsku aplikaciju. SOAP poruka govori klijentskoj aplikaciji naziv web servisa, koje parametre očekuje i koji je tip svakog parametra koji web servis preuzima.
Element omotnice SOAP-a
Prvi dio građevnog bloka je SOAP omotnica.
SOAP omotnica koristi se za kapsuliranje svih potrebnih detalja SOAP poruka koje se razmjenjuju između web usluge i klijentske aplikacije.
Element SOAP omotnice koristi se za označavanje početka i kraja SOAP poruke. To omogućuje klijentskoj aplikaciji koja poziva web uslugu da zna kada SOAP poruka završava.
Sljedeće točke mogu se uočiti na elementu omotnice SOAP-a.
- Svaka SOAP poruka mora imati korijenski element omotnice. Apsolutno je obavezno da SOAP poruka ima element omotnice.
- Svaki element Envelope mora imati barem jedan element tijela sapuna.
- Ako element Envelope sadrži element zaglavlja, ne smije sadržavati više od jednog i mora se pojaviti kao prvo dijete omotnice, prije elementa body.
- Omotnica se mijenja kada se mijenjaju verzije SOAP-a.
- SOAP procesor kompatibilan s v1.1 generira pogrešku nakon primanja poruke koja sadrži prostor imena v1.2 omotnice.
- SOAP procesor usklađen s v1.2 generira pogrešku Version Mismatch ako primi poruku koja ne uključuje prostor imena v1.2 omotnice.
U nastavku je primjer SOAP API-ja verzije 1.2 elementa SOAP envelope.
<?xml version="1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope" SOAP-ENV:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body> <Guru99WebService xmlns="http://tempuri.org/"> <TutorialID>int</TutorialID> </Guru99WebService> </soap:Body> </SOAP-ENV:Envelope>
Poruka greške
Kada se SOAP web servisu uputi zahtjev, vraćeni odgovor može biti u dva oblika: uspješan odgovor ili odgovor o pogrešci. Kada se generira uspjeh, odgovor poslužitelja uvijek će biti SOAP poruka. Ali ako se generiraju SOAP greške, one se vraćaju kao greške „HTTP 500“.
Poruka SOAP greške sastoji se od sljedećih elemenata.
- <faultCode> – Ovo je kod koji označava kod greške. Kod greške može biti bilo koja od dolje navedenih vrijednosti:
- SOAP-ENV:VersionMismatch – Ovo je kada se naiđe na nevažeći prostor imena za element SOAP Envelope.
- SOAP-ENV:MustUnderstand – Neposredni podređeni element elementa zaglavlja, s atributom mustUnderstand postavljenim na "1", nije shvaćen.
- SOAP-ENV:Klijent – Poruka je bila netočno oblikovana ili je sadržavala netočne informacije.
- SOAP-ENV:Poslužitelj – Došlo je do problema s poslužiteljem, pa se poruka nije mogla nastaviti.
- – Ovo je tekstualna poruka koja daje detaljan opis greške.
- (nije obavezno) – Ovo je tekstualni niz koji označava tko je uzrokovao kvar.
- (Neobavezno) – Ovo je element za poruke o pogrešci specifične za aplikaciju. Dakle, aplikacija može imati određenu poruku o pogrešci za različite scenarije poslovne logike.
Primjer za poruku o grešci
Primjer poruke o pogrešci dan je u nastavku. Pogreška se generira u scenariju u kojem klijent pokušava koristiti metodu pod nazivom TutorialID u klasi GetTutorial. Donja poruka o pogrešci generira se u slučaju da metoda ne postoji u definiranoj klasi.
<?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode> <faultstring xsi:type="xsd:string"> Failed to locate method (GetTutorialID) in class (GetTutorial) </faultstring> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Izlaz:
Kada izvršite gornji kod, prikazat će se greška poput „Neuspješno pronalaženje metode (GetTutorialID) u klasi (GetTutorial)“.
SOAP komunikacijski model
Sva komunikacija putem SOAP-a odvija se putem HTTP protokola. Prije SOAP-a, puno web usluge koristio standardni RPC (Remote Procedure Call) stil za komunikaciju. Ovo je bila najjednostavnija vrsta komunikacije, ali je imala puno ograničenja.
Sada u ovom SOAP API tutorialu, pogledajmo donji dijagram kako bismo vidjeli kako ova komunikacija funkcionira. U ovom primjeru pretpostavimo da poslužitelj hostira web uslugu koja pruža 2 metode kao što su:
- GetEmployee – Ovim bi se dobili svi podaci o zaposleniku.
- Postavi Zaposlenika – To bi u skladu s tim postavilo vrijednost detalja poput odjela zaposlenika, plaće itd.
U normalnoj komunikaciji u stilu RPC-a, klijent bi samo pozvao metode u svom zahtjevu i poslao potrebne parametre poslužitelju, a poslužitelj bi potom poslao željeni odgovor.
Gore navedeni komunikacijski model ima sljedeća ozbiljna ograničenja:
- Nije neovisno o jeziku – Poslužitelj koji hostira metode bio bi u određenom programskom jeziku i obično bi pozivi poslužitelju bili samo u tom programskom jeziku.
- Nije standardni protokol – Kada se uputi poziv udaljenoj proceduri, poziv se ne provodi putem standardnog protokola. To je bio problem jer se uglavnom sva komunikacija putem weba morala odvijati putem HTTP protokola.
- firewall – Budući da RPC pozivi ne idu preko uobičajenog protokola, odvojeni portovi moraju biti otvoreni na poslužitelju kako bi se omogućilo klijentu da komunicira s poslužiteljem. Obično bi svi vatrozidi blokirali ovu vrstu prometa, a općenito je bilo potrebno mnogo konfiguracije kako bi se osiguralo da ova vrsta komunikacije između klijenta i poslužitelja funkcionira.
Kako bi prevladao sva gore navedena ograničenja, SOAP bi tada koristio sljedeći komunikacijski model.
- Klijent bi formatirao informacije o pozivu procedure i svim argumentima u SOAP poruku i poslao je poslužitelju kao dio HTTP zahtjeva. Ovaj proces enkapsuliranja podataka u SOAP poruku bio je poznat kao Marshalling.
- Poslužitelj bi zatim raspakirao poruku koju je poslao klijent, vidio što je klijent zatražio i zatim poslao odgovarajući odgovor natrag klijentu kao SOAP poruku. Praksa raspakiranjaping Zahtjev koji šalje klijent poznat je kao Demarshalling.
Praktični primjer SOAP-a
Sada u ovome SoapUI U tutorialu, pogledajmo praktičan SOAP primjer. Vjerojatno je jedan od najboljih načina da vidite kako se generiraju SOAP poruke zapravo vidjeti web servis u akciji.
Ova će se tema baviti korištenjem Microsoft.Net framework za izgradnju ASMX web usluge. Ova vrsta web usluge podržava i SOAP verziju 1.1 i verziju 1.2.
ASMX web usluge automatski generiraju Jezik definicije web usluge (WSDL) dokument. Ovaj WSDL dokument zahtijeva pozivna klijentska aplikacija kako bi aplikacija znala što web usluga može učiniti.
U našem primjeru, izradit ćemo jednostavnu web uslugu koja će se koristiti za vraćanje niza znakova aplikaciji koja poziva web uslugu. Ova web usluga bit će smještena u Asp.Net web aplikacija. Zatim ćemo pozvati web uslugu i vidjeti rezultat koji vraća web usluga.
Visual Studio će nam također pokazati što je SOAP poruka koja se prenosi između web servisa i pozivajuće aplikacije. Prvi preduvjet za postavljanje naše web servisne aplikacije može se izvršiti slijedeći dolje navedene korake. Za ovaj primjer provjerite imate li Visual Studio 2013 instaliran na svom sustavu.
Korak 1) Prvi korak je stvaranje prazne ASP.Net web aplikacije. U Visual Studio 2013 kliknite na opciju izbornika Datoteka->Novi projekt.
Nakon što kliknete opciju Novi projekt, Visual Studio će vam dati još jedan dijaloški okvir za odabir vrste projekta i davanje potrebnih pojedinosti o projektu. Ovo je objašnjeno u sljedećem koraku.
Korak 2) U ovom koraku
- Prvo odaberite C# web predložak ASP.NET web aplikacije. Projekt mora biti ovog tipa kako bi se stvorio projekt SOAP usluga. Odabirom ove opcije, Visual Studio će zatim izvršiti potrebne korake za dodavanje potrebnih datoteka koje su potrebne bilo kojoj web-aplikaciji.
- Dajte naziv svom projektu, što je u našem slučaju webservice.asmx. Zatim obavezno navedite lokaciju gdje će se pohraniti datoteke projekta.
Nakon što završite, vidjet ćete stvorenu datoteku projekta u vašem istraživaču rješenja u Visual Studiju 2013.
Korak 3) U ovom koraku ćemo našem projektu dodati datoteku web servisa.
- Prvo, desnom tipkom miša kliknite datoteku projekta kao što je prikazano dolje.
- Nakon što desnom tipkom miša kliknete na datoteku projekta, imate mogućnost odabrati opciju "Dodaj->Web servis (ASMX)" za dodavanje datoteke web servisa. Samo unesite naziv Tutorial Service za datoteku naziva web servisa.
Korak 4) Dodajte sljedeći kod svojoj asmx datoteci Tutorial Service.
Code Objašnjenje:
- Ovaj redak koda daje naziv za vašu datoteku web usluge. Ovo je važan korak jer omogućuje klijentskoj aplikaciji da pozove web uslugu putem naziva web usluge.
- Obično se datoteka klase koristi za kapsuliranje funkcionalnosti web usluge. Tako će datoteka klase sadržavati definiciju svih web metoda koje će pružiti neke funkcije klijentskoj aplikaciji.
- Ovdje je [WebMethod] poznat kao atribut koji opisuje funkciju. Sljedeći korak stvara funkciju pod nazivom „Guru99WebService”, ali uključivanjem ovog koraka dodavanja atributa [WebMethod] osigurava se da klijentska aplikacija može pozvati ovu metodu. Ako ovaj atribut nije na mjestu, klijentska aplikacija nikada ne može pozvati metodu.
- Ovdje definiramo funkciju pod nazivom 'Guru99WebService' koja će se koristiti za vraćanje niza znakova klijentskoj aplikaciji koja poziva. Ova funkcija je web servis koji može pozvati bilo koja klijentska aplikacija.
- Koristimo naredbu return za vraćanje niza znakova „Ovo je Guru99 Web servis” klijentskoj aplikaciji.
Ako se kôd uspješno izvrši, sljedeći će se izlaz prikazati kada pokrenete kôd u pregledniku.
Izlaz:
- Izlaz jasno pokazuje da je naziv naše web usluge "Guru99 Web Service”, što je rezultat davanja imena našoj web usluzi.
- Također možemo vidjeti da možemo pozvati web servis. Ako kliknemo gumb Pozovi, dobit ćemo donji odgovor u web pregledniku.
Gornji izlaz:
- Jasno pokazuje da pozivanjem web metode, niz "Ovo je GuruVraća se "99 Web service".
- Visual Studio vam također omogućuje pregled SOAP zahtjeva za porukom i odgovora koji se generira kada se pozove gornja web usluga.
SOAP zahtjev koji se generira kada se pozove web usluga prikazan je u nastavku.
Code Objašnjenje:
- Prvi dio SOAP poruke je element omotnice, o kojem je bilo riječi u prethodnim poglavljima. To je element enkapsulacije koji je prisutan u svakoj SOAP poruci.
- SOAP Tijelo je sljedeći element i sadrži stvarne detalje SOAP poruke.
- Treći dio je element koji određuje da želimo pozvati uslugu koja se zove 'Guru99WebService'.
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soap:Body> <Guru99WebServiceResponse xmlns="http://tempuri.org/"> <Guru99WebServiceResult>string</Guru99WebServiceResult> </Guru99WebServiceResponse> </soap:Body> </soap:Envelope>
Code Objašnjenje:
- Prvi dio SOAP poruke je element omotnice, o kojem je bilo riječi u prethodnim poglavljima. To je element enkapsulacije koji je prisutan u svakoj SOAP poruci.
- SOAP Tijelo je sljedeći element i sadrži stvarne detalje SOAP poruke.
- Zanimljiv dio koji ćete sada vidjeti je atribut 'string'. On klijentskoj aplikaciji govori da pozvana web usluga vraća objekt tipa string. Ovo je vrlo korisno jer inače klijentska aplikacija ne bi znala što web usluga vraća.














