Wat is WSDL? Betekenis en voorbeeld
⚡ Slimme samenvatting
WSDL (webservices DescriptWSDL (Web Service Language) is een XML-bestand dat een clienttoepassing vertelt wat een webservice doet en hoe deze aangeroepen kan worden. Deze bron legt de WSDL-structuur, elementen, berichten, poorttypen, bindingen en een publicatievoorbeeld uit.
Wat is WSDL?
Web Services Description Taal (WSDL) is een op XML gebaseerd bestand dat de clientapplicatie feitelijk vertelt wat de webservice doet. Het WSDL-bestand wordt gebruikt om in een notendop te beschrijven wat de webservice doet en geeft de klant alle informatie die nodig is om verbinding te maken met de webservice en alle functionaliteit van de webservice te gebruiken.
In deze handleiding richten we ons op het belangrijkste onderdeel van webservices, namelijk de WSDL, oftewel de webservicedocumentatie. Description Taal. Het fungeert als de contract tussen de webservice en elke client die er gebruik van wil maken.
Structuur van een WSDL-document
Een WSDL-document wordt gebruikt om een webservice te beschrijven. Deze beschrijving is nodig zodat clientapplicaties kunnen begrijpen wat de webservice precies doet.
- Het WSDL-bestand bevat de locatie van de webservice, en
- De methoden die door de webservice worden weergegeven.
Het WSDL-bestand zelf kan er voor de gebruiker erg complex uitzien, maar het bevat alle noodzakelijke informatie die een clienttoepassing nodig heeft om de betreffende webservice te gebruiken. Hieronder staat de algemene structuur van een WSDL-bestand:
- Definitie
- Targetnamespace
- Gegevenstypen
- Berichten
- Poorttype
- bindingen
- Diensten
Een belangrijk punt om hier op te merken is dat de definitie van berichten, dat wil zeggen wat er wordt doorgegeven door de SOAP-protocolDit wordt feitelijk gedefinieerd in het WSDL-document. Het WSDL-document vertelt een clienttoepassing welke typen SOAP-berichten door de webservice worden verzonden en ontvangen.
Met andere woorden, de WSDL is net als een ansichtkaart met het adres van een bepaalde locatie. Het adres geeft aan waar het bericht bezorgd moet worden. Op dezelfde manier is het WSDL-bestand de ansichtkaart met het adres van de webservice die alle functionaliteit kan leveren die de klant wenst.
<!-- 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>
Hieronder staat een diagram van de structuur van een WSDL-bestand.
Structuur van een WSDL
WSDL-elementen
Het WSDL-bestand bevat de volgende hoofdonderdelen:
- De De tag wordt gebruikt om alle complexe gegevenstypen te definiëren die worden gebruikt in de berichtenuitwisseling tussen de clientapplicatie en de webservice. Dit is belangrijk, omdat de clientapplicatie moet weten hoe een complex gegevenstype te verwerken als de webservice ermee werkt. Gegevenstypen zoals float, getallen en strings zijn eenvoudige gegevenstypen, maar de webservice kan ook gestructureerde gegevenstypen aanbieden. Zo kan er bijvoorbeeld een gegevenstype zijn met de naam EmployeeDataType, dat twee elementen kan bevatten: "EmployeeName" van het type string en "EmployeeID" van het type getal of integer. Samen vormen ze een complex gegevenstype.
- De Een tag wordt gebruikt om het bericht te definiëren dat wordt uitgewisseld tussen de clientapplicatie en de webserver. Deze berichten beschrijven de invoer- en uitvoerbewerkingen die door de webservice kunnen worden uitgevoerd. Een voorbeeld van een bericht is een bericht dat het EmployeeID van een medewerker accepteert, en als uitvoer de naam van de medewerker geeft op basis van het opgegeven EmployeeID.
- De tag wordt gebruikt om elk invoer- en uitvoerbericht in één logische bewerking te encapsuleren. Er zou dus een bewerking kunnen zijn genaamd "GetEmployee" die het invoerbericht van het accepteren van de EmployeeID van een clienttoepassing combineert en vervolgens de EmployeeName als uitvoerbericht verzendt.
- De De tag wordt gebruikt om de bewerking te koppelen aan een specifiek poorttype. Hierdoor kan de clienttoepassing, wanneer deze het betreffende poorttype aanroept, toegang krijgen tot de daaraan gekoppelde bewerkingen. Poorttypen zijn vergelijkbaar met interfaces. Als een clienttoepassing een webservice wil gebruiken, moet deze de bindingsinformatie gebruiken om ervoor te zorgen dat er verbinding kan worden gemaakt met de interface die door die webservice wordt aangeboden.
- De De tag is een naam die aan de webservice zelf wordt gegeven. Wanneer een clientapplicatie de webservice aanroept, doet deze dat in eerste instantie door de naam van de webservice te gebruiken. Een webservice kan bijvoorbeeld te vinden zijn op een adres zoals http://localhost/.Guru99/Tutorial.asmx. De servicetag zal de URL gedefinieerd, wat de clienttoepassing vertelt dat er op deze locatie een webservice beschikbaar is.
Waarom WSDL
Een webservice is een belangrijk onderdeel bij het bouwen van moderne webapplicaties. Het belangrijkste doel ervan is om meerdere applicaties, gebouwd in verschillende programmeertalen, met elkaar te laten communiceren. Zo kan een .NET-webapplicatie bijvoorbeeld communiceren met een webservice. Java toepassing via een webservice.
Een webservice heeft de volgende belangrijke kenmerken:
- Het is gebouwd met behulp van de XML-programmeertaal. Vrijwel alle moderne technologieën zoals .Net en Java hebben overeenkomstige opdrachten die met XML kunnen werken. Daarom werd XML beschouwd als de meest geschikte taal voor het bouwen van webservices.
- Webdiensten communiceren via HTTP. HTTP is een protocol dat door alle webapplicaties wordt gebruikt. Het was daarom logisch om ervoor te zorgen dat webdiensten ook via het HTTP-protocol konden werken.
- Webservices voldoen aan een bepaalde taalspecificatie. Deze specificatie is opgesteld door het W3C, het bestuursorgaan voor alle webstandaarden.
- Webservices hebben een beschrijvingstaal die bekend staat als WSDL en die wordt gebruikt om de webservice te beschrijven.
Het WSDL-bestand is geschreven in gewoon XML. De reden hiervoor is dat het bestand door elke programmeertaal gelezen kan worden. Dus als de clientapplicatie in .NET geschreven is, zal deze het XML-bestand begrijpen. Hetzelfde geldt als de clientapplicatie in een andere taal geschreven is. Java Als het een programmeertaal is, dan zou het ook het WSDL-bestand kunnen interpreteren.
Het WSDL-bestand is wat alles met elkaar verbindt. Zoals je in het bovenstaande diagram kunt zien, kun je een webservice maken in de .NET-taal. Dit is dus waar de service wordt geïmplementeerd. Als je geen WSDL-bestand had en een webservice wilde maken, zou je dat niet kunnen. Java Om een webservice via een aparte klasse te gebruiken, zou je veel programmeerwerk moeten verzetten. Maar nu, met het WSDL-bestand, dat in XML is geschreven en door elke programmeertaal kan worden begrepen, is dat heel eenvoudig. Java klasse gebruikt de .Net-webservice. De hoeveelheid codeerinspanningen wordt dus aanzienlijk verminderd.
WSDL-berichtonderdeel
De WSDL bestaat uit een sectie genaamd “berichten”, die wordt aangeduid met de element. Dit element wordt in principe gebruikt om de gegevens te beschrijven die worden uitgewisseld tussen de webservice en de clientapplicatie.
Elke webservice heeft altijd twee soorten berichten:
- Eén is voor de invoer van de webservice en de andere is voor de uitvoer van de webservice.
- De invoer wordt gebruikt om de parameters te beschrijven die door de webservice worden geaccepteerd. Dit is een belangrijk aspect van de clienttoepassing, zodat deze weet welke waarden als parameters naar de webservice moeten worden verzonden.
- Het andere type bericht is het uitvoerbericht dat vertelt welke resultaten door de webservice worden geleverd.
Elk bericht heeft op zijn beurt een element dat wordt gebruikt om de parameter te beschrijven die wordt gebruikt door het invoer- en uitvoerbericht.
Hieronder staat een eenvoudig voorbeeld van hoe een bericht voor een webservice eruitziet. De functionaliteit van de webservice is om de naam van een "Tutorial" te verstrekken zodra een "Tutorial ID" als parameter aan de webservice wordt doorgegeven.
- Zoals we kunnen zien, heeft de webservice twee berichten, één voor de invoer en één voor de uitvoer.
- Het invoerbericht heet TutorialNameRequest en heeft één parameter genaamd TutorialID. Deze parameter is van het type 'number', zoals gespecificeerd door het type xsd:number.
- Het uitvoerbericht heet TutorialNameResponse en heeft één parameter genaamd TutorialName. Deze parameter is van het type string, zoals gespecificeerd door het type xsd:string.
Poorttype binding
Poorten worden in WSDL gebruikt om één complete bewerking te definiëren die door de webservice wordt aangeboden. In het vorige onderwerp zagen we dat onze webservice twee berichten verstuurde: één voor de invoer genaamd "TutorialNameRequest" en één voor de uitvoer genaamd "TutorialNameResponse". Samen vormen het invoer- en uitvoerbericht wat bekend staat als één complete bewerking.
WSDL biedt een element met de naam die wordt gebruikt om de bewerkingen te definiëren die door de webservice worden uitgevoerd.
In ons bovenstaande voorbeeld kunnen we het volgende opmerken:
- De naam van het poorttype dat de bewerking omvat, wordt weergegeven als "Tutorial_PortType".
- De bewerking zelf krijgt de naam "Tutorial". Onze bewerking levert dus in principe een TutorialName op als de TutorialID als invoerparameter wordt meegegeven.
- Vervolgens komen onze twee berichten, één voor de invoer en één voor de uitvoer, die samen onze bewerking vormen.
Naast de element, er is ook de element dat wordt gebruikt om te definiëren hoe de berichten worden overgedragen.
- Het bovenstaande voorbeeld laat zien dat de binding bestaat uit een bindingsnaam, in ons geval "TutorialSoapBinding". Binding is, simpel gezegd, de informatie die de clientapplicatie gebruikt om zich daadwerkelijk aan de webservice te binden. Zodra de binding met de webservice tot stand is gebracht, kan de applicatie de verschillende bewerkingen aanroepen die door de webservice worden aangeboden.
- De transportlaag wordt aangeduid met http://, wat betekent dat de berichten via het HTTP-protocol worden verzonden.
WSDL-bestand maken
Het WSDL-bestand wordt aangemaakt telkens wanneer een webservice wordt gebouwd in een programmeertaal. Omdat het genereren van een WSDL-bestand vanuit het niets vrij complex is, gebruiken alle editors, zoals Visual Studio for .Net en Eclipse besteld, Java automatisch het WSDL-bestand maken.
Hieronder ziet u een voorbeeld van een WSDL-bestand dat is gemaakt in 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>
Het bovenstaande WSDL-bestand ziet er voor elke gebruiker behoorlijk intimiderend uit. We zullen de verschillende onderdelen in detail behandelen in de volgende tutorials, maar laten we voor nu eerst een samenvatting geven van wat elk onderdeel van het WSDL-bestand precies doet.
Het voorbeeld van de webservice publiceren
Laten we nu eens kijken naar een voorbeeld van hoe we een webservice kunnen publiceren en gebruiken met Visual Studio. In dit voorbeeld maken we een webservice met één WebMethod. Deze methode accepteert een integer-parameter met de naam "TutorialID". De WebMethod retourneert vervolgens een string met de naam "Web Services".
We gaan vervolgens een consoletoepassing maken die deze webservice gebruikt en onze webmethode dienovereenkomstig aanroept. Laten we de stappen bekijken die nodig zijn om dit voorbeeld uit te voeren.
Stap 1) De eerste stap is het maken van uw webservice. De gedetailleerde stappen van hoe de Asp.Net Het creëren van een webproject en een webservice is uitgelegd. hierVolg dezelfde stappen om het project en de webservice te maken. Het belangrijkste is om de onderstaande code in het webservicebestand in te voeren.
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 Uitleg:
- Hier maken we een WebMethod aan met de naam "Guru99WebService.” In deze webmethode voegen we een integer-parameter toe die moet worden doorgegeven telkens wanneer deze webmethode wordt aangeroepen.
- Vervolgens definiëren we een variabele genaamd “TutorialName” die de tekenreekswaarde van “Web Services” zal bevatten. Dit is de waarde die wordt geretourneerd wanneer de webservice wordt aangeroepen.
Stap 2) Nadat we het webservicebestand hebben gedefinieerd, is de volgende stap het maken van een clientproject dat deze webservice zal gebruiken. Laten we een eenvoudige consoletoepassing maken die deze webservice aanroept en de volgende code uitvoert: "Guru99WebService,” en toon vervolgens de uitvoer van de webmethode in het consolelogscherm. Volg de onderstaande stappen om een consoletoepassing te maken. Klik met de rechtermuisknop op het Visual Studio-oplossingsbestand en kies de optie Toevoegen -> Nieuw project.
Stap 3) In deze stap,
- Zorg ervoor dat u eerst de Visual kiest C# Windows keuze. Kies dan voor de optie om een consoleapplicatie te maken.
- Geef een naam voor uw project, die in ons geval 'DemoApplication' is.
Nadat u op de knop OK in het bovenstaande scherm hebt geklikt, kunt u het project in de Solution Explorer van Visual Studio bekijken.
Stap 4) In deze stap stelt u de consoletoepassing DemoApplication in als opstartproject. Dit zorgt ervoor dat deze toepassing als eerste wordt gestart wanneer het volledige Visual Studio-project wordt uitgevoerd. Deze consoletoepassing roept vervolgens de webservice aan, die automatisch door Visual Studio wordt gestart. Om deze stap te voltooien, klikt u met de rechtermuisknop op het project DemoApplication en kiest u de optie 'Instellen als opstartproject'.
Stap 5) De volgende stap is het toevoegen van de servicereferentie van onze "GuruVoeg "99Webservice" toe aan onze consoletoepassing. Dit doen we zodat de DemoApplication de webservice en alle webmethoden in de webservice kan gebruiken. Klik hiervoor met de rechtermuisknop op het projectbestand van DemoApplication en kies de menuoptie Toevoegen -> Serviceverwijzing.
Stap 6) In deze stap geven we de verschillende waarden op die nodig zijn om onze servicereferentie toe te voegen.
- Allereerst moeten we onze detectieoptie kiezen. Deze optie zal automatisch het WSDL-bestand voor onze TutorialService-webservice selecteren.
- Vervolgens moeten we een naam geven aan onze servicereferentie. In ons geval geven we deze de naam Guru99Webservice.
- Vervolgens moeten we de optie TutorialService.asmx uitbreiden, zodat we de methode "GetTutorialService" aan de rechterkant kunnen zien. TutorialService.asmx is de naam van ons Visual Studio .NET-bestand dat de code voor onze webservice bevat.
- Vervolgens bekijken we onze webmethode die we in onze webservice hadden, genaamd "GetTutorialService".
Wanneer we op de knop "OK" klikken, wordt alle benodigde code voor toegang tot deze webservice toegevoegd aan onze DemoApplication Console-applicatie, zoals hieronder weergegeven. De schermafbeelding laat zien dat de "Guru"99Webservice" is succesvol toegevoegd aan onze consoletoepassing.
Stap 7) De volgende stap is het toevoegen van de code aan onze consoletoepassing om toegang te krijgen tot de webmethode in onze webservice. Open het codebestand Program.cs, dat automatisch bij de consoletoepassing wordt geleverd, en voeg de onderstaande code toe.
namespace DemoApplication { class Program { static void Main(string[] args) { var client = new Guru99Webservice.Guru99WebserviceSoapClient(); Console.WriteLine(client.GetTutorialService(1)); Console.ReadKey(); } } }
Code Uitleg:
- De eerste stap is het selecteren van het bestand Program.cs. Dit is het hoofdbestand dat door Visual Studio wordt aangemaakt wanneer een consoletoepassing wordt gemaakt. Dit bestand wordt uitgevoerd wanneer de consoletoepassing (in ons geval DemoApplication) wordt gestart.
- Vervolgens maken we een variabele aan met de naam "client", die wordt ingesteld op een instantie van onze servicereferentie die in een eerdere stap is aangemaakt. In ons geval is de servicereferentie 'Guru99Webservice.Guru99WebserviceSoapClient()'.
- Vervolgens roepen we onze webmethode 'GetTutorialService' aan in de webservice TutorialService. Houd er rekening mee dat onze GetTutorialService-methode een integer-parameter accepteert, dus we geven gewoon een integer-parameter door aan de webmethode.
- Deze laatste regel zorgt er alleen voor dat het consolelogscherm actief blijft, zodat we de uitvoer kunnen bekijken. Deze opdracht wacht op invoer van de gebruiker.
uitgang
Als alle bovenstaande stappen zijn gevolgd en de demo-applicatie wordt uitgevoerd, wordt de onderstaande uitvoer weergegeven.
Uit de uitvoer blijkt duidelijk dat de DemoApplication onze webservice aanroept en dat de door de webservice geretourneerde tekenreeks wordt weergegeven in ons consolelogboek.
















