WSDL-zelfstudie: Webservices Descriptiontaal met voorbeeld

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 tutorial gaan we ons concentreren op het laatste punt, het belangrijkste onderdeel van webservices, en dat is de WSDL of de beschrijvingstaal van webservices.

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.

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 feitelijk 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 heel complex uitzien, maar het bevat alle benodigde informatie die een cliënttoepassing nodig heeft om de relevante webservice te gebruiken.

Hieronder ziet u de algemene structuur van een WSDL-bestand

  • Definitie
  • Targetnamespace
  • Gegevenstypen
  • Berichten
  • Poorttype
  • bindingen
  • service

Een belangrijk ding om hier op te merken is de definitie van berichten, die wordt doorgegeven door de SOAP-protocol wordt feitelijk gedefinieerd in het WSDL-document.

Het WSDL-document vertelt een clienttoepassing feitelijk welke soorten SOAP-berichten er worden verzonden en geaccepteerd door de webservice.

Met andere woorden, de WSDL is net als een ansichtkaart met het adres van een bepaalde locatie. Het adres bevat de gegevens van de persoon die de ansichtkaart heeft bezorgd. Op dezelfde manier is het WSDL-bestand de ansichtkaart met het adres van de webservice die alle functionaliteit kan leveren die de klant wil.

<!-- 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 ziet u een diagram van de structuur van een WSDL-bestand

Structuur van een WSDL-document
Structuur van een WSDL

WSDL-elementen

Het WSDL-bestand bevat de volgende hoofdonderdelen

  1. De tag wordt gebruikt om alle complexe datatypes te definiëren die worden gebruikt in het bericht dat wordt uitgewisseld tussen de clienttoepassing en de webservice. Dit is een belangrijk aspect van de clienttoepassing, want als de webservice met een complex datatype werkt, moet de clienttoepassing weten hoe het complexe datatype moet worden verwerkt. Datatypen zoals float, numbers en strings zijn allemaal eenvoudige datatypen, maar er kunnen gestructureerde datatypen zijn die door de webservice kunnen worden geleverd.
    Er zou bijvoorbeeld een gegevenstype kunnen zijn genaamd EmployeeDataType dat 2 elementen zou kunnen hebben genaamd “EmployeeName” van het type string en “EmployeeID” van het type number of integer. Samen vormen ze een gegevensstructuur die vervolgens een complex gegevenstype wordt.
  2. De tag wordt gebruikt om het bericht te definiëren dat wordt uitgewisseld tussen de clienttoepassing en de webserver. Deze berichten leggen de invoer- en uitvoerbewerkingen uit die door de webservice kunnen worden uitgevoerd. Een voorbeeld van een bericht kan een bericht zijn dat de EmployeeID van een werknemer accepteert, en het uitvoerbericht kan de naam van de werknemer zijn op basis van de opgegeven EmpoyeeID.
  3. 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.
  4. De tag wordt gebruikt om de bewerking te binden aan het specifieke poorttype. Dit is zodat wanneer de clienttoepassing het relevante poorttype aanroept, deze toegang heeft tot de bewerkingen die aan dit poorttype zijn gebonden. Poorttypen zijn net als interfaces. Dus als een clienttoepassing een webservice moet gebruiken, moet deze de bindingsinformatie gebruiken om ervoor te zorgen dat deze verbinding kan maken met de interface die door die webservice wordt geboden.
  5. De tag is een naam die aan de webservice zelf wordt gegeven. Wanneer een clienttoepassing de webservice aanroept, gebeurt dit in eerste instantie door de naam van de webservice aan te roepen. Een webservice kan zich bijvoorbeeld bevinden op een adres zoals http://localhost/Guru99/Tutorial.asmx . In de servicetag is feitelijk de URL gedefinieerd als http://localhost/Guru99/Tutorial.asmx, waardoor de clientapplicatie daadwerkelijk wordt geïnformeerd dat er op deze locatie een webservice beschikbaar is.

Waarom WSDL

