SOAP Web Services Handledning: Vad är SOAP Protocol? EXEMPEL
Vad är SOAP?
SOAP är ett XML-baserat protokoll för åtkomst till webbtjänster över HTTP. Den har vissa specifikationer som kan användas i alla applikationer.
SOAP är känt som Simple Object Access Protocol, men på senare tid förkortades det bara till SOAP v1.2. SOAP är ett protokoll eller med andra ord är en definition av hur webbtjänster pratar med varandra eller pratar med klientapplikationer som anropar dem.
SOAP utvecklades som ett mellanspråk så att applikationer byggda på olika programmeringsspråk lätt kunde prata med varandra och undvika den extrema utvecklingsansträngningen.
SOAP Introduktion
I dagens värld finns det ett stort antal applikationer som bygger på olika programmeringsspråk. Det kan till exempel vara en webbapplikation designad i Java, en annan i .Net och en annan i PHP.
Att utbyta data mellan applikationer är avgörande i dagens nätverksbaserade värld. Men datautbytet mellan dessa heterogena tillämpningar skulle vara komplext. Så kommer att vara komplexiteten i koden för att åstadkomma detta datautbyte.
En av metoderna som används för att bekämpa denna komplexitet är att använda XML (Extensible Markup Language) som mellanspråk för utbyte av data mellan applikationer.
Varje programmeringsspråk kan förstå XML-markeringsspråket. Därför användes XML som det underliggande mediet för datautbyte.
Men det finns inga standardspecifikationer för användning av XML för alla programmeringsspråk för datautbyte. Det är där SOAP-mjukvaran kommer in.
SOAP designades för att fungera med XML över HTTP och har någon sorts specifikation som kan användas i alla applikationer. Vi kommer att undersöka ytterligare detaljer om SOAP-protokollet i de efterföljande kapitlen.
Fördelar med SOAP
SOAP är protokollet som används för datautbyte mellan applikationer. Nedan finns några av anledningarna till varför SOAP används.
- När du utvecklar SOAP-baserade webbtjänster måste du ha något språk som kan användas för webbtjänster för att prata med klientapplikationer. SOAP är det perfekta mediet som utvecklades för att uppnå detta syfte. Detta protokoll rekommenderas också av W3C-konsortiet som är det styrande organet för alla webbstandarder.
- SOAP är ett lättviktsprotokoll som används för datautbyte mellan applikationer. Notera nyckelordet 'ljus.' Eftersom SOAP-programmering är baserad på XML-språket, som i sig är ett lättviktigt datautbytesspråk, därav SOAP som ett protokoll som också faller i samma kategori.
- SOAP är utformad för att vara plattformsoberoende och är också utformad för att vara oberoende av operativsystem. Så SOAP-protokollet kan fungera på alla programmeringsspråksbaserade applikationer på båda Windows och Linux plattformen.
- Det fungerar på HTTP-protokollet – SOAP fungerar på HTTP-protokollet, vilket är standardprotokollet som används av alla webbapplikationer. Därför finns det ingen form av anpassning som krävs för att köra webbtjänsterna byggda på SOAP-protokollet för att fungera på World Wide Web.
SOAP byggstenar
SOAP-specifikationen definierar något som kallas "SOAP meddelande” vilket är det som skickas till webbtjänsten och klientapplikationen.
Diagrammet nedan över SOAP-arkitektur visar de olika byggstenarna i ett SOAP-meddelande.

SOAP-meddelandet är inget annat än bara ett XML-dokument som har komponenterna nedan.
- Ett kuvertelement som identifierar XML-dokumentet som ett SOAP-meddelande – Detta är den innehållande delen av SOAP-meddelandet och används för att kapsla in alla detaljer i SOAP-meddelandet. Detta är rotelementet i SOAP-meddelandet.
- Ett Header-element som innehåller header-information – Header-elementet kan innehålla information såsom autentiseringsuppgifter som kan användas av den anropande applikationen. Den kan också innehålla definitionen av komplexa typer som kan användas i SOAP-meddelandet. Som standard kan SOAP-meddelandet innehålla parametrar som kan vara av enkla typer som strängar och siffror, men kan också vara en komplex objekttyp.
Ett enkelt exempel på en SOAP-tjänst av en komplex typ visas nedan.
Anta att vi ville skicka en strukturerad datatyp som hade en kombination av ett "Tutorial Name" och en "Tutorial Description," så skulle vi definiera den komplexa typen som visas nedan.
Den komplexa typen definieras av elementtaggen . Alla de nödvändiga elementen i strukturen tillsammans med deras respektive datatyper definieras sedan i den komplexa typsamlingen.
<xsd:complexType> <xsd:sequence> <xsd:element name="Tutorial Name" type="string"/> <xsd:element name="Tutorial Description" type="string"/> </xsd:sequence> </xsd:complexType>
- Ett Body-element som innehåller samtals- och svarsinformation – Detta element är det som innehåller den faktiska data som måste skickas mellan webbtjänsten och den anropande applikationen. Nedan är ett exempel på SOAP-webbtjänsten på SOAP-kroppen som faktiskt fungerar på den komplexa typen som definieras i rubriken. Här är svaret på handledningens namn och handledning Description som skickas till den anropande applikationen som anropar denna webbtjänst.
<soap:Body> <GetTutorialInfo> <TutorialName>Web Services</TutorialName> <TutorialDescription>All about web services</TutorialDescription> </GetTutorialInfo> </soap:Body>
SOAP meddelande struktur
En sak att notera är att SOAP-meddelanden normalt genereras automatiskt av webbtjänsten när den anropas.
Närhelst en klientapplikation anropar en metod i webbtjänsten, kommer webbtjänsten automatiskt att generera ett SOAP-meddelande som kommer att ha de nödvändiga uppgifterna om data som kommer att skickas från webbtjänsten till klientapplikationen.
Som diskuterats i det föregående ämnet i denna SOAP-handledning, har ett enkelt SOAP-meddelande följande element -
- Kuvertelementet
- Rubrikelementet och
- Kroppselementet
- Felelementet (valfritt)
Låt oss titta på ett exempel nedan på ett enkelt SOAP-meddelande och se vad elementet faktiskt gör.

- Som framgår av ovanstående SOAP-meddelande är den första delen av SOAP-meddelandet kuvertelementet som används för att kapsla in hela SOAP-meddelandet.
- Nästa element är SOAP-kroppen som innehåller detaljerna om det faktiska meddelandet.
- Vårt meddelande innehåller en webbtjänst som har namnet "Guru99WebService".
- "Guru99Webservice" accepterar en parameter av typen 'int' och har namnet TutorialID.
Nu kommer ovanstående SOAP-meddelande att skickas mellan webbtjänsten och klientapplikationen.
Du kan se hur användbar informationen ovan är för klientapplikationen. SOAP-meddelandet talar om för klientapplikationen vad som är namnet på webbtjänsten, och även vilka parametrar den förväntar sig och även vilken typ av varje parameter som tas av webbtjänsten.
SOAP Kuvert Element
Den första biten av byggstenen är SOAP Envelope.
SOAP Envelope används för att kapsla in alla nödvändiga detaljer för SOAP-meddelanden, som utbyts mellan webbtjänsten och klientapplikationen.
SOAP-enveloppelementet används för att indikera början och slutet av ett SOAP-meddelande. Detta gör det möjligt för klientapplikationen som anropar webbtjänsten att veta när SOAP-meddelandet slutar.
Följande punkter kan noteras på SOAP-kuvertelementet.
- Varje SOAP-meddelande måste ha ett rot Envelope-element. Det är absolut obligatoriskt för SOAP-meddelanden att ha ett kuvertelement.
- Varje kuvertelement måste ha minst ett tvålelement.
- Om ett kuvertelement innehåller ett rubrikelement får det inte innehålla mer än ett, och det måste visas som det första underordnade kuvertet före huvudelementet.
- Kuvertet ändras när SOAP-versionerna ändras.
- En v1.1-kompatibel SOAP-processor genererar ett fel vid mottagande av ett meddelande som innehåller v1.2-enveloppnamnområdet.
- En v1.2-kompatibel SOAP-processor genererar ett versionsfel om den tar emot ett meddelande som inte inkluderar v1.2-enveloppens namnutrymme.
Nedan är ett SOAP API-exempel av version 1.2 av SOAP-envelope-elementet.
<?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>
Felmeddelandet
När en begäran görs till en SOAP-webbtjänst kan svaret som returneras vara av antingen två former som är ett framgångsrikt svar eller ett felsvar. När en framgång genereras kommer svaret från servern alltid att vara ett SOAP-meddelande. Men om SOAP-fel genereras, returneras de som "HTTP 2"-fel.
SOAP Fault-meddelandet består av följande element.
- – Det här är koden som anger koden för felet. Felkoden kan vara något av nedanstående värden
- SOAP-ENV:VersionMismatch – Det här är när ett ogiltigt namnområde för SOAP Envelope-elementet påträffas.
- SOAP-ENV:MustUnderstand – Ett omedelbart underordnat element av Header-elementet, med mustUnderstand-attributet satt till "1", förstods inte.
- SOAP-ENV:Client – Meddelandet var felaktigt format eller innehöll felaktig information.
- SOAP-ENV:Server – Det var ett problem med servern, så meddelandet kunde inte fortsätta.
- – Det här är textmeddelandet som ger en detaljerad beskrivning av felet.
- (Frivillig)– Det här är en textsträng som anger vem som orsakade felet.
- (Frivillig) – Detta är elementet för applikationsspecifika felmeddelanden. Så applikationen kan ha ett specifikt felmeddelande för olika affärslogiska scenarier.
Exempel på felmeddelande
Ett exempel på ett felmeddelande ges nedan. Felet genereras om scenariot där klienten försöker använda en metod som kallas TutorialID i klassen GetTutorial.
Nedanstående felmeddelande genereras i händelse av att metoden inte existerar i den definierade klassen.
<?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>
Produktion:
När du kör ovanstående kod kommer det att visa felet som "Det gick inte att hitta metod (GetTutorialID) i klassen (GetTutorial)"
SOAP kommunikationsmodell
All kommunikation via SOAP sker via HTTP-protokollet. Före SOAP, en hel del webbservice använde standardformatet RPC (Remote Procedure Call) för kommunikation. Detta var den enklaste typen av kommunikation, men den hade många begränsningar.
Nu i denna SOAP API-handledning, låt oss överväga diagrammet nedan för att se hur denna kommunikation fungerar. I det här exemplet, låt oss anta att servern är värd för en webbtjänst som tillhandahåller 2 metoder som
- Get Employee – Det här skulle få alla personaldetaljer
- Ställ anställd – Detta skulle ställa in värdet på detaljer som personalavdelning, lön etc. i enlighet därmed.
I den normala kommunikationen i RPC-stil skulle klienten bara anropa metoderna i sin begäran och skicka de nödvändiga parametrarna till servern, och servern skulle sedan skicka det önskade svaret.
Ovanstående kommunikationsmodell har nedanstående allvarliga begränsningar
- Inte språkoberoende – Servern som är värd för metoderna skulle vara på ett visst programmeringsspråk och normalt skulle anropen till servern endast ske på det programmeringsspråket.
- Inte standardprotokollet – När ett anrop görs till fjärrproceduren utförs inte samtalet via standardprotokollet. Detta var ett problem eftersom mestadels all kommunikation över webben måste ske via HTTP-protokollet.
- brandväggar – Eftersom RPC-anrop inte går via det vanliga protokollet måste separata portar vara öppna på servern för att klienten ska kunna kommunicera med servern. Normalt sett skulle alla brandväggar blockera denna typ av trafik, och det krävdes i allmänhet mycket konfiguration för att säkerställa att den här typen av kommunikation mellan klienten och servern skulle fungera.
För att övervinna alla begränsningar som citeras ovan, skulle SOAP sedan använda nedanstående kommunikationsmodell
- Klienten skulle formatera informationen om proceduranropet och eventuella argument till ett SOAP-meddelande och skickar det till servern som en del av en HTTP-förfrågan. Denna process att kapsla in data i ett SOAP-meddelande var känd som Marshalling.
- Servern skulle sedan packa upp meddelandet som skickats av klienten, se vad klienten begärde och sedan skicka det lämpliga svaret tillbaka till klienten som ett SOAP-meddelande. Bruket att packa upp en begäran som skickats av klienten kallas Demarshalling.
Praktiskt SOAP-exempel
Nu i denna SoapUI-handledning, låt oss se ett praktiskt SOAP-exempel,
Förmodligen ett av de bästa sätten att se hur SOAP-meddelanden genereras är att faktiskt se en webbtjänst i aktion.
Det här ämnet kommer att titta på hur du använder Microsoft.Net framework för att bygga en ASMX webbtjänst. Denna typ av webbtjänst stöder både SOAP version 1.1 och version 1.2.
ASMX webbtjänster genererar automatiskt Web Service Definition Language (WSDL) dokumentera. Detta WSDL-dokument krävs av den anropande klientapplikationen så att applikationen vet vad webbtjänsten kan göra.
I vårt exempel kommer vi att skapa en enkel webbtjänst, som kommer att användas för att returnera en sträng till applikationen som anropar webbtjänsten.
Denna webbtjänst kommer att finnas i en Asp.Net webbapplikation. Vi kommer då att anropa webbtjänsten och se resultatet som returneras av webbtjänsten.
Visual Studio kommer också att visa oss vad SOAP-meddelandet skickas mellan webbtjänsten och den anropande applikationen.
Den första förutsättningen för att installera vår webbtjänstapplikation, vilket kan göras genom att följa stegen nedan.
Se till att du har Visual Studio 2013 installerat på ditt system för detta exempel.
Steg 1) Det första steget är att skapa en tom ASP.Net webbapplikation. Från Visual Studio 2013, klicka på menyalternativet Arkiv->Nytt projekt.
När du klickar på alternativet Nytt projekt kommer Visual Studio att ge dig en annan dialogruta för att välja typ av projekt och för att ge nödvändiga detaljer om projektet. Detta förklaras i nästa steg.
Steg 2) I detta steg
- Se till att först välja C# webbmall för ASP.NET webbapplikation. Projektet måste vara av denna typ för att skapa SOAP-tjänster. Genom att välja detta alternativ kommer Visual Studio sedan att utföra de nödvändiga stegen för att lägga till nödvändiga filer som krävs av alla webbaserade applikationer.
- Ge ditt projekt ett namn som i vårt fall har getts som webservice.asmx. Se sedan till att ange en plats där projektfilerna kommer att lagras.
När du är klar kommer du att se projektfilen som skapats i din lösningsutforskare i Visual Studio 2013.
Steg 3) I detta steg
Vi kommer att lägga till en webbtjänstfil till vårt projekt
- Först Högerklicka på projektfilen som visas nedan
- När du högerklickar på projektfilen har du chansen att välja alternativet "Lägg till->Webbtjänst(ASMX) för att lägga till en webbtjänstfil. Ange bara ett namn på Tutorial Service för webbtjänstens namnfil.
Steg 4) Lägg till följande kod till din Tutorial Service asmx-fil.
Kodförklaring:
- Denna kodrad ger ett namn för din webbtjänstfil. Detta är ett viktigt steg eftersom det ger vika för klientapplikationen att anropa webbtjänsten via namnet på webbtjänsten.
- Normalt används en klassfil för att kapsla in funktionaliteten hos en webbtjänst. Så klassfilen kommer att ha definitionen av alla webbmetoder som kommer att ge viss funktionalitet till klientapplikationen.
- Här är [WebMethod] känt som ett attribut som beskriver en funktion. Det efterföljande steget skapar en funktion som heter "Guru99WebService", men med inkluderingen av detta steg för att lägga till ett [WebMethod]-attribut ser till att denna metod kan anropas av en klientapplikation. Om detta attribut inte finns på plats kan metoden aldrig anropas av en klientapplikation.
- Här definierar vi en funktion som heter 'Guru99WebService' som kommer att användas för att returnera en sträng till den anropande klientapplikationen. Denna funktion är en webbtjänst som kan anropas av alla klientapplikationer.
- Vi använder retursatsen för att returnera strängen "Detta är en Guru99-webbtjänst" till klientapplikationen.
Om koden exekveras framgångsrikt kommer följande utdata att visas när du kör din kod i webbläsaren.
Produktion:
- Resultatet visar tydligt att namnet på vår webbtjänst är "Guru99 Web Service" vilket är resultatet av att vi har gett ett namn för vår webbtjänst.
- Vi kan också se att vi kan åberopa webbtjänsten. Om vi klickar på Anropa-knappen får vi svaret nedan i webbläsaren.
Ovanstående utgång,
- Det visar tydligt att genom att anropa webbmetoden returneras strängen "This is a Guru99 Web Service".
- Visual Studio låter dig också se SOAP-meddelandebegäran och svaret som genereras när ovanstående webbtjänst anropas.
SOAP-förfrågan som genereras när webbtjänsten anropas visas nedan.
Kodförklaring:
- Den första delen av SOAP-meddelandet är kuvertelementet vilket är vad som diskuterades i de föregående kapitlen. Detta är det inkapslande elementet som finns i varje SOAP-meddelande.
- SOAP Body är nästa element och innehåller de faktiska detaljerna för SOAP-meddelandet.
- Den tredje delen är elementet som anger att vi vill anropa tjänsten som kallas '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>
Kodförklaring:
- Den första delen av SOAP-meddelandet är kuvertelementet vilket är vad som diskuterades i de föregående kapitlen. Detta är det inkapslande elementet som finns i varje SOAP-meddelande.
- SOAP Body är nästa element och innehåller de faktiska detaljerna för SOAP-meddelandet.
- Den intressanta delen du kommer att se nu är "string"-attributet. Detta talar om för klientapplikationen att webbtjänsten som anropas returnerar ett objekt av typen sträng. Detta är mycket användbart eftersom om klientapplikationen som annars inte skulle veta vad webbtjänsten returnerar.
Sammanfattning
- SOAP är ett protokoll som används för att utbyta data mellan applikationer som bygger på olika programmeringsspråk.
- SOAP bygger på XML-specifikationen och fungerar med HTTP-protokollet. Detta gör den perfekt för användning inom webbapplikationer.
- SOAP-byggstenarna består av ett SOAP-meddelande. Varje SOAP-meddelande består av ett kuvertelement, en rubrik och ett huvudelement.
- Enveloppelementet är det obligatoriska elementet i SOAP-meddelandet och används för att kapsla in all data i SOAP-meddelandet.
- Rubrikelementet kan användas för att innehålla information såsom autentiseringsinformation eller definitionen av komplexa datatyper.
- Bodyelementet är huvudelementet som innehåller definitionen av webbmetoderna tillsammans med eventuell parameterinformation om det behövs.