Tutorial privind serviciile web SOAP: Ce este protocolul SOAP? EXEMPLU
Ce este SAPUNUL?
SOAP este un protocol bazat pe XML pentru accesarea serviciilor web prin HTTP. Are anumite specificaศii care ar putea fi utilizate รฎn toate aplicaศiile.
SOAP este cunoscut sub numele de Protocolul de acces simplu la obiect, dar mai tรขrziu a fost doar scurtat la SOAP v1.2. SOAP este un protocol sau, cu alte cuvinte, este o definiศie a modului รฎn care serviciile web vorbesc รฎntre ele sau vorbesc cu aplicaศiile client care le invocฤ.
SOAP a fost dezvoltat ca un limbaj intermediar, astfel รฎncรขt aplicaศiile construite pe diferite limbaje de programare sฤ poatฤ vorbi cu uศurinศฤ รฎntre ele ศi sฤ evite efortul extrem de dezvoltare.
SOAP Introducere
รn lumea de astฤzi, existฤ un numฤr mare de aplicaศii care sunt construite pe diferite limbaje de programare. De exemplu, ar putea exista o aplicaศie web proiectatฤ รฎn Java, altul รฎn .Net ศi altul รฎn PHP.
Schimbul de date รฎntre aplicaศii este crucial รฎn lumea รฎn reศea de astฤzi. Dar schimbul de date รฎntre aceste aplicaศii eterogene ar fi complex. La fel va fi ศi complexitatea codului pentru a realiza acest schimb de date.
Una dintre metodele folosite pentru a combate aceastฤ complexitate este utilizarea XML (Extensible Markup Language) ca limbaj intermediar pentru schimbul de date รฎntre aplicaศii.
Fiecare limbaj de programare poate รฎnศelege limbajul de marcare XML. Prin urmare, XML a fost folosit ca mediu de bazฤ pentru schimbul de date.
Dar nu existฤ specificaศii standard privind utilizarea XML รฎn toate limbajele de programare pentru schimbul de date. Aici intervine software-ul SOAP.
SOAP a fost proiectat sฤ funcศioneze cu XML prin HTTP ศi sฤ aibฤ un fel de specificaศie care ar putea fi utilizatฤ รฎn toate aplicaศiile. Vom analiza mai multe detalii despre protocolul SOAP รฎn capitolele urmฤtoare.
Avantajele SOAP
SOAP este protocolul folosit pentru schimbul de date รฎntre aplicaศii. Mai jos sunt cรขteva dintre motivele pentru care este utilizat SOAP.
- Cรขnd se dezvoltฤping Pentru serviciile web bazate pe SOAP, este nevoie de un limbaj care poate fi utilizat de serviciile web pentru a comunica cu aplicaศiile client. SOAP este mediul perfect, dezvoltat pentru a atinge acest scop. Acest protocol este, de asemenea, recomandat de consorศiul W3C, care este organismul de conducere pentru toate standardele web.
- SOAP este un protocol uศor care este utilizat pentru schimbul de date รฎntre aplicaศii. Notaศi cuvรขntul cheie 'uศoarฤ.' Deoarece programarea SOAP se bazeazฤ pe limbajul XML, care รฎn sine este un limbaj uศor de schimb de date, deci SOAP ca protocol care se รฎncadreazฤ, de asemenea, รฎn aceeaศi categorie.
- SOAP este conceput pentru a fi independent de platformฤ ศi este, de asemenea, conceput pentru a fi independent de sistemul de operare. Deci, protocolul SOAP poate funcศiona orice aplicaศie bazatฤ pe limbaj de programare pe ambele Windows ศi Linux platformฤ.
- Funcศioneazฤ pe protocolul HTTP โ SOAP funcศioneazฤ pe protocolul HTTP, care este protocolul implicit utilizat de toate aplicaศiile web. Prin urmare, nu existฤ niciun fel de personalizare care este necesarฤ pentru a rula serviciile web construite pe protocolul SOAP pentru a funcศiona pe World Wide Web.
Blocuri de construcศie SOAP
Specificaศia SOAP defineศte ceva cunoscut sub numele de โmesaj SOAPโ care este ceea ce este trimis cฤtre serviciul web ศi aplicaศia client.
Diagrama de mai jos a arhitecturii SOAP aratฤ diferitele blocuri ale unui mesaj SOAP.

Mesajul SOAP nu este altceva decรขt un simplu document XML care are componentele de mai jos.
- Un element Plic care identificฤ documentul XML ca un mesaj SOAP โ Aceasta este partea care conศine mesajul SOAP ศi este folosit pentru a รฎncapsula toate detaliile din mesajul SOAP. Acesta este elementul rฤdฤcinฤ din mesajul SOAP.
- Un element Header care conศine informaศii despre antet โ Elementul antet poate conศine informaศii precum acreditฤrile de autentificare care pot fi utilizate de aplicaศia care apeleazฤ. De asemenea, poate conศine definiศia tipurilor complexe care ar putea fi utilizate รฎn mesajul SOAP. รn mod implicit, mesajul SOAP poate conศine parametri care ar putea fi de tipuri simple, cum ar fi ศiruri ศi numere, dar poate fi ศi un tip de obiect complex.
Un exemplu simplu de serviciu SOAP de tip complex este prezentat mai jos.
Sฤ presupunem cฤ dorim sฤ trimitem un tip de date structurate care sฤ aibฤ o combinaศie de โNume tutorialโ ศi โTutorial Descriptionโ, atunci vom defini tipul complex aศa cum se aratฤ mai jos.
Tipul complex este definit de eticheta elementului . Toate elementele necesare ale structurii รฎmpreunฤ cu tipurile lor de date respective sunt apoi definite รฎn colecศia de tipuri complexe.
<xsd:complexType> <xsd:sequence> <xsd:element name="Tutorial Name" type="string"/> <xsd:element name="Tutorial Description" type="string"/> </xsd:sequence> </xsd:complexType>
- Un element Body care conศine informaศii despre apel ศi rฤspuns โ Acest element este ceea ce conศine datele reale care trebuie trimise รฎntre serviciul web ศi aplicaศia de apelare. Mai jos este un exemplu de serviciu web SOAP al corpului SOAP care funcศioneazฤ de fapt pe tipul complex definit รฎn secศiunea antet. Iatฤ rฤspunsul Tutorial Name ศi Tutorial Description care este trimis cฤtre aplicaศia de apelare care apeleazฤ acest serviciu web.
<soap:Body> <GetTutorialInfo> <TutorialName>Web Services</TutorialName> <TutorialDescription>All about web services</TutorialDescription> </GetTutorialInfo> </soap:Body>
Structura mesajelor SOAP
Un lucru de remarcat este cฤ mesajele SOAP sunt รฎn mod normal generate automat de serviciul web atunci cรขnd este apelat.
Ori de cรขte ori o aplicaศie client apeleazฤ o metodฤ รฎn serviciul web, serviciul web va genera automat un mesaj SOAP care va avea detaliile necesare ale datelor care vor fi trimise de la serviciul web cฤtre aplicaศia client.
Dupฤ cum sa discutat รฎn subiectul anterior al acestui tutorial SOAP, un mesaj SOAP simplu are urmฤtoarele elemente:
- Elementul Plic
- Elementul antet ศi
- Elementul corpului
- Elementul de eroare (Opศional)
Sฤ ne uitฤm la un exemplu de mai jos al unui mesaj SOAP simplu ศi sฤ vedem ce element face de fapt.
- Dupฤ cum se vede din mesajul SOAP de mai sus, prima parte a mesajului SOAP este elementul plic care este folosit pentru a รฎncapsula รฎntregul mesaj SOAP.
- Urmฤtorul element este corpul SOAP care conศine detaliile mesajului real.
- Mesajul nostru conศine un serviciu web numit โGuruโ99WebServiceโ.
- "Guruโ99Webserviceโ acceptฤ un parametru de tipul โintโ ศi are numele TutorialID.
Acum, mesajul SOAP de mai sus va fi transmis รฎntre serviciul web ศi aplicaศia client.
Puteศi vedea cรขt de utile sunt informaศiile de mai sus pentru aplicaศia client. Mesajul SOAP spune aplicaศiei client care este numele serviciului web ศi, de asemenea, ce parametri se aศteaptฤ ศi care este tipul fiecฤrui parametru care este preluat de serviciul web.
Element plic SOAP
Primul bit al blocului de construcศie este plicul SOAP.
Plicul SOAP este folosit pentru a รฎncapsula toate detaliile necesare ale mesajelor SOAP, care sunt schimbate รฎntre serviciul web ศi aplicaศia client.
Elementul plic SOAP este folosit pentru a indica รฎnceputul ศi sfรขrศitul unui mesaj SOAP. Acest lucru permite aplicaศiei client care apeleazฤ serviciul web sฤ ศtie cรขnd se terminฤ mesajul SOAP.
Urmฤtoarele puncte pot fi notate pe elementul plic SOAP.
- Fiecare mesaj SOAP trebuie sฤ aibฤ un element Envelope rฤdฤcinฤ. Este absolut obligatoriu ca mesajul SOAP sฤ aibฤ un element plic.
- Fiecare element Plic trebuie sฤ aibฤ cel puศin un element de corp de sฤpun.
- Dacฤ un element Envelope conศine un element antet, acesta trebuie sฤ conศinฤ cel mult unul ศi trebuie sฤ aparฤ ca primul copil al Plicului, รฎnaintea elementului body.
- Plicul se schimbฤ cรขnd versiunile SOAP se schimbฤ.
- Un procesor SOAP compatibil cu v1.1 genereazฤ o eroare la primirea unui mesaj care conศine spaศiul de nume plic v1.2.
- Un procesor SOAP compatibil cu v1.2 genereazฤ o eroare Version Mismatch dacฤ primeศte un mesaj care nu include spaศiul de nume al plicului v1.2.
Mai jos este un exemplu de API SOAP al versiunii 1.2 a elementului plic SOAP.
<?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>
Mesajul de eroare
Cรขnd se face o solicitare cฤtre un serviciu web SOAP, rฤspunsul returnat poate fi fie de 2 forme, care sunt un rฤspuns de succes sau un rฤspuns de eroare. Cรขnd se genereazฤ un succes, rฤspunsul de la server va fi รฎntotdeauna un mesaj SOAP. Dar dacฤ sunt generate erori SOAP, acestea sunt returnate ca erori โHTTP 500โ.
Mesajul SOAP Fault constฤ din urmฤtoarele elemente.
- <faultCode>โ Acesta este codul care desemneazฤ codul erorii. Codul de eroare poate fi oricare dintre valorile de mai jos
- SOAP-ENV:VersionMismatch โ Acesta este momentul รฎn care este รฎntรขlnit un spaศiu de nume nevalid pentru elementul SOAP Envelope.
- SOAP-ENV:MustUnderstand โ Un element copil imediat al elementului Header, cu atributul mustUnderstand setat la โ1โ, nu a fost รฎnศeles.
- SOAP-ENV:Client โ โโMesajul a fost format incorect sau conศinea informaศii incorecte.
- SOAP-ENV:Server โ A apฤrut o problemฤ cu serverul, aศa cฤ mesajul nu a putut continua.
- โ Acesta este mesajul text care oferฤ o descriere detaliatฤ a erorii.
- (Opศional)โ Acesta este un ศir de text care indicฤ cine a cauzat defecศiunea.
- (Opศional) โ Acesta este elementul pentru mesajele de eroare specifice aplicaศiei. Deci, aplicaศia ar putea avea un mesaj de eroare specific pentru diferite scenarii logice de afaceri.
Exemplu pentru mesajul de eroare
Un exemplu de mesaj de eroare este dat mai jos. Eroarea este generatฤ dacฤ scenariul รฎn care clientul รฎncearcฤ sฤ foloseascฤ o metodฤ numitฤ TutorialID รฎn clasa GetTutorial.
Mesajul de eroare de mai jos este generat รฎn cazul รฎn care metoda nu existฤ รฎn clasa definitฤ.
<?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>
ieศire:
Cรขnd executaศi codul de mai sus, va afiศa o eroare precum โEศuat la localizarea metodei (GetTutorialID) รฎn clasฤ (GetTutorial)โ
Modelul de comunicare SOAP
Toatฤ comunicarea prin SOAP se face prin protocolul HTTP. รnainte de SOAP, o mulศime de servicii web a folosit stilul standard RPC (Remote Procedure Call) pentru comunicare. Acesta era cel mai simplu tip de comunicare, dar avea multe limitฤri.
Acum, รฎn acest tutorial SOAP API, sฤ luฤm รฎn considerare diagrama de mai jos pentru a vedea cum funcศioneazฤ aceastฤ comunicare. รn acest exemplu, sฤ presupunem cฤ serverul gฤzduieศte un serviciu web care a furnizat 2 metode ca
- GetEmployee โ Acest lucru ar obศine toate detaliile angajaศilor
- SetEmployee โ Aceasta ar stabili valoarea detaliilor precum departamentul angajaศilor, salariul etc. รฎn consecinศฤ.
รn comunicarea normalฤ รฎn stil RPC, clientul ar apela doar metodele din cererea sa ศi ar trimite parametrii necesari cฤtre server, iar serverul ar trimite apoi rฤspunsul dorit.
Modelul de comunicare de mai sus are limitele serioase de mai jos
- Nu independent de limbฤ โ Serverul care gฤzduieศte metodele ar fi รฎntr-un anumit limbaj de programare ศi, รฎn mod normal, apelurile cฤtre server ar fi doar รฎn acel limbaj de programare.
- Nu protocolul standard โ Cรขnd se efectueazฤ un apel cฤtre procedura de la distanศฤ, apelul nu este efectuat prin protocolul standard. Aceasta a fost o problemฤ, deoarece รฎn mare parte toate comunicฤrile pe web trebuiau fฤcute prin protocolul HTTP.
- firewall-uri โ Deoarece apelurile RPC nu trec prin protocolul normal, porturile separate trebuie sฤ fie deschise pe server pentru a permite clientului sฤ comunice cu serverul. รn mod normal, toate firewall-urile ar bloca acest tip de trafic ศi, รฎn general, era necesarฤ o mulศime de configuraศii pentru a se asigura cฤ acest tip de comunicare รฎntre client ศi server va funcศiona.
Pentru a depฤศi toate limitฤrile menศionate mai sus, SOAP ar folosi modelul de comunicare de mai jos
- Clientul ar formata informaศiile referitoare la apelul procedurii ศi orice argument รฎntr-un mesaj SOAP ศi le trimite serverului ca parte a unei cereri HTTP. Acest proces de รฎncapsulare a datelor รฎntr-un mesaj SOAP era cunoscut ca Marshalling.
- Serverul ar despacheta apoi mesajul trimis de client, ar vedea ce a solicitat clientul ศi apoi ar trimite rฤspunsul corespunzฤtor รฎnapoi clientului sub formฤ de mesaj SOAP. Practica despachetฤriiping O cerere trimisฤ de client este cunoscutฤ sub numele de Demarshaling.
Exemplu practic de SAPUN
Acum รฎn asta SoapUI tutorial, haideศi sฤ vedem un exemplu practic SOAP,
Probabil cฤ una dintre cele mai bune modalitฤศi de a vedea cum sunt generate mesajele SOAP este de a vedea de fapt un serviciu web รฎn acศiune.
Acest subiect va analiza utilizarea Microsoft.Net framework pentru a construi un serviciu web ASMX. Acest tip de serviciu web acceptฤ atรขt versiunea SOAP 1.1, cรขt ศi versiunea 1.2.
Serviciile web ASMX genereazฤ automat Limbajul de definire a serviciului web (WSDL) document. Acest document WSDL este solicitat de aplicaศia client care apeleazฤ, astfel รฎncรขt aplicaศia sฤ ศtie ce este capabil sฤ facฤ serviciul web.
รn exemplul nostru, vom crea un serviciu web simplu, care va fi folosit pentru a returna un ศir aplicaศiei care apeleazฤ serviciul web.
Acest serviciu web va fi gฤzduit รฎntr-un Asp.Net aplicatie web. Apoi vom invoca serviciul web ศi vom vedea rezultatul care este returnat de serviciul web.
Visual Studio ne va arฤta, de asemenea, ce mesaj SOAP este transmis รฎntre serviciul web ศi aplicaศia de apelare.
Prima condiศie prealabilฤ pentru a configura aplicaศia noastrฤ de servicii web, care poate fi fฤcutฤ urmรขnd paศii de mai jos.
Vฤ rugฤm sฤ vฤ asiguraศi cฤ aveศi Visual Studio 2013 instalat pe sistemul dvs. pentru acest exemplu.
Pas 1) Primul pas este sฤ creaศi o aplicaศie web ASP.Net goalฤ. Din Visual Studio 2013, faceศi clic pe opศiunea de meniu Fiศier->Proiect nou.
Odatฤ ce faceศi clic pe opศiunea Proiect nou, Visual Studio vฤ va oferi apoi o altฤ casetฤ de dialog pentru a alege tipul de proiect ศi pentru a oferi detaliile necesare ale proiectului. Acest lucru este explicat รฎn pasul urmฤtor.
Pas 2) รn aceastฤ etapฤ,
- Asiguraศi-vฤ cฤ alegeศi mai รฎntรขi C# ศablon web al aplicaศiei web ASP.NET. Proiectul trebuie sฤ fie de acest tip pentru a crea un proiect de servicii SOAP. Alegรขnd aceastฤ opศiune, Visual Studio va efectua apoi paศii necesari pentru a adฤuga fiศierele necesare care sunt solicitate de orice aplicaศie bazatฤ pe web.
- Daศi un nume pentru proiectul dvs. care, รฎn cazul nostru, a fost dat ca webservice.asmx. Apoi asiguraศi-vฤ cฤ oferiศi o locaศie รฎn care vor fi stocate fiศierele de proiect.
Odatฤ terminat, veศi vedea fiศierul de proiect creat รฎn exploratorul de soluศii รฎn Visual Studio 2013.
Pas 3) รn aceastฤ etapฤ,
Vom adฤuga un fiศier serviciu web la proiectul nostru
- Mai รฎntรขi faceศi clic dreapta pe fiศierul de proiect, aศa cum se aratฤ mai jos
- Odatฤ ce faceศi clic dreapta pe fiศierul de proiect, aveศi ศansa de a alege opศiunea โAdd->Web Service(ASMX) pentru a adฤuga un fiศier de serviciu web. Doar furnizaศi un nume de Serviciu de tutorial pentru fiศierul cu numele serviciului web.
Pas 4) Adฤugaศi urmฤtorul cod รฎn fiศierul asmx al serviciului de instruire.
Code Explicaลฃie:
- Aceastฤ linie de cod oferฤ un nume pentru fiศierul serviciului dvs. web. Acesta este un pas important, deoarece permite aplicaศiei client sฤ apeleze serviciul web prin numele serviciului web.
- รn mod normal, un fiศier de clasฤ este utilizat pentru a รฎncapsula funcศionalitatea unui serviciu web. Deci fiศierul de clasฤ va avea definiศia tuturor metodelor web care vor oferi anumite funcศionalitฤศi aplicaศiei client.
- Aici [WebMethod] este cunoscut ca un atribut care descrie o funcศie. Pasul urmฤtor creeazฤ o funcศie numitฤ โGuru99WebServiceโ, dar includerea acestui pas de adฤugare a unui atribut [WebMethod] asigurฤ faptul cฤ aceastฤ metodฤ poate fi invocatฤ de o aplicaศie client. Dacฤ acest atribut nu este prezent, atunci metoda nu poate fi niciodatฤ apelatฤ de o aplicaศie client.
- Aici definim o funcศie numitฤ 'Guru99WebService', care va fi utilizatฤ pentru a returna un ศir de caractere aplicaศiei client apelante. Aceastฤ funcศie este un serviciu web care poate fi apelat de orice aplicaศie client.
- Folosim instrucศiunea return pentru a returna ศirul de caractere โAcesta este un Guru99โ serviciu Web cฤtre aplicaศia client.
Dacฤ codul este executat cu succes, urmฤtoarea ieศire va fi afiศatฤ atunci cรขnd rulaศi codul รฎn browser.
ieศire:
- Rezultatul aratฤ clar cฤ numele serviciului nostru web este โGuru99 Web Serviceโ, care este rezultatul acordฤrii unui nume serviciului nostru web.
- De asemenea, putem vedea cฤ putem invoca serviciul web. Dacฤ facem clic pe butonul Invoke, vom primi rฤspunsul de mai jos รฎn browserul web.
Ieศirea de mai sus,
- Aratฤ clar cฤ prin invocarea metodei web, ศirul โAcesta este un GuruSe returneazฤ โ99 Web serviceโ.
- De asemenea, Visual Studio vฤ permite sฤ vizualizaศi solicitarea mesajului SOAP ศi rฤspunsul care este generat atunci cรขnd este apelat serviciul web de mai sus.
Solicitarea SOAP care este generatฤ atunci cรขnd este apelat serviciul web este prezentatฤ mai jos.
Code Explicaลฃie:
- Prima parte a mesajului SOAP este elementul plic care este ceea ce a fost discutat รฎn capitolele anterioare. Acesta este elementul de รฎncapsulare care este prezent รฎn fiecare mesaj SOAP.
- Corpul SOAP este urmฤtorul element ศi conศine detaliile reale ale mesajului SOAP.
- A treia parte este elementul care specificฤ faptul cฤ dorim sฤ apelฤm serviciul numit โ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 Explicaลฃie:
- Prima parte a mesajului SOAP este elementul plic care este ceea ce a fost discutat รฎn capitolele anterioare. Acesta este elementul de รฎncapsulare care este prezent รฎn fiecare mesaj SOAP.
- Corpul SOAP este urmฤtorul element ศi conศine detaliile reale ale mesajului SOAP.
- Partea interesantฤ pe care o veศi vedea acum este atributul โศirโ. Aceasta รฎi spune aplicaศiei client cฤ serviciul web apelat returneazฤ un obiect de tip ศir. Acest lucru este foarte util deoarece dacฤ aplicaศia client care altfel nu ar ศti ce returneazฤ serviciul web.
Rezumat
- SOAP este un protocol care este folosit pentru a schimba date รฎntre aplicaศii care sunt construite pe diferite limbaje de programare.
- SOAP este construit pe specificaศia XML ศi funcศioneazฤ cu protocolul HTTP. Acest lucru รฎl face perfect pentru utilizare รฎn cadrul aplicaศiilor web.
- Blocurile SOAP constau dintr-un mesaj SOAP. Fiecare mesaj SOAP constฤ dintr-un element plic, un antet ศi un element body.
- Elementul plic este elementul obligatoriu din mesajul SOAP ศi este utilizat pentru a รฎncapsula toate datele din mesajul SOAP.
- Elementul antet poate fi folosit pentru a conศine informaศii precum informaศii de autentificare sau definirea unor tipuri de date complexe.
- Elementul body este elementul principal care conศine definiศia metodelor web รฎmpreunฤ cu orice informaศii despre parametri, dacฤ este necesar.