Een webservice is een belangrijk onderdeel bij het bouwen van moderne webapplicaties. Hun belangrijkste doel is om meerdere applicaties die op verschillende programmeertalen zijn gebouwd, met elkaar te laten praten. We kunnen bijvoorbeeld een .Net-webapplicatie laten praten met een Java toepassing via een webservice.

Een webservice heeft de volgende hoofdkenmerken

  • Het is gebouwd met behulp van de programmeertaal XML. Bijna 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.
  • Webservices communiceren via HTTP. HTTP is een protocol dat door alle webgebaseerde applicaties wordt gebruikt. Daarom was het logisch om ervoor te zorgen dat webservices 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 gewone, oude XML. De reden dat het in XML is, is zodat het bestand door elke programmeertaal kan worden gelezen.

Dus als de clienttoepassing in .Net was geschreven, zou deze het XML-bestand begrijpen. Op dezelfde manier, als de clienttoepassing is geschreven in de Java programmeertaal, dan zou het ook het WSDL-bestand kunnen interpreteren.

WSDL nodig

Het WSDL-bestand is wat alles samenbindt. Uit het bovenstaande diagram kunt u zien dat u een webservice kunt maken in de .Net-taal.

Dit is dus waar de service wordt geïmplementeerd. Als u het WSDL-bestand niet had en een Java class om de webservice te gebruiken, zou u veel codeerinspanningen nodig hebben om dit te bereiken.

Maar nu met het WSDL-bestand in XML, dat door elke programmeertaal kan worden begrepen, kunt u nu eenvoudig een 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 2 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 ziet u een eenvoudig voorbeeld van hoe een bericht voor een webservice eruit ziet. De functionaliteit van de webservice is om de naam van een “Tutorial” op te geven zodra een “Tutorial-ID” als parameter bij de webservice wordt ingediend.

WSDL-berichtonderdeel

  1. Zoals we kunnen zien heeft de webservice twee berichten, één voor de invoer en de andere voor de uitvoer.
  2. Het invoerbericht staat bekend als TutorialNameRequest en heeft één parameter genaamd TutorialID. Deze parameter is van het type nummer dat wordt gespecificeerd door het xsd:number type
  3. Het uitvoerbericht staat bekend als TutorialNameResponse en heeft één parameter met de naam TutorialName. Deze parameter is van het type string dat wordt gespecificeerd door het xsd:string-type

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 2 berichten leverde, één voor de invoer genaamd “TutorialNameRequest” en de andere voor de uitvoer genaamd “TutorialNameResponse.” Samen worden de invoer- en uitvoerberichtenvorm één complete bewerking genoemd.

WSDL biedt een element met de naam die wordt gebruikt om de bewerkingen te definiëren die door de webservice worden uitgevoerd.

Poorttype binding

In ons bovenstaande voorbeeld kunnen we het volgende opmerken:

  1. De naam van het poorttype dat de bewerking omvat, wordt gegeven als "Tutorial_PortType".
  2. De bewerking zelf krijgt de naam "Tutorial". Onze bewerking levert dus in principe een TutorialName op als de TutorialID als invoerparameter wordt meegegeven.
  3. Hierna volgen onze 2 berichten, één voor de invoer en de andere voor de uitvoer die onze werking vormen

Naast de element, er is ook de element dat wordt gebruikt om te definiëren hoe de berichten worden overgedragen.

Poorttype binding

  1. Het bovenstaande voorbeeld laat zien dat de binding bestaat uit een bindingsnaam die in ons geval wordt gegeven als "TutorialSoapBinding". Binding is in simpele bewoordingen de informatie die de clienttoepassing gebruikt om zichzelf daadwerkelijk te binden aan de webservice. Zodra het daadwerkelijk is gebonden aan de webservice, heeft het de mogelijkheid om de verschillende bewerkingen aan te roepen die door de webservice worden blootgesteld.
  2. De transportlaag wordt gegeven als http://, wat betekent dat de berichten via het HTTP-protocol worden verzonden.

WSDL-bestand maken

