SOAP Web Services Tutorial: Hvad er SOAP Protocol? EKSEMPEL
Hvad er SOAP?
SOAP er en XML-baseret protokol til at fรฅ adgang til webtjenester over HTTP. Det har nogle specifikationer, som kan bruges pรฅ tvรฆrs af alle applikationer.
SOAP er kendt som Simple Object Access Protocol, men blev i senere tider blot forkortet til SOAP v1.2. SOAP er en protokol eller med andre ord er en definition af, hvordan webtjenester taler med hinanden eller taler med klientapplikationer, der kalder dem.
SOAP blev udviklet som et mellemsprog, sรฅ applikationer bygget pรฅ forskellige programmeringssprog nemt kunne tale med hinanden og undgรฅ den ekstreme udviklingsindsats.
SรBE introduktion
I dagens verden er der et stort antal applikationer, som er bygget pรฅ forskellige programmeringssprog. For eksempel kan der vรฆre en webapplikation designet i Java, en anden i .Net og en anden i PHP.
Udveksling af data mellem applikationer er afgรธrende i dagens netvรฆrksverden. Men dataudveksling mellem disse heterogene applikationer ville vรฆre kompleks. Det vil ogsรฅ vรฆre kompleksiteten af โโkoden for at opnรฅ denne dataudveksling.
En af de metoder, der bruges til at bekรฆmpe denne kompleksitet, er at bruge XML (Extensible Markup Language) som mellemsprog til udveksling af data mellem applikationer.
Ethvert programmeringssprog kan forstรฅ XML markup sproget. Derfor blev XML brugt som det underliggende medium til dataudveksling.
Men der er ingen standardspecifikationer for brug af XML pรฅ tvรฆrs af alle programmeringssprog til dataudveksling. Det er her SOAP-software kommer ind.
SOAP er designet til at arbejde med XML over HTTP og har en slags specifikation, som kan bruges pรฅ tvรฆrs af alle applikationer. Vi vil se nรฆrmere pรฅ detaljerne om SOAP-protokollen i de efterfรธlgende kapitler.
Fordele ved SOAP
SOAP er den protokol, der bruges til dataudveksling mellem applikationer. Nedenfor er nogle af grundene til, hvorfor SOAP bruges.
- Nรฅr udvikletping SOAP-baserede webtjenester. Du skal bruge et sprog, der kan bruges til at webtjenester kommunikere med klientapplikationer. SOAP er det perfekte medie, der blev udviklet til at opnรฅ dette formรฅl. Denne protokol anbefales ogsรฅ af W3C-konsortiet, som er det styrende organ for alle webstandarder.
- SOAP er en letvรฆgtsprotokol, der bruges til dataudveksling mellem applikationer. Bemรฆrk nรธgleordet 'lys.' Da SOAP-programmering er baseret pรฅ XML-sproget, som i sig selv er et letvรฆgts-dataudvekslingssprog, derfor falder SOAP som en protokol i samme kategori.
- SOAP er designet til at vรฆre platformsuafhรฆngig og er ogsรฅ designet til at vรฆre operativsystemuafhรฆngig. Sรฅ SOAP-protokollen kan fungere pรฅ alle programmeringssprogsbaserede applikationer pรฅ begge Windows og Linux perron.
- Det virker pรฅ HTTP-protokollen โ SOAP fungerer pรฅ HTTP-protokollen, som er standardprotokollen, der bruges af alle webapplikationer. Derfor er der ingen form for tilpasning, der krรฆves for at kรธre webtjenesterne bygget pรฅ SOAP-protokollen for at fungere pรฅ World Wide Web.
SรBE byggeklodser
SOAP-specifikationen definerer noget kendt som en "SOAP beskedโ som er det, der sendes til webservicen og klientapplikationen.
Nedenstรฅende diagram over SOAP-arkitektur viser de forskellige byggesten i en SOAP-meddelelse.

SOAP-meddelelsen er intet andet end blot et XML-dokument, som har nedenstรฅende komponenter.
- Et envelope-element, der identificerer XML-dokumentet som en SOAP-meddelelse - Dette er den del af SOAP-meddelelsen, der indeholder, og bruges til at indkapsle alle detaljerne i SOAP-meddelelsen. Dette er rodelementet i SOAP-meddelelsen.
- Et Header-element, der indeholder header-oplysninger โ Header-elementet kan indeholde oplysninger, sรฅsom godkendelsesoplysninger, som kan bruges af den kaldende applikation. Den kan ogsรฅ indeholde definitionen af โโkomplekse typer, som kan bruges i SOAP-meddelelsen. Som standard kan SOAP-meddelelsen indeholde parametre, som kan vรฆre af simple typer sรฅsom strenge og tal, men kan ogsรฅ vรฆre en kompleks objekttype.
Et simpelt SOAP-tjenesteeksempel af en kompleks type er vist nedenfor.
Antag, at vi รธnskede at sende en struktureret datatype, som havde en kombination af et "Tutorial Name" og et "Tutorial" Description," sรฅ ville vi definere den komplekse type som vist nedenfor.
Den komplekse type er defineret af element-tagget . Alle de nรธdvendige elementer i strukturen sammen med deres respektive datatyper defineres derefter i den komplekse typesamling.
<xsd:complexType> <xsd:sequence> <xsd:element name="Tutorial Name" type="string"/> <xsd:element name="Tutorial Description" type="string"/> </xsd:sequence> </xsd:complexType>
- Et Body-element, der indeholder opkalds- og svaroplysninger โ Dette element er det, der indeholder de faktiske data, som skal sendes mellem webtjenesten og den opkaldende applikation. Nedenfor er et eksempel pรฅ SOAP-webservice pรฅ SOAP-kroppen, som faktisk fungerer pรฅ den komplekse type, der er defineret i overskriftssektionen. Her er svaret pรฅ selvstudiets navn og selvstudiet Description, der sendes til den opkaldende applikation, som kalder denne webtjeneste.
<soap:Body> <GetTutorialInfo> <TutorialName>Web Services</TutorialName> <TutorialDescription>All about web services</TutorialDescription> </GetTutorialInfo> </soap:Body>
SOAP-meddelelsesstruktur
En ting at bemรฆrke er, at SOAP-beskeder normalt automatisk genereres af webtjenesten, nรฅr den kaldes.
Nรฅr en klientapplikation kalder en metode i webtjenesten, vil webtjenesten automatisk generere en SOAP-meddelelse, som vil have de nรธdvendige detaljer om de data, som vil blive sendt fra webtjenesten til klientapplikationen.
Som diskuteret i det foregรฅende emne i denne SOAP-tutorial, har en simpel SOAP-meddelelse fรธlgende elementer -
- Konvolutelementet
- Overskriftselementet og
- Kropselementet
- Fejlelementet (valgfrit)
Lad os se pรฅ et eksempel nedenfor pรฅ en simpel SOAP-meddelelse og se, hvad element faktisk gรธr.
- Som det ses af ovenstรฅende SOAP-meddelelse, er den fรธrste del af SOAP-meddelelsen kuvertelementet, som bruges til at indkapsle hele SOAP-meddelelsen.
- Det nรฆste element er SOAP-legemet, som indeholder detaljerne i den faktiske besked.
- Vores besked indeholder en webtjeneste med navnet "Guru99WebServiceโ.
- Den "Guru99Webserviceโ accepterer en parameter af typen 'int' og har navnet TutorialID.
Nu vil ovenstรฅende SOAP-meddelelse blive sendt mellem webtjenesten og klientapplikationen.
Du kan se, hvor nyttige ovenstรฅende oplysninger er for klientapplikationen. SOAP-meddelelsen fortรฆller klientapplikationen, hvad der er navnet pรฅ webtjenesten, og ogsรฅ hvilke parametre den forventer, og ogsรฅ hvilken type af hver parameter, der tages af webtjenesten.
Sรฆbekuvertelement
Den fรธrste del af byggestenen er SOAP Envelope.
SOAP-konvolutten bruges til at indkapsle alle de nรธdvendige detaljer om SOAP-meddelelserne, som udveksles mellem webservicen og klientapplikationen.
SOAP-kuvertelementet bruges til at angive begyndelsen og slutningen af โโen SOAP-meddelelse. Dette gรธr det muligt for klientapplikationen, der kalder webtjenesten, at vide, hvornรฅr SOAP-meddelelsen slutter.
Fรธlgende punkter kan noteres pรฅ SOAP-kuvertelementet.
- Hver SOAP-meddelelse skal have et rodkonvolutelement. Det er absolut obligatorisk for SOAP-meddelelse at have et kuvertelement.
- Hvert Envelope-element skal have mindst รฉt โโsรฆbeelement.
- Hvis et kuvertelement indeholder et overskriftselement, mรฅ det ikke indeholde mere end รฉt, og det skal vises som det fรธrste underordnede af konvolutten fรธr brรธdelementet.
- Konvolutten รฆndres, nรฅr SOAP-versionerne รฆndres.
- En v1.1-kompatibel SOAP-processor genererer en fejl ved modtagelse af en meddelelse, der indeholder v1.2-envelope-navneomrรฅdet.
- En v1.2-kompatibel SOAP-processor genererer en Version Mismatch-fejl, hvis den modtager en meddelelse, der ikke inkluderer v1.2-envelope-navneomrรฅdet.
Nedenfor er et SOAP API-eksempel pรฅ version 1.2 af 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>
Fejlmeddelelsen
Nรฅr der sendes en anmodning til en SOAP-webservice, kan svaret, der returneres, vรฆre af enten 2 formularer, som er et vellykket svar eller et fejlsvar. Nรฅr en succes genereres, vil svaret fra serveren altid vรฆre en SOAP-meddelelse. Men hvis der genereres SOAP-fejl, returneres de som "HTTP 500"-fejl.
SOAP-fejlmeddelelsen bestรฅr af fรธlgende elementer.
- <faultCode>โ Dette er koden, der angiver koden for fejlen. Fejlkoden kan vรฆre en af โโnedenstรฅende vรฆrdier
- SOAP-ENV:VersionMismatch โ Dette er, nรฅr et ugyldigt navneomrรฅde for SOAP Envelope-elementet stรธdes pรฅ.
- SOAP-ENV:MustUnderstand โ Et umiddelbart underordnet element af Header-elementet, med mustUnderstand-attributten sat til "1", blev ikke forstรฅet.
- SOAP-ENV:Client โ โโMeddelelsen var forkert udformet eller indeholdt forkerte oplysninger.
- SOAP-ENV:Server โ Der var et problem med serveren, sรฅ beskeden kunne ikke fortsรฆtte.
- โ Dette er tekstmeddelelsen, der giver en detaljeret beskrivelse af fejlen.
- (Valgfri)โ Dette er en tekststreng, der angiver, hvem der har forรฅrsaget fejlen.
- (Valgfri) โ Dette er elementet for applikationsspecifikke fejlmeddelelser. Sรฅ applikationen kunne have en specifik fejlmeddelelse for forskellige forretningslogiske scenarier.
Eksempel pรฅ fejlmeddelelse
Et eksempel pรฅ en fejlmeddelelse er givet nedenfor. Fejlen genereres, hvis scenariet, hvor klienten forsรธger at bruge en metode kaldet TutorialID i klassen GetTutorial.
Nedenstรฅende fejlmeddelelse genereres i tilfรฆlde af, at metoden ikke eksisterer i den definerede klasse.
<?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:
Nรฅr du udfรธrer ovenstรฅende kode, vil den vise fejlen som "Failed to locate method (GetTutorialID) in class (GetTutorial)"
SOAP kommunikationsmodel
Al kommunikation via SOAP foregรฅr via HTTP-protokollen. Forud for SOAP, en masse webservices brugt standard RPC (Remote Procedure Call) stil til kommunikation. Dette var den enkleste form for kommunikation, men den havde mange begrรฆnsninger.
Lad os nu i denne SOAP API-tutorial overveje nedenstรฅende diagram for at se, hvordan denne kommunikation fungerer. Lad os i dette eksempel antage, at serveren er vรฆrt for en webtjeneste, der gav 2 metoder som
- Fรฅ medarbejder โ Dette ville fรฅ alle medarbejderdetaljer
- Sรฆt medarbejder โ Dette ville sรฆtte vรฆrdien af โโdetaljer som ansattes afdeling, lรธn osv. i overensstemmelse hermed.
I den normale RPC-stil kommunikation ville klienten blot kalde metoderne i sin anmodning og sende de nรธdvendige parametre til serveren, og serveren ville derefter sende det รธnskede svar.
Ovenstรฅende kommunikationsmodel har nedenstรฅende alvorlige begrรฆnsninger
- Ikke sproguafhรฆngig โ Serveren, der hoster metoderne, vil vรฆre pรฅ et bestemt programmeringssprog, og normalt vil opkaldene til serveren kun vรฆre pรฅ det programmeringssprog.
- Ikke standardprotokollen โ Nรฅr der foretages et opkald til fjernproceduren, udfรธres opkaldet ikke via standardprotokollen. Dette var et problem, da stort set al kommunikation over nettet skulle ske via HTTP-protokollen.
- Firewalls โ Da RPC-opkald ikke gรฅr via den normale protokol, skal separate porte vรฆre รฅbne pรฅ serveren for at tillade klienten at kommunikere med serveren. Normalt ville alle firewalls blokere denne form for trafik, og en masse konfiguration var generelt pรฅkrรฆvet for at sikre, at denne form for kommunikation mellem klienten og serveren ville fungere.
For at overvinde alle de begrรฆnsninger, der er nรฆvnt ovenfor, ville SOAP derefter bruge nedenstรฅende kommunikationsmodel
- Klienten vil formatere oplysningerne vedrรธrende procedurekaldet og eventuelle argumenter til en SOAP-meddelelse og sende den til serveren som en del af en HTTP-anmodning. Denne proces med at indkapsle dataene i en SOAP-meddelelse blev kendt som Marshalling.
- Serveren ville derefter udpakke den besked, som klienten sendte, se, hvad klienten anmodede om, og derefter sende det relevante svar tilbage til klienten som en SOAP-besked. Praksis med udpakningping en anmodning sendt af klienten kaldes Demarshalling.
Eksempel pรฅ praktisk SOAP
Nu i dette SoapUI tutorial, lad os se et praktisk SOAP-eksempel,
Sandsynligvis en af โโde bedste mรฅder at se, hvordan SOAP-meddelelser bliver genereret, er faktisk at se en webtjeneste i aktion.
Dette emne vil se pรฅ brugen af Microsoft.Net framework til at bygge en ASMX webservice. Denne type webservice understรธtter bรฅde SOAP version 1.1 og version 1.2.
ASMX webtjenester genererer automatisk Web Service Definition Language (WSDL) dokument. Dette WSDL-dokument krรฆves af den kaldende klientapplikation, sรฅ applikationen ved, hvad webtjenesten er i stand til at gรธre.
I vores eksempel skal vi lave en simpel webtjeneste, som vil blive brugt til at returnere en streng til den applikation, der kalder webtjenesten.
Denne webservice vil blive hostet i en Asp.Net webapplikation. Vi vil derefter pรฅberรฅbe os webservicen og se resultatet, der returneres af webservicen.
Visual Studio vil ogsรฅ vise os, hvad SOAP-beskeden sendes mellem webtjenesten og opkaldsapplikationen.
Den fรธrste forudsรฆtning for at konfigurere vores webserviceapplikation, hvilket kan gรธres ved at fรธlge nedenstรฅende trin.
Sรธrg for, at du har Visual Studio 2013 installeret pรฅ dit system til dette eksempel.
Trin 1) Det fรธrste trin er at oprette en tom ASP.Net webapplikation. Fra Visual Studio 2013 skal du klikke pรฅ menupunktet Filer->Nyt projekt.
Nรฅr du klikker pรฅ indstillingen Nyt projekt, giver Visual Studio dig en anden dialogboks til at vรฆlge projekttype og give de nรธdvendige detaljer om projektet. Dette forklares i nรฆste trin.
Trin 2) I dette trin,
- Sรธrg for fรธrst at vรฆlge C# webskabelon for ASP.NET webapplikation. Projektet skal vรฆre af denne type for at skabe SOAP-serviceprojekt. Ved at vรฆlge denne mulighed vil Visual Studio derefter udfรธre de nรธdvendige trin for at tilfรธje nรธdvendige filer, som krรฆves af enhver webbaseret applikation.
- Giv dit projekt et navn, som i vores tilfรฆlde er blevet givet som webservice.asmx. Sรธrg derefter for at angive en placering, hvor projektfilerne vil blive gemt.
Nรฅr du er fรฆrdig, vil du se projektfilen oprettet i din lรธsningsstifinder i Visual Studio 2013.
Trin 3) I dette trin,
Vi vil tilfรธje en webservicefil til vores projekt
- Fรธrst Hรธjreklik pรฅ projektfilen som vist nedenfor
- Nรฅr du hรธjreklikker pรฅ projektfilen, har du mulighed for at vรฆlge indstillingen "Tilfรธj->Webservice(ASMX) for at tilfรธje en webtjenestefil. Angiv blot et navn pรฅ Tutorial Service for webtjenestens navnefil.
Trin 4) Tilfรธj fรธlgende kode til din Tutorial Service asmx-fil.
Code Forklaring:
- Denne kodelinje giver et navn til din webservicefil. Dette er et vigtigt skridt, fordi det giver mulighed for, at klientapplikationen ringer til webtjenesten via navnet pรฅ webtjenesten.
- Normalt bruges en klassefil til at indkapsle funktionaliteten af โโen webtjeneste. Sรฅ klassefilen vil have definitionen af โโalle webmetoder, som vil give en vis funktionalitet til klientapplikationen.
- Her er [WebMethod] kendt som en attribut, der beskriver en funktion. Det efterfรธlgende trin opretter en funktion kaldet "Guru99WebServiceโ, men med inkluderingen af โโdette trin med at tilfรธje en [WebMethod]-attribut sikres det, at denne metode kan kaldes af en klientapplikation. Hvis denne attribut ikke er pรฅ plads, kan metoden aldrig kaldes af en klientapplikation.
- Her definerer vi en funktion kaldet 'Guru99WebService', som vil blive brugt til at returnere en streng til den kaldende klientapplikation. Denne funktion er en webtjeneste, der kan kaldes af enhver klientapplikation.
- Vi bruger return-sรฆtningen til at returnere strengen "Dette er en Guru99 Webtjenesteโ til klientapplikationen.
Hvis koden eksekveres med succes, vil fรธlgende output blive vist, nรฅr du kรธrer din kode i browseren.
Output:
- Outputtet viser tydeligt, at navnet pรฅ vores webtjeneste er "Guru99 Web Serviceโ, som er resultatet af at give vores webtjeneste et navn.
- Vi kan ogsรฅ se, at vi kan pรฅberรฅbe os webtjenesten. Hvis vi klikker pรฅ Invoke-knappen, fรฅr vi nedenstรฅende svar i webbrowseren.
Ovenstรฅende output,
- Det viser tydeligt, at ved at kalde web-metoden, bliver strengen "Dette er en Guru"99 Webtjeneste" returneres.
- Visual Studio giver dig ogsรฅ mulighed for at se SOAP-meddelelsesanmodningen og -svaret, som genereres, nรฅr ovenstรฅende webservice kaldes.
SOAP-anmodningen, som genereres, nรฅr webtjenesten kaldes, er vist nedenfor.
Code Forklaring:
- Den fรธrste del af SOAP-meddelelsen er kuvertelementet, som er det, der blev diskuteret i de foregรฅende kapitler. Dette er det indkapslende element, som er til stede i hver SOAP-meddelelse.
- SOAP Body er det nรฆste element og indeholder de faktiske detaljer om SOAP-meddelelsen.
- Den tredje del er det element, der specificerer, at vi vil kalde tjenesten, som kaldes '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 Forklaring:
- Den fรธrste del af SOAP-meddelelsen er kuvertelementet, som er det, der blev diskuteret i de foregรฅende kapitler. Dette er det indkapslende element, som er til stede i hver SOAP-meddelelse.
- SOAP Body er det nรฆste element og indeholder de faktiske detaljer om SOAP-meddelelsen.
- Den interessante del, du vil se nu, er 'string'-attributten. Dette fortรฆller klientapplikationen, at den webtjeneste, der kaldes, returnerer et objekt af typen streng. Dette er meget nyttigt, fordi hvis klientapplikationen, som ellers ikke ville vide, hvad webtjenesten returnerer.
Resumรฉ
- SOAP er en protokol, der bruges til at udveksle data mellem applikationer, der er bygget pรฅ forskellige programmeringssprog.
- SOAP er bygget pรฅ XML-specifikationen og arbejder med HTTP-protokollen. Dette gรธr den perfekt til brug inden for webapplikationer.
- SOAP-byggestenene bestรฅr af en SOAP-meddelelse. Hver SOAP-meddelelse bestรฅr af et kuvertelement, en header og et brรธdtekstelement.
- Konvolutelementet er det obligatoriske element i SOAP-meddelelsen og bruges til at indkapsle alle data i SOAP-meddelelsen.
- Header-elementet kan bruges til at indeholde information sรฅsom autentificeringsinformation eller definition af komplekse datatyper.
- Body-elementet er hovedelementet, som indeholder definitionen af โโwebmetoderne sammen med eventuelle parameteroplysninger, hvis det krรฆves.












