Hvad er WSDL? Betydning og eksempel
⚡ Smart opsummering
WSDL (Web Services Description Language) er en XML-baseret fil, der fortæller en klientapplikation, hvad en webtjeneste gør, og hvordan den skal kaldes. Denne ressource forklarer WSDL-struktur, elementer, meddelelser, porttyper, bindinger og et eksempel på publicering.
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 vejledning vil vi fokusere på den vigtigste del af webtjenester, og det er WSDL eller webtjenester. Descriptionsprog. Det fungerer som den centraletracmellem webtjenesten og enhver klient, der ønsker at forbruge den.
Strukturen af et WSDL-dokument
Et WSDL-dokument bruges til at beskrive en webtjeneste. Denne beskrivelse er nødvendig, så klientapplikationer kan forstå, hvad webtjenesten rent faktisk gør.
- WSDL-filen indeholder webtjenestens placering, og
- De metoder, som er eksponeret af webtjenesten.
Selve WSDL-filen 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 webtjeneste. Nedenfor er den generelle struktur af en WSDL-fil:
- Definition
- Targetnavnerum
- Datatyper
- Beskeder
- Porttype
- Bindinger
- Service
En vigtig ting at bemærke her er definitionen af beskeder, som er det, der sendes af SOAP protokol, er faktisk defineret i WSDL-dokumentet. WSDL-dokumentet fortæller en klientapplikation, hvilke typer SOAP-meddelelser der sendes og accepteres af webtjenesten.
Med andre ord er WSDL ligesom et postkort, der har adressen på en bestemt lokation. Adressen angiver detaljerne om, hvor beskeden skal leveres. Derfor er WSDL-filen på samme måde postkortet, der har adressen på den webtjeneste, der kan levere al den funktionalitet, 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.
Struktur af en WSDL
WSDL elementer
WSDL-filen indeholder følgende hoveddele:
- Tagget bruges til at definere alle de komplekse datatyper, der vil blive brugt i den besked, der udveksles mellem klientapplikationen og webtjenesten. Dette er vigtigt, fordi hvis webtjenesten arbejder med en kompleks datatype, skal klientapplikationen vide, hvordan den skal behandle den. Datatyper som float, numbers og strings er alle simple datatyper, men der kan være strukturerede datatyper leveret af webtjenesten. For eksempel kan der være en datatype kaldet EmployeeDataType, som kan have 2 elementer kaldet "EmployeeName" af typen string og "EmployeeID" af typen number eller integer. Sammen danner de en kompleks datatype.
- Tagget bruges til at definere den besked, der udveksles mellem klientapplikationen og webserveren. Disse beskeder forklarer de input- og outputhandlinger, som webtjenesten kan udføre. Et eksempel på en besked kan være en, der accepterer en medarbejders medarbejder-ID, og outputbeskeden kan være navnet på den medarbejder, der er 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.
- Tagget bruges til at binde operationen til en bestemt porttype. Dette er sådan, at når klientapplikationen kalder den relevante porttype, vil den kunne få adgang til de operationer, der er bundet til den. Porttyper er ligesom grænseflader. Så hvis en klientapplikation skal bruge en webtjeneste, skal den bruge bindingsoplysningerne til at sikre, at den kan oprette forbindelse til den grænseflade, der leveres af den pågældende webtjeneste.
- Et tag er et navn givet til selve webtjenesten. Når en klientapplikation i starten foretager et kald til webtjenesten, gør den det ved at kalde navnet på webtjenesten. For eksempel kan en webtjeneste være placeret på en adresse som http://localhost/Guru99/Tutorial.asmx. Servicekoden vil have URL defineret, som fortæller klientapplikationen, at en webtjeneste er tilgængelig på denne placering.
Hvorfor WSDL
En webtjeneste er en vigtig komponent i opbygningen af moderne webapplikationer. Deres hovedformål er at give flere applikationer, der er bygget på forskellige programmeringssprog, mulighed for at kommunikere med hinanden. For eksempel kan vi få en .Net-webapplikation til at kommunikere med en Java applikation via en webtjeneste.
En webservice har følgende nøglefunktioner:
- Det er bygget ved hjælp af programmeringssproget XML. Næsten alle moderne teknologier så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 via HTTP. HTTP er en protokol, der bruges af alle webbaserede applikationer. Derfor var det fornuftigt at sikre, at webtjenester også havde mulighed for at arbejde via 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 XML. Grunden til, at den er i XML, er, at filen kan læses af ethvert programmeringssprog. Så hvis klientapplikationen var skrevet i .Net, ville den forstå XML-filen. Tilsvarende, hvis klientapplikationen var skrevet i Java programmeringssprog, så ville det også være i stand til at fortolke WSDL-filen.
WSDL-filen er det, der binder det hele sammen. Ud fra ovenstående diagram kan du se, at du kan oprette en webservice i .Net-sproget. Det er her, servicen implementeres. Hvis du ikke havde WSDL-filen og ønskede en Java klasse for at bruge webtjenesten, ville du kræve en masse kodningsindsats for at opnå dette. Men nu med WSDL-filen, som er i XML og kan forstås af ethvert programmeringssprog, kan du 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. Webtjenestens funktionalitet 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, en til input og en anden til output.
- Inputmeddelelsen kaldes TutorialNameRequest, som har én parameter kaldet TutorialID. Denne parameter er af typen number, som er angivet af xsd:number-typen.
- Outputmeddelelsen kaldes TutorialNameResponse, som har én parameter kaldet TutorialName. Denne parameter er af typen string, som er angivet af xsd:string-typen.
Port Type Binding
Porte bruges i WSDL til at definere én komplet operation, som tilbydes af webtjenesten. I det forrige emne så vi, at vores webtjeneste leverede 2 beskeder, én til inputtet kaldet "TutorialNameRequest" og den anden til outputtet kaldet "TutorialNameResponse". Sammen danner input- og outputbeskeden det, der kaldes é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å den porttype, der indkapsler operationen, er angivet som "Tutorial_PortType".
- Selve operationen får navnet "Tutorial". Så vores operation angiver grundlæggende et TutorialName, hvis TutorialID'et angives som inputparameter.
- Dernæst er vores 2 beskeder, en til input og den anden til 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 bindingen består af et bindingsnavn, som i vores tilfælde er angivet som "TutorialSoapBinding". Binding er, enkelt sagt, den information, som klientapplikationen bruger til rent faktisk at binde sig til webtjenesten. Når den er bundet til webtjenesten, har den derefter mulighed for at kalde de forskellige operationer, der eksponeres af webtjenesten.
- Transportlaget er angivet som http://, hvilket betyder, at beskederne overføres via HTTP-protokollen.
Oprettelse af WSDL-fil
WSDL-filen oprettes, når en webservice bygges i et hvilket som helst programmeringssprog. Da WSDL-filen er ret kompliceret at generere fra bunden, er alle editorer som Visual Studio til .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 virker meget skræmmende for enhver bruger. Vi vil dække de forskellige dele i detaljer i de efterfølgende vejledninger, men lad os nu tage et kort overblik over, hvad hver sektion af WSDL-filen rent faktisk gør.
Udgivelse af webtjenesteeksempel
Lad os nu se på et eksempel på, hvordan vi kan udgive en webtjeneste og bruge den ved hjælp af Visual Studio. I dette eksempel opretter vi en webtjeneste med én WebMethod. Denne metode accepterer en heltalsparameter kaldet "TutorialID". Webmetoden returnerer derefter en streng kaldet "Web Services".
Vi opretter derefter en konsolbaseret applikation, som bruger denne webtjeneste og kalder vores webmetode i overensstemmelse hermed. Lad os se på de trin, der kræves for at udføre dette eksempel.
Trin 1) Det første skridt er at oprette din webservice. De detaljerede trin for, hvordan Asp.Net Oprettelsen af et webprojekt og en webservice er blevet forklaret link.Følg de samme trin for at oprette projektet og webtjenesten i overensstemmelse hermed. Det vigtigste er at indtaste nedenstående kode i webtjenestefilen.
namespace webservic_asmx { [WebService(Name = "Guru99 Web service")] public class TutorialService : System.Web.Services.WebService { [WebMethod] public string GetTutorialService(int TutorialID) { string TutorialName = "Web Services"; return TutorialName; } } }
Code Forklaring:
- Her opretter vi en webmetode kaldet "Guru99WebService.” I denne webmetode inkluderer vi en heltalsparameter, der 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 webtjenestefilen, er næste trin at oprette et klientprojekt, der skal bruge denne webtjeneste. Lad os oprette en simpel konsolapplikation, der kalder denne webtjeneste og kalder "Guru99WebService,” og vis derefter outputtet fra web-metoden i konsollogskærmen. Følg nedenstående trin for at oprette et konsolprogram. 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ærmbillede, vil du kunne se projektet i Solution Explorer i Visual Studio.
Trin 4) I dette trin skal du indstille DemoApplication Console-applikationen som opstartsprojekt. Dette gøres for at sikre, at denne applikation starter først, når hele Visual Studio-projektet køres. Denne konsolapplikation vil derefter kalde webtjenesten, som automatisk startes af Visual Studio. For at fuldføre dette trin skal du højreklikke på DemoApplication-projektet og vælge indstillingen "Angiv som opstartsprojekt".
Trin 5) Det næste trin er at tilføje servicereferencen for vores “Guru99Webservice” til vores konsolapplikation. Dette gøres, så DemoApplication kan referere til webtjenesten og alle webmetoderne i webtjenesten. For at gøre dette skal du højreklikke på DemoApplication-projektfilen og vælge menupunktet Tilføj->Tjenestereference.
Trin 6) I dette trin angiver vi de forskellige værdier, der kræves for at tilføje vores servicereference.
- Først skal vi vælge vores "discover"-mulighed. Denne mulighed vil automatisk hente WSDL-filen til vores TutorialService-webtjeneste.
- Dernæst skal vi give vores servicereference et navn. I vores tilfælde giver vi den navnet Guru99Webtjeneste.
- Derefter skal vi udvide TutorialService.asmx-indstillingen, så vi kan se metoden "GetTutorialService" i højre side. Her er TutorialService.asmx navnet på vores Visual Studio .Net-fil, som indeholder koden til vores webservice.
- Vi vil så se vores webmetode, som vi havde i vores webtjeneste kendt som "GetTutorialService".
Når vi klikker på knappen "OK", vil al den nødvendige kode for at få adgang til denne webtjeneste blive tilføjet til vores DemoApplication Console-applikation, som vist nedenfor. Skærmbilledet viser, at "Guru"99Webservice" 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 webtjeneste. Åbn Program.cs-kodefilen, som automatisk følger 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(1)); Console.ReadKey(); } } }
Code Forklaring:
- Den første del er at vælge Program.cs-filen. Dette er hovedfilen, som oprettes af Visual Studio, når en konsolapplikation oprettes. Det er denne fil, der udføres, når konsolapplikationen (i vores tilfælde DemoApplication) udføres.
- Vi opretter derefter en variabel kaldet "client", som sættes til en instans af vores servicereference, som blev oprettet i et tidligere trin. I vores tilfælde er servicereferencen 'Guru99Webtjeneste.Guru99WebserviceSoapClient()'.
- Vi kalder derefter vores webmetode 'GetTutorialService' i TutorialService-webtjenesten. Husk, at vores GetTutorialService-metode accepterer en heltalsparameter, så vi sender blot en heltalsparameter til webmetoden.
- Denne sidste linje er blot for at sikre, at konsollogskærmen forbliver aktiv, så vi kan se outputtet. Denne kommando venter på input fra brugeren.
Produktion
Når alle ovenstående trin er fulgt, og DemoApplication er kørt, vises nedenstående output.
Fra outputtet kan vi tydeligt se, at DemoApplicationen kalder vores webservice, og at strengen returneret af webservicen vises i vores konsollog.
