Het WSDL-bestand wordt gemaakt wanneer een webservice in een programmeertaal wordt gebouwd.

Omdat het vrij ingewikkeld is om het WSDL-bestand vanaf nul te genereren, zijn alle editors, zoals Visual Studio voor .Net en Eclipse voor 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 erg intimiderend uit. We zullen de verschillende onderdelen in detail bespreken in de volgende tutorials, maar laten we voor nu eens samenvattend kijken naar wat elke sectie van het WSDL-bestand feitelijk 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 behulp van Visual Studio.

In dit voorbeeld maken we een webservice met één WebMethode. Deze methode accepteert een Integer-parameter met de naam 'TutorialID'. De webmethode retourneert dan een tekenreeks met de naam 'Webservices'.

We zullen dan een console-gebaseerde applicatie maken, die deze webservice zal gebruiken en onze webmethode dienovereenkomstig aanroepen.

Laten we eens kijken naar de stappen 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 webproject en er een webservice wordt gemaakt, is uitgelegd hier; Volg dezelfde stappen om het project en de webservice dienovereenkomstig aan te maken. Het belangrijkste onderdeel is om de onderstaande code in het webservicesbestand in te voeren.

Het voorbeeld van de webservice publiceren

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;
		}
	}
}

Code Verklaring:

  1. Hier maken we een webmethode met de naam “Guru99WebService.” In deze webmethode nemen we een integer-parameter op die moet worden doorgegeven wanneer deze webmethode wordt aangeroepen.
  2. 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 webservicesbestand hebben gedefinieerd, is de volgende stap het maken van een klantproject dat deze webservice gaat gebruiken.

Laten we een eenvoudige consoletoepassing maken die deze webservice aanroept, de “Guru99WebService” aanroept en vervolgens de uitvoer van de webmethode in het consolelogscherm weergeeft. 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

Het voorbeeld van de webservice publiceren

Stap 3) In deze stap,

  1. Zorg ervoor dat u eerst de Visual kiest C# Windows keuze. Kies dan voor de optie om een ​​consoleapplicatie te maken.
  2. Geef een naam voor uw project, die in ons geval 'DemoApplication' is.

Het voorbeeld van de webservice publiceren

Nadat u op de OK-knop in het bovenstaande scherm hebt geklikt, kunt u het project zien in de Solution Explorer in Visual Studio.

Het voorbeeld van de webservice publiceren

Stap 4) In deze stap stelt u de DemoApplication Console-applicatie in als het opstartproject. Dit wordt gedaan om ervoor te zorgen dat deze applicatie als eerste wordt gestart wanneer het volledige Visual Studio-project wordt uitgevoerd. Deze Console-applicatie roept op zijn beurt de webservice aan die automatisch door Visual Studio wordt gestart.

Om deze stap te voltooien, klikt u met de rechtermuisknop op het DemoApplication-project en kiest u de optie “Instellen als StartUp-project.”

Het voorbeeld van de webservice publiceren

Stap 5) De volgende stap is het toevoegen van de servicereferentie van onze “Guru99Webservice” aan onze consoleapplicatie. Dit wordt gedaan zodat de DemoApplication kan verwijzen naar de webservice en alle webmethoden in de webservice.

Om dit te doen, klikt u met de rechtermuisknop op het DemoApplication-projectbestand en kiest u de menuoptie Toevoegen -> Servicereferentie.

Het voorbeeld van de webservice publiceren

Stap 6) In deze stap geven we de verschillende waarden op die nodig zijn om onze servicereferentie toe te voegen

  1. Eerst moeten we onze ontdekkingsoptie kiezen. Met deze optie wordt automatisch het WSDL-bestand voor onze TutorialService-webservice opgehaald.
  2. Vervolgens moeten we een naam geven voor onze servicereferentie. In ons geval geven we het de naam Guru99Webservice.
  3. Dan moeten we de optie TutorialService.asmx uitbreiden, zodat we de methode 'GetTutorialService' aan de rechterkant kunnen zien. TutorialService.asmx is hier de naam van ons Visual Studio .Net-bestand dat de code voor onze webservice bevat.
  4. We zullen dan onze webmethode zien die we hadden in onze webservice, bekend als "GetTutorialService"

Het voorbeeld van de webservice publiceren

Wanneer we op de knop 'OK' klikken, wordt alle vereiste code voor toegang tot deze webservice toegevoegd aan onze DemoApplication Console-applicatie, zoals hieronder weergegeven.

De schermafbeelding laat zien dat de “Guru99Webservice” succesvol is toegevoegd aan onze consoleapplicatie.

Het voorbeeld van de webservice publiceren

Stap 7) De volgende stap is het toevoegen van de code aan onze consoleapplicatie om toegang te krijgen tot de webmethode in onze webservice. Open het Program.cs-codebestand dat automatisch bij de consoletoepassing wordt geleverd en voeg de onderstaande code toe

Het voorbeeld van de webservice publiceren

namespace DemoApplication
{
	class Program
	{
		static void Main(string[ ] args)
		{
			var client = new Guru99Webservice.Guru99WebserviceSoapClient();

			Console.WriteLine(client.GetTutorialService(l));
			
			Console.ReadKey();
		}
	}
}

Code-uitleg: -

  1. Het eerste deel is het kiezen van het Program.cs-bestand. Dit is het hoofdbestand dat door Visual Studio wordt gemaakt wanneer een consoletoepassing wordt gemaakt. Dit bestand wordt uitgevoerd wanneer de consoletoepassing (in ons geval de demotoepassing) wordt uitgevoerd.
  2. Vervolgens maken we een variabele met de naam 'client' die wordt ingesteld op een exemplaar van onze servicereferentie die in een eerdere stap is gemaakt. In ons geval is de servicereferentie 'Guru99Webservice.Guru99WebserviveSoapClient()'
  3. We noemen onze webmethode vervolgens 'GetTutorialService' in de TutorialService-webservice. Onthoud dat onze GetTutorialService'-methode een parameter met gehele getallen accepteert, dus we geven alleen een parameter met gehele getallen door aan de webmethode.
  4. Deze laatste regel is alleen bedoeld om ervoor te zorgen dat het consolelogscherm actief blijft, zodat we de uitvoer kunnen bekijken. Deze opdracht wacht gewoon op enige invoer van de gebruiker.

uitgang

Wanneer alle bovenstaande stappen zijn gevolgd en de DemoApplication is uitgevoerd, wordt de onderstaande uitvoer weergegeven.

Het voorbeeld van de webservice publiceren

Uit de uitvoer blijkt duidelijk dat de DemoApplication onze webservice aanroept en dat de door de webservice geretourneerde tekenreeks wordt weergegeven in ons consolelogboek.

Samenvatting

  • De volledige vorm van WSDL is Web Services Description Taal
  • Een WSDL-document is een document dat wordt gebruikt om een ​​webservice te beschrijven. Dit is essentieel voor elke clienttoepassing om te weten waar de webservice zich bevindt. Het stelt de clienttoepassing ook in staat de methoden te begrijpen die beschikbaar zijn in de webservice.
  • Met het WSDL-bestand kan de webservice heel eenvoudig in de ene programmeertaal worden geïmplementeerd en vanuit een andere programmeertaal worden aangeroepen.
  • Het WSDL-document bestaat normaal gesproken uit een bericht. Voor elke webmethode zijn er 2 berichten, één voor de invoer en de andere voor de uitvoer. Samen vormen ze een bewerking.
  • Web Services Description Language-bestanden (staat voor WSDL) worden normaal gesproken gemaakt in de editor die wordt gebruikt voor de overeenkomstige programmeertaal.
  • We hebben gezien hoe we een webservice in Visual Studio kunnen consumeren. Dit kan worden gedaan door een ander project te maken, namelijk een consoletoepassing. Door vervolgens een servicereferentie toe te voegen, kunnen we toegang krijgen tot de webmethoden in onze webservice.