WSDL Tutorial: Web Services Description Sprog med Eksempel
Hvad er WSDL?
Web Services Description sprog (WSDL) er en XML-baseret fil, der grundlæggende fortæller klientapplikationen, hvad webtjenesten gør. WSDL-filen bruges til at beskrive i en nøddeskal, hvad webservicen gør og giver klienten al den information, der kræves for at oprette forbindelse til webservicen og bruge al den funktionalitet, som webservicen tilbyder.
I denne tutorial vil vi fokusere på det sidste punkt, som er den vigtigste del af webtjenester, og det er WSDL eller webtjenesternes beskrivelsessprog.
WSDL-filen bruges til at beskrive i en nøddeskal, hvad webservicen gør og giver klienten al den information, der kræves for at oprette forbindelse til webservicen og bruge al den funktionalitet, som webservicen tilbyder.
Strukturen af et WSDL-dokument
Et WSDL-dokument bruges til at beskrive en webservice. Denne beskrivelse er påkrævet, så klientapplikationer er i stand til at forstå, hvad webtjenesten rent faktisk gør.
- WSDL-filen indeholder placeringen af webtjenesten og
- De metoder, som er eksponeret af webtjenesten.
WSDL-filen i sig selv kan se meget kompleks ud for enhver bruger, men den indeholder alle de nødvendige oplysninger, som enhver klientapplikation ville kræve for at bruge den relevante webservice.
Nedenfor er den generelle struktur af en WSDL-fil
- Definition
- Targetnavnerum
- Datatyper
- Beskeder
- Porttype
- Bindinger
- tjeneste
En vigtig ting at bemærke her er, at definitionen af beskeder, som er, hvad der passeres af SOAP protokol er faktisk defineret i WSDL-dokumentet.
WSDL-dokumentet fortæller faktisk en klientapplikation, hvilke typer SOAP-meddelelser, der sendes og accepteres af webtjenesten.
Med andre ord er WSDL ligesom et postkort, der har adressen på et bestemt sted. Adressen indeholder oplysninger om den person, der har leveret postkortet. Derfor er WSDL-filen på samme måde postkortet, som har adressen på webtjenesten, som kan levere al den funktionalitet, som klienten ønsker.
<!-- WSDL definition structure --> <definitions name="Guru99Service" targetNamespace=http://example.org/math/ xmlns=http://schemas.xmlsoap.org/wsdl/> <!-- abstract definitions --> <types> ... <message> ... <portType> ... <!-- concrete definitions --> <binding> ... <service> ... </definition>
Nedenfor er et diagram over strukturen af en WSDL-fil
WSDL elementer
WSDL-filen indeholder følgende hoveddele
- tag bruges til at definere alle de komplekse datatyper, som vil blive brugt i meddelelsen, der udveksles mellem klientapplikationen og webtjenesten. Dette er et vigtigt aspekt af klientapplikationen, for hvis webtjenesten arbejder med en kompleks datatype, bør klientapplikationen vide, hvordan den komplekse datatype behandles. Datatyper såsom float, tal og strenge er alle simple datatyper, men der kan være strukturerede datatyper, som kan leveres af webtjenesten.
For eksempel kunne der være en datatype kaldet EmployeeDataType, som kunne have 2 elementer kaldet "EmployeeName" af typestreng og "EmployeeID" af typenummer eller heltal. Tilsammen danner de en datastruktur, som så bliver en kompleks datatype. - tag bruges til at definere den besked, der udveksles mellem klientapplikationen og webserveren. Disse meddelelser vil forklare input- og outputhandlingerne, som kan udføres af webtjenesten. Et eksempel på en meddelelse kan være en meddelelse, der accepterer en medarbejders medarbejder-ID, og outputmeddelelsen kan være navnet på medarbejderen baseret på det angivne medarbejder-id.
- tag bruges til at indkapsle hver input- og outputmeddelelse i én logisk operation. Så der kunne være en operation kaldet "GetEmployee", som kombinerer inputmeddelelsen om at acceptere EmployeeID fra en klientapplikation og derefter sende EmployeeName som outputbesked.
- tag bruges til at binde operationen til den bestemte porttype. Dette er således, at når klientapplikationen kalder den relevante porttype, vil den så kunne få adgang til de operationer, som er bundet til denne porttype. Porttyper er ligesom grænseflader. Så hvis en klientapplikation skal bruge en webtjeneste, skal de bruge de bindende oplysninger for at sikre, at de kan oprette forbindelse til den grænseflade, der leveres af den pågældende webtjeneste.
- tag er et navn givet til selve webtjenesten. I første omgang, når en klientapplikation foretager et opkald til webtjenesten, vil den gøre det ved at kalde navnet på webtjenesten. Eksempelvis kan en webservice ligge på en adresse som f.eks http://localhost/Guru99/Tutorial.asmx . Servicetagget vil faktisk have URL'en defineret som http://localhost/Guru99/Tutorial.asmx, som faktisk vil fortælle klientapplikationen, at der er en webservice tilgængelig på dette sted.
Hvorfor WSDL
En webservice er en vigtig komponent i opbygningen af moderne webapplikationer. Deres hovedformål er at tillade flere applikationer bygget på forskellige programmeringssprog at tale med hinanden. For eksempel kan vi få en .Net webapplikation til at tale med en Java applikation via en webtjeneste.
En webtjeneste har følgende nøglefunktioner
- Det er bygget ved hjælp af XML-programmeringssproget. Næsten alle moderne teknologier som .Net og Java har tilsvarende kommandoer, der har mulighed for at arbejde med XML. Derfor blev XML taget som det mest passende sprog til at bygge webtjenester.
- Webtjenester kommunikerer over HTTP. HTTP er en protokol, der bruges af alle webbaserede applikationer. Derfor gav det bare mening at sikre, at webtjenester også havde evnen til at arbejde over HTTP-protokollen.
- Webtjenester er i overensstemmelse med en bestemt sprogspecifikation. Denne specifikation er fastsat af W3C, som er det styrende organ for alle webstandarder.
- Webtjenester har et beskrivelsessprog kendt som WSDL, som bruges til at beskrive webtjenesten.
WSDL-filen er skrevet i almindelig gammel XML. Grunden til at det er i XML er, at filen kan læses af et hvilket som helst programmeringssprog.
Så hvis klientapplikationen var skrevet i .Net, ville den forstå XML-filen. Tilsvarende, hvis klientapplikationen blev skrevet i Java programmeringssprog så ville det også være i stand til at fortolke WSDL-filen.
WSDL-filen er det, der binder alt sammen. Fra ovenstående diagram kan du se, at du kan oprette en webservice på .Net-sproget.
Så det er her, tjenesten bliver implementeret. Hvis du ikke havde WSDL-filen og ønskede en Java klasse for at forbruge webtjenesten, ville du have brug for en masse kodningsindsats for at opnå dette.
Men nu med WSDL-filen, som er i XML, som kan forstås af ethvert programmeringssprog, kan du nu nemt have en Java klasse bruger .Net-webtjenesten. Derfor reduceres mængden af kodningsindsats kraftigt.
WSDL-meddelelsesdel
WSDL består af en sektion kaldet "beskeder", som er betegnet med element.
Dette element bruges grundlæggende til at beskrive de data, der udveksles mellem webtjenesten og klientapplikationen.
Hver webtjeneste vil altid have 2 typer beskeder,
- Den ene er til input af webtjenesten, og den anden er til output af webservice.
- Indgangen bruges til at beskrive de parametre, som accepteres af webservicen. Dette er et vigtigt aspekt af klientapplikationen, så den kender de værdier, der skal sendes som parametre til webtjenesten.
- Den anden type meddelelse er outputmeddelelsen, som fortæller, hvilke resultater der leveres af webtjenesten.
Hver besked vil til gengæld have en element, som bruges til at beskrive den parameter, der bruges af input- og outputmeddelelsen.
Nedenfor er et simpelt eksempel på, hvordan en besked til en webtjeneste ser ud. Funktionaliteten af webtjenesten er at angive navnet på en "Tutorial", når et "Tutorial ID" er indsendt som en parameter til webtjenesten.
- Som vi kan se har webtjenesten 2 beskeder, den ene for input og den anden for output.
- Indtastningsmeddelelsen er kendt som TutorialNameRequest, som har en parameter kaldet TutorialID. Denne parameter er af det typenummer, som er angivet af typen xsd:number
- Outputmeddelelsen er kendt som TutorialNameResponse, som har en parameter kaldet TutorialName. Denne parameter er af typen streng, som er specificeret af typen xsd:streng
Port Type Binding
Porte bruges i WSDL til at definere en komplet operation, som tilbydes af webtjenesten.
I det forrige emne så vi, at vores webservice leverede 2 meddelelser, en til input kaldet "TutorialNameRequest" og den anden for output kaldet "TutorialNameResponse." Sammen er input- og outputmeddelelsesformularen kendt som én komplet operation.
WSDL giver et element kaldet som bruges til at definere de operationer, der leveres af webtjenesten.
Så i vores ovenstående eksempel kan vi bemærke følgende:
- Navnet på porttypen, der indkapsler operationen, er givet som "Tutorial_PortType."
- Selve operationen får navnet "Tutorial". Så vores operation giver grundlæggende et TutorialName, hvis TutorialID er givet som en inputparameter.
- Dernæst er vores 2 beskeder, den ene for input og den anden for output, som danner vores operation
Ud over den element, der er også element, som bruges til at definere, hvordan meddelelserne skal overføres.
- Ovenstående eksempel viser, at indbindingen består af et bindende navn, som i vores tilfælde er angivet som "TutorialSoapBinding". Bindende i enkle vendinger er den information, som klientapplikationen bruger til faktisk at binde sig til webtjenesten. Når først den rent faktisk er bundet til webtjenesten, har den så mulighed for at kalde de forskellige operationer, som er eksponeret af webtjenesten.
- Transportlaget er givet som http://, hvilket betyder, at de meddelelser, der overføres over HTTP-protokollen.
Oprettelse af WSDL-fil
WSDL-filen bliver oprettet, når en webtjeneste er bygget i et hvilket som helst programmeringssprog.
Da WSDL-filen er temmelig kompliceret at generere fra almindelig bunden, er alle editorer såsom Visual Studio for .Net og Eclipse forum Java automatisk oprette WSDL-filen.
Nedenfor er et eksempel på en WSDL-fil oprettet i Visual Studio.
<?xml version="1.0"?> <definitions name="Tutorial" targetNamespace=http://Guru99.com/Tutorial.wsdl xmlns:tns=http://Guru99.com/Tutorial.wsdl xmlns:xsd1=http://Guru99.com/Tutorial.xsd xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap/ xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <schema targetNamespace=http://Guru99.com/Tutorial.xsd xmlns="http://www.w3.org/2000/10/XMLSchema"> <element name="TutorialNameRequest"> <complexType> <all> <element name="TutorialName" type="string"/> </all> </complexType> </element> <element name="TutorialIDRequest"> <complexType> <all> <element name="TutorialID" type="number"/> </all> </complexType> </element> </schema> </types> <message name="GetTutorialNameInput"> <part name="body" element="xsd1:TutorialIDRequest"/> </message> <message name="GetTutorialNameOutput"> <part name="body" element="xsd1:TutorialNameRequest"/> </message> <portType name="TutorialPortType"> <operation name="GetTutorialName"> <input message="tns:GetTutorialNameInput"/> <output message="tns:GetTutorialNameOutput"/> </operation> </portType> <binding name="TutorialSoapBinding" type="tns:TutorialPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetTutorialName"> <soap:operation soapAction="http://Guru99.com/GetTutorialName"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="TutorialService"> <documentation>TutorialService</documentation> <port name="TutorialPort" binding="tns:TutorialSoapBinding"> <soap:address location="http://Guru99.com/Tutorial"/> </port> </service> </definitions>
Ovenstående WSDL-fil ser meget skræmmende ud for enhver bruger, vi vil dække de forskellige dele i detaljer i de efterfølgende tutorials, men for nu, lad os få et sammenfattende kig på, hvad hver sektion af WSDL-filen faktisk gør
Udgivelse af webtjenesteeksempel
Lad os nu se på et eksempel på, hvordan vi kan udgive en webtjeneste og forbruge den ved at bruge Visual Studio.
I dette eksempel vil vi oprette en webservice med én WebMethod. Denne metode accepterer en heltalsparameter kaldet "TutorialID." Webmetoden returnerer derefter en streng kaldet "Webtjenester".
Vi vil derefter oprette en konsolbaseret applikation, som bruger denne webservice og kalder vores webmetode i overensstemmelse hermed.
Lad os se på de nødvendige trin for at udføre dette eksempel.
Trin 1) Det første skridt er at oprette din webservice. De detaljerede trin for, hvordan Asp.Net webprojekt og en webservice er oprettet er blevet forklaret her; Følg de samme trin for at oprette projektet og webtjenesten i overensstemmelse hermed. Nøglen er at indtaste nedenstående kode i webservicefilen.
namespace webservic asmx { [WebService(Name = "Guru99 Web service")] public class TutorialService : System.Web.Services.WebService { [WebMethod] public string GetTutorialService(int TutoriallD) { string TutorialName = "Web Services"; return TutorialName; } } }
Kodeforklaring:
- Her laver vi en WebMethod kaldet "Guru99WebService." I denne webmetode inkluderer vi en heltalsparameter, som skal sendes, hver gang denne webmetode kaldes.
- Dernæst definerer vi en variabel kaldet "TutorialName", som vil indeholde strengværdien for "Web Services." Dette er den værdi, som vil blive returneret, når webtjenesten kaldes.
Trin 2) Når vi har defineret webservicefilen, er næste trin at oprette et klientprojekt, som vil forbruge denne webservice.
Lad os oprette en simpel konsolapplikation, som kalder denne webtjeneste, kalder "Guru99WebService" og derefter viser outputtet fra webmetoden på konsollogskærmen. Følg nedenstående trin for at oprette en konsolapplikation.
Højreklik på Visual Studio-løsningsfilen, og vælg indstillingen Tilføj->Nyt projekt
Trin 3) I dette trin,
- Sørg for først at vælge Visual C# Windows mulighed. Vælg derefter muligheden for at oprette en konsolapplikation.
- Giv dit projekt et navn, som i vores tilfælde er blevet givet som "DemoApplication."
Når du har klikket på OK-knappen på ovenstående skærm, vil du være i stand til at se projektet i Solution Explorer i Visual Studio.
Trin 4) I dette trin indstiller du DemoApplication Console-applikationen som startprojektet. Dette gøres for at sikre, at denne applikation starter først, når hele Visual Studio-projektet køres. Denne konsolapplikation vil til gengæld kalde webtjenesten, som automatisk vil blive lanceret af Visual Studio.
For at fuldføre dette trin skal du højreklikke på DemoApplication-projektet og vælge indstillingen "Set as StartUp Project."
Trin 5) Det næste trin er at tilføje servicereferencen for vores "Guru99Webservice" til vores konsolapplikation. Dette gøres for at DemoAplikationen kan referere til webservicen og alle webmetoderne i webservicen.
For at gøre dette skal du højreklikke på DemoApplication-projektfilen og vælge menupunktet Tilføj->Servicereference.
Trin 6) I dette trin vil vi angive de forskellige værdier, som er nødvendige for at tilføje vores servicereference
- Først skal vi vælge vores opdagelsesmulighed. Denne mulighed henter automatisk WSDL-filen til vores TutorialService-webservice.
- Dernæst skal vi give et navn til vores servicereference. I vores tilfælde giver vi det navnet Guru99Webservice.
- Så er vi nødt til at udvide TutorialService.asmx muligheden, så vi kan have mulighed for at se 'GetTutorialService' metoden i højre side. Her er TutorialService.asmx navnet på vores Visual Studio .Net-fil, som indeholder koden til vores webservice.
- Vi vil derefter se vores webmetode, som vi havde i vores webservice kendt som "GetTutorialService"
Når vi klikker på knappen 'OK', vil al den nødvendige kode for at få adgang til denne webservice blive tilføjet til vores DemoApplication Console-applikation som vist nedenfor.
Skærmbilledet viser, at "Guru99Webservice" blev tilføjet til vores konsolapplikation.
Trin 7) Det næste trin er at tilføje koden til vores konsolapplikation for at få adgang til webmetoden i vores webservice. Åbn Program.cs-kodefilen, som kommer automatisk med konsolapplikationen, og tilføj nedenstående kode
namespace DemoApplication { class Program { static void Main(string[ ] args) { var client = new Guru99Webservice.Guru99WebserviceSoapClient(); Console.WriteLine(client.GetTutorialService(l)); Console.ReadKey(); } } }
Kodeforklaring:-
- Den første del er at vælge filen Program.cs. Dette er hovedfilen, som oprettes af Visual Studio, når en konsolapplikation oprettes. Denne fil er det, der bliver eksekveret, når konsolapplikationen (i vores tilfælde demoapplikation) udføres.
- Vi opretter derefter en variabel kaldet "klient", som vil blive sat til en forekomst af vores Service-reference, som blev oprettet i et tidligere trin. I vores tilfælde er servicereferencen 'Guru99Webservice.Guru99WebserviveSoapClient()'
- Vi kalder derefter vores webmetode 'GetTutorialService' i TutorialService-webservicen. Husk, at vores GetTutorialService'-metode accepterer en heltalsparameter, så vi sender bare en heltalsparameter til webmetoden.
- Denne sidste linje er bare for at sikre, at konsollogskærmen forbliver aktiv, så vi kan se outputtet. Denne kommando vil bare vente på input fra brugeren.
Produktion
Når alle ovenstående trin er fulgt, og DemoApplication er kørt, vil nedenstående output blive vist.
Fra outputtet kan vi tydeligt se, at DemoApplicationen kalder vores webservice, og at strengen returneret af webservicen vises i vores konsollog.
Resumé
- Fuld form for WSDL er Web Services Description sprog
- Et WSDL-dokument er et dokument, der bruges til at beskrive en webservice. Dette er nøglen til enhver klientapplikation for at vide, hvor webtjenesten er placeret. Det giver også klientapplikationen mulighed for at forstå de tilgængelige metoder i webtjenesten.
- WSDL-filen gør det meget nemt for webtjenesten at blive implementeret i ét programmeringssprog og kaldet fra et andet programmeringssprog.
- WSDL-dokumentet består normalt af en meddelelse. For hver webmetode er der 2 beskeder, den ene er til input, og den anden er til output. Sammen danner de en operation.
- Web Services Description Language (står for WSDL) filer bliver normalt oprettet i editoren, som bruges til det tilsvarende programmeringssprog.
- Vi har set, hvordan vi kan forbruge en webservice i Visual Studio. Dette kan gøres ved at oprette et andet projekt, som er en konsolapplikation. Så ved at tilføje en servicereference kan vi så få adgang til webmetoderne i vores webservice.