SOAP Web Services oktatóanyag: Mi az a SOAP Protocol? PÉLDA
Mi az a SZAPPAN?
A SOAP egy XML-alapú protokoll a webszolgáltatások HTTP-n keresztüli elérésére. Van néhány specifikációja, amely minden alkalmazásban használható.
A SOAP Simple Object Access Protocol néven ismert, de a későbbi időkben csak lerövidült SOAP v1.2-re. A SOAP egy protokoll, vagy más szóval annak meghatározása, hogy a webszolgáltatások hogyan beszélnek egymással vagy az őket meghívó ügyfélalkalmazásokkal.
A SOAP-ot köztes nyelvként fejlesztették ki, hogy a különféle programozási nyelvekre épülő alkalmazások könnyen beszélhessenek egymással, és elkerüljék a rendkívüli fejlesztési erőfeszítéseket.
SZAPPAN Bevezetés
A mai világban rengeteg olyan alkalmazás létezik, amelyek különböző programozási nyelvekre épülnek. Például lehet egy webalkalmazás, amelyet beterveztek Java, egy másik a .Neten és egy másik a PHP.
Az alkalmazások közötti adatcsere kulcsfontosságú a mai hálózati világban. Az ilyen heterogén alkalmazások közötti adatcsere azonban bonyolult lenne. Így lesz az adatcsere végrehajtásához szükséges kód összetettsége is.
Az e bonyolultság elleni küzdelem egyik módszere az XML (Extensible Markup Language) használata az alkalmazások közötti adatcsere közbenső nyelveként.
Minden programozási nyelv képes megérteni az XML jelölőnyelvet. Ezért az XML-t használták az adatcsere mögöttes médiumaként.
De nincsenek szabványos előírások az XML használatára az összes programozási nyelven az adatcseréhez. Itt jön be a SOAP szoftver.
A SOAP-ot úgy tervezték, hogy HTTP-n keresztül működjön XML-lel, és rendelkezzen valamilyen specifikációval, amely minden alkalmazásban használható. A SOAP protokoll további részleteivel a következő fejezetekben foglalkozunk.
A SOAP előnyei
A SOAP az alkalmazások közötti adatcseréhez használt protokoll. Az alábbiakban felsorolunk néhány okot, amelyek miatt miért használjuk a SOAP-ot.
- A SOAP alapú webszolgáltatások fejlesztésekor rendelkeznie kell bizonyos nyelvvel, amelyet a webszolgáltatások használhatnak az ügyfélalkalmazásokkal való kommunikációhoz. A SOAP a tökéletes médium, amelyet e cél elérése érdekében fejlesztettek ki. Ezt a protokollt a W3C konzorcium is ajánlja, amely az összes webes szabvány irányító testülete.
- A SOAP egy könnyű protokoll, amelyet az alkalmazások közötti adatcserére használnak. Jegyezze fel a kulcsszótfény.' Mivel a SOAP programozás az XML nyelven alapszik, amely maga is egy könnyű adatcsere nyelv, ezért a SOAP mint protokoll szintén ugyanebbe a kategóriába tartozik.
- A SOAP-ot platformfüggetlennek és operációs rendszer-függetlennek tervezték. Így a SOAP protokoll bármilyen programozási nyelv alapú alkalmazást képes működni mindkettőn Windows és a Linux platform.
- A HTTP protokollon működik – a SOAP a HTTP protokollon működik, amely az összes webalkalmazás által használt alapértelmezett protokoll. Ezért nincs szükség semmilyen testreszabásra a SOAP protokollra épülő webszolgáltatások futtatásához, hogy a világhálón működjenek.
SZAPPAN építőkockák
A SOAP specifikációja úgy definiál valamit, mint „SZAPPAN üzenet”, ami elküldésre kerül a webszolgáltatásnak és a kliens alkalmazásnak.
A SOAP architektúra alábbi diagramja a SOAP üzenetek különböző építőelemeit mutatja be.

A SOAP üzenet nem más, mint egy egyszerű XML dokumentum, amely az alábbi összetevőket tartalmazza.
- Borítékelem, amely az XML-dokumentumot SOAP-üzenetként azonosítja – Ez a SOAP-üzenetet tartalmazza, és a SOAP-üzenet összes részletének beágyazására szolgál. Ez a gyökérelem a SOAP üzenetben.
- Fejléc-információkat tartalmazó fejlécelem – A fejlécelem tartalmazhat információkat, például hitelesítési adatokat, amelyeket a hívó alkalmazás használhat. Tartalmazhatja a SOAP üzenetben használható összetett típusok meghatározását is. Alapértelmezés szerint a SOAP üzenet tartalmazhat olyan paramétereket, amelyek lehetnek egyszerű típusúak, például karakterláncok és számok, de lehetnek összetett objektumtípusok is.
Az alábbiakban egy összetett típusú egyszerű SOAP szolgáltatás példája látható.
Tegyük fel, hogy egy strukturált adattípust szeretnénk küldeni, amely egy „oktatóanyag neve” és egy „oktatóanyag” kombinációját tartalmazza. Description”, akkor a komplex típust az alábbiak szerint határozzuk meg.
A komplex típust az elemcímke határozza meg . Ezután a struktúra összes szükséges eleme a megfelelő adattípusokkal együtt meghatározásra kerül a komplex típusgyűjteményben.
<xsd:complexType> <xsd:sequence> <xsd:element name="Tutorial Name" type="string"/> <xsd:element name="Tutorial Description" type="string"/> </xsd:sequence> </xsd:complexType>
- Hívás- és válaszinformációkat tartalmazó törzselem – Ez az elem tartalmazza azokat a tényleges adatokat, amelyeket a webszolgáltatás és a hívó alkalmazás között el kell küldeni. Az alábbiakban egy SOAP webszolgáltatási példa látható a SOAP törzsére, amely valójában a fejléc részben meghatározott összetett típuson működik. Íme az oktatóanyag nevének és az oktatóanyagnak a válasza Description, amelyet a hívó alkalmazásnak küldenek, amely meghívja ezt a webszolgáltatást.
<soap:Body> <GetTutorialInfo> <TutorialName>Web Services</TutorialName> <TutorialDescription>All about web services</TutorialDescription> </GetTutorialInfo> </soap:Body>
SOAP üzenetszerkezet
Egy dolog, amit meg kell jegyezni, hogy a SOAP üzeneteket általában automatikusan generálja a webszolgáltatás, amikor hívják.
Amikor egy kliens alkalmazás meghív egy metódust a webszolgáltatásban, a webszolgáltatás automatikusan generál egy SOAP üzenetet, amely tartalmazza a webszolgáltatásból az ügyfélalkalmazásnak elküldött adatok szükséges részleteit.
Amint azt a SOAP oktatóanyag előző témakörében tárgyaltuk, egy egyszerű SOAP üzenet a következő elemekből áll:
- Az Envelope elem
- A fejléc elem és
- A test elem
- A hiba elem (opcionális)
Nézzünk meg egy példát az alábbiakban egy egyszerű SOAP-üzenetre, és nézzük meg, hogy valójában mit is csinál az elem.

- Amint a fenti SOAP üzenetből látható, a SOAP üzenet első része a borítékelem, amely a teljes SOAP üzenet beágyazására szolgál.
- A következő elem a SOAP törzs, amely az aktuális üzenet részleteit tartalmazza.
- Üzenetünk egy webszolgáltatást tartalmaz, melynek neve „Guru99WebService”.
- A „Guru99Webservice” elfogad egy „int” típusú paramétert, amelynek neve TutorialID.
Most a fenti SOAP üzenetet továbbítja a webszolgáltatás és az ügyfélalkalmazás között.
Láthatja, hogy a fenti információk mennyire hasznosak az ügyfélalkalmazás számára. A SOAP üzenet közli az ügyfélalkalmazással, hogy mi a webszolgáltatás neve, és azt is, hogy milyen paramétereket vár el, valamint azt is, hogy milyen típusú paramétereket vesz fel a webszolgáltatás.
SZAPPAN boríték elem
Az építőelem első része a SOAP Envelope.
A SOAP Envelope a webszolgáltatás és az ügyfélalkalmazás között cserélt SOAP üzenetek összes szükséges részletének beágyazására szolgál.
A SOAP boríték elem a SOAP üzenet kezdetének és végének jelzésére szolgál. Ez lehetővé teszi a webszolgáltatást hívó ügyfélalkalmazás számára, hogy tudja, mikor ér véget a SOAP üzenet.
A SOAP borítékelemen a következő pontok jegyezhetők fel.
- Minden SOAP üzenetnek rendelkeznie kell egy gyökér Envelope elemmel. A SOAP üzenetnek feltétlenül tartalmaznia kell egy borítékot.
- Minden borítékelemnek rendelkeznie kell legalább egy szappantest elemmel.
- Ha egy Envelope elem tartalmaz fejlécet, akkor az legfeljebb egyet tartalmazhat, és az Envelope első gyermekeként kell megjelennie a törzselem előtt.
- A boríték megváltozik a SOAP verzióinak változásával.
- Egy v1.1-kompatibilis SOAP processzor hibát generál, amikor a v1.2 boríték névterét tartalmazó üzenetet kap.
- A v1.2-kompatibilis SOAP-processzor Version Mismatch hibát generál, ha olyan üzenetet kap, amely nem tartalmazza a v1.2-es boríték névterét.
Az alábbiakban a SOAP envelope elem 1.2-es verziójának SOAP API példája látható.
<?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>
A hibaüzenet
Amikor egy SOAP webszolgáltatáshoz küldenek kérést, a visszaadott válasz kétféle lehet, amelyek sikeres válasz vagy hiba. Ha sikert generál, a szerver válasza mindig SOAP üzenet lesz. Ha azonban SOAP hibák keletkeznek, akkor azokat „HTTP 2” hibaként adják vissza.
A SOAP hibaüzenet a következő elemekből áll.
- – Ez az a kód, amely a hiba kódját jelöli. A hibakód az alábbi értékek bármelyike lehet
- SOAP-ENV:VersionMismatch – Ez az, amikor a SOAP Envelope elem érvénytelen névterét észleli.
- SOAP-ENV:MustUnderstand – A Fejléc elem közvetlen gyermekeleme, amelynek mustUnderstand attribútuma „1”-re van állítva, nem értelmezhető.
- SOAP-ENV:Client – Az üzenet hibásan lett kialakítva, vagy helytelen információkat tartalmazott.
- SOAP-ENV:Szerver – Probléma lépett fel a szerverrel, ezért az üzenet nem tudott továbbadni.
- – Ez az a szöveges üzenet, amely részletesen leírja a hibát.
- (Választható)– Ez egy szöveges karakterlánc, amely jelzi, hogy ki okozta a hibát.
- (Választható) – Ez az alkalmazás-specifikus hibaüzenetek eleme. Így az alkalmazásnak konkrét hibaüzenete lehet a különböző üzleti logikai forgatókönyvekhez.
Példa hibaüzenetre
Az alábbiakban egy hibaüzenet példája látható. A hiba akkor jön létre, ha az a forgatókönyv, amelyben az ügyfél a GetTutorial osztály TutorialID nevű metódusát próbálja használni.
Az alábbi hibaüzenet akkor jön létre, ha a metódus nem létezik a meghatározott osztályban.
<?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>
output:
A fenti kód végrehajtásakor a következő hibaüzenet jelenik meg: „Nem sikerült megtalálni a metódust (GetTutorialID) az osztályban (GetTutorial)”.
SOAP kommunikációs modell
A SOAP minden kommunikációja a HTTP protokollon keresztül történik. A SOAP előtt sok webes szolgáltatások a szabványos RPC (Remote Procedure Call) stílust használta a kommunikációhoz. Ez volt a kommunikáció legegyszerűbb módja, de sok korlátja volt.
Most ebben a SOAP API oktatóanyagban nézzük meg az alábbi diagramot, hogy megtudjuk, hogyan működik ez a kommunikáció. Ebben a példában tegyük fel, hogy a szerver egy webszolgáltatást üzemeltet, amely 2 metódussal rendelkezik
- GetEmployee – Ez az összes alkalmazott adatot megkapja
- SetEmployee – Ez ennek megfelelően határozná meg az olyan részletek értékét, mint az alkalmazotti osztály, fizetés stb.
A normál RPC stílusú kommunikációban a kliens csak meghívja a kérésében szereplő metódusokat, és elküldi a szükséges paramétereket a szervernek, majd a szerver elküldi a kívánt választ.
A fenti kommunikációs modellnek az alábbi komoly korlátai vannak
- Nem Nyelvfüggetlen – A metódusokat kiszolgáló szerver egy adott programozási nyelven lenne, és általában a szerverhez intézett hívások csak ezen a programozási nyelven történnének.
- Nem a szabványos protokoll – Ha a távoli eljárást hívják, a hívás nem a szabványos protokollon keresztül történik. Ez azért volt probléma, mert az interneten keresztüli kommunikációt többnyire HTTP protokollon keresztül kellett végrehajtani.
- tűzfalak – Mivel az RPC hívások nem a normál protokollon keresztül mennek keresztül, külön portoknak kell nyitva lenniük a szerveren, hogy az ügyfél kommunikálhasson a szerverrel. Általában minden tűzfal blokkolja ezt a fajta forgalmat, és általában sok konfigurációra volt szükség ahhoz, hogy az ügyfél és a kiszolgáló közötti ilyen jellegű kommunikáció működjön.
A fent idézett összes korlát leküzdésére a SOAP az alábbi kommunikációs modellt használja
- A kliens az eljáráshívással és az argumentumokkal kapcsolatos információkat SOAP-üzenetté formálja, és egy HTTP-kérés részeként elküldi a szervernek. Az adatok SOAP-üzenetbe foglalásának ezt a folyamatát úgy hívták Rendezés.
- A szerver ezután kibontja az ügyfél által küldött üzenetet, megnézi, mit kért az ügyfél, majd SOAP-üzenetként visszaküldi a megfelelő választ az ügyfélnek. Az ügyfél által küldött kérés kibontásának gyakorlata ún Demarshalling.
Gyakorlati SZAPPAN példa
Most ebben a SoapUI oktatóanyagban lássunk egy gyakorlati SOAP példát,
Valószínűleg az egyik legjobb módja annak, hogy megnézzük, hogyan jönnek létre a SOAP-üzenetek, ha ténylegesen látunk egy webszolgáltatást működés közben.
Ez a témakör a Microsoft.Net keretrendszer egy ASMX webszolgáltatás felépítéséhez. Ez a típusú webszolgáltatás támogatja a SOAP 1.1-es és 1.2-es verzióját is.
Az ASMX webszolgáltatások automatikusan generálják a Webszolgáltatás-definíciós nyelv (WSDL) dokumentum. Ezt a WSDL-dokumentumot a hívó ügyfélalkalmazásnak szüksége van ahhoz, hogy az alkalmazás tudja, mire képes a webszolgáltatás.
Példánkban egy egyszerű webszolgáltatást fogunk létrehozni, amely egy karakterlánc visszaadására szolgál a webszolgáltatást meghívó alkalmazásnak.
Ezt a webszolgáltatást egy Asp.Net webalkalmazás. Ezután meghívjuk a webszolgáltatást, és látni fogjuk a webszolgáltatás által visszaadott eredményt.
A Visual Studio azt is megmutatja, hogy mi a SOAP üzenet a webszolgáltatás és a hívó alkalmazás között.
A webszolgáltatási alkalmazásunk beállításának első előfeltétele, amelyet az alábbi lépések követésével tehet meg.
Kérjük, győződjön meg arról, hogy a Visual Studio 2013 telepítve van a rendszeren ehhez a példához.
Step 1) Az első lépés egy üres ASP.Net webalkalmazás létrehozása. A Visual Studio 2013-ban kattintson a Fájl->Új projekt menüpontra.
Miután rákattint az Új projekt lehetőségre, a Visual Studio egy másik párbeszédablakot ad a projekt típusának kiválasztásához és a projekt szükséges részleteinek megadásához. Ezt a következő lépésben ismertetjük.
Step 2) Ebben a lépésben a
- Először mindenképpen válassza ki a C# ASP.NET webalkalmazás websablonja. A projektnek ilyen típusúnak kell lennie a SOAP szolgáltatási projekt létrehozásához. Ha ezt a lehetőséget választja, a Visual Studio elvégzi a szükséges lépéseket a szükséges fájlok hozzáadásához, amelyekre bármely webalapú alkalmazásnak szüksége van.
- Adjon nevet a projektjének, amelyet esetünkben webservice.asmx néven adtunk meg. Ezután gondoskodjon arról, hogy adjon meg egy helyet, ahol a projektfájlokat tárolni fogja.
Ha elkészült, látni fogja a Visual Studio 2013 megoldáskezelőjében létrehozott projektfájlt.
Step 3) Ebben a lépésben a
Egy webszolgáltatási fájlt fogunk hozzáadni projektünkhöz
- Először kattintson a jobb gombbal a projektfájlra az alábbiak szerint
- Miután a jobb gombbal rákattint a projektfájlra, lehetősége van a „Hozzáadás->Webszolgáltatás(ASMX)” lehetőség kiválasztására webszolgáltatási fájl hozzáadásához. Csak adja meg a Tutorial Service nevét a webszolgáltatás névfájljához.
Step 4) Adja hozzá a következő kódot a Tutorial Service asmx fájljához.
Kód magyarázata:
- Ez a kódsor nevet ad a webszolgáltatási fájlnak. Ez azért fontos lépés, mert lehetővé teszi az ügyfélalkalmazás számára, hogy a webszolgáltatás nevén keresztül hívja a webszolgáltatást.
- Általában egy osztályfájlt használnak a webszolgáltatás funkcióinak beágyazására. Tehát az osztályfájl tartalmazza az összes webes metódus definícióját, amely bizonyos funkciókat biztosít az ügyfélalkalmazás számára.
- Itt a [WebMethod] attribútumként ismert, amely egy függvényt ír le. A következő lépés létrehozza a „Guru99WebService” nevű függvényt, de a [WebMethod] attribútum hozzáadásával járó lépéssel biztosítja, hogy ezt a metódust az ügyfélalkalmazások meghívhassák. Ha ez az attribútum nincs a helyén, akkor a metódust soha nem tudja meghívni az ügyfélalkalmazás.
- Itt egy 'Guru99WebService' nevű függvényt definiálunk, amely egy karakterlánc visszaadására szolgál a hívó kliens alkalmazásnak. Ez a funkció egy webszolgáltatás, amelyet bármely kliens alkalmazás hívhat.
- A return utasítást használjuk az „Ez egy Guru99 webszolgáltatás” karakterlánc visszaadására az ügyfélalkalmazásnak.
Ha a kód sikeresen lefut, a következő kimenet jelenik meg, amikor futtatja a kódot a böngészőben.
output:
- A kimenet egyértelműen mutatja, hogy webszolgáltatásunk neve „Guru99 Web Service”, ami a webszolgáltatásunk elnevezésének eredménye.
- Azt is láthatjuk, hogy meg tudjuk hívni a webszolgáltatást. Ha az Invoke gombra kattintunk, az alábbi választ kapjuk a böngészőben.
A fenti kimenet,
- Világosan mutatja, hogy a webes metódus meghívásával az „Ez egy Guru99 webszolgáltatás” karakterlánc kerül visszaadásra.
- A Visual Studio lehetővé teszi a SOAP-üzenetkérelem és -válasz megtekintését is, amely a fenti webszolgáltatás meghívásakor jön létre.
Az alábbiakban látható a SOAP-kérelem, amely a webszolgáltatás hívásakor jön létre.
Kód magyarázata:
- A SOAP üzenet első része a borítékelem, amelyről az előző fejezetekben volt szó. Ez az a beágyazó elem, amely minden SOAP üzenetben megtalálható.
- A SOAP törzs a következő elem, és a SOAP üzenet tényleges részleteit tartalmazza.
- A harmadik rész az az elem, amely meghatározza, hogy meg akarjuk hívni a 'Guru99WebService' nevű szolgáltatást.
<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>
Kód magyarázata:
- A SOAP üzenet első része a borítékelem, amelyről az előző fejezetekben volt szó. Ez az a beágyazó elem, amely minden SOAP üzenetben megtalálható.
- A SOAP törzs a következő elem, és a SOAP üzenet tényleges részleteit tartalmazza.
- Az érdekes rész, amit most látni fog, a „string” attribútum. Ez közli az ügyfélalkalmazással, hogy a hívott webszolgáltatás egy karakterlánc típusú objektumot ad vissza. Ez nagyon hasznos, mert ha az ügyfélalkalmazás, amely egyébként nem tudná, mit ad vissza a webszolgáltatás.
Összegzésként
- A SOAP egy protokoll, amelyet a különböző alkalmazásokra épülő alkalmazások közötti adatcserére használnak programozási nyelvek.
- A SOAP az XML specifikációra épül, és a HTTP protokollal működik. Ez tökéletessé teszi a webalkalmazásokon belüli használatra.
- A SOAP építőelemei egy SOAP üzenetből állnak. Minden SOAP üzenet egy borítékelemből, egy fejlécből és egy törzselemből áll.
- Az envelope elem a SOAP üzenet kötelező eleme, és a SOAP üzenetben lévő összes adat beágyazására szolgál.
- A fejléc elem olyan információk tárolására használható, mint a hitelesítési információk vagy összetett adattípusok meghatározása.
- A törzs elem a fő elem, amely tartalmazza a web metódusok definícióját, szükség esetén bármilyen paraméter információval együtt.