Handledning för WSDL: webbtjänster Description Språk med Exempel

Vad är WSDL?

Web Services Descriptjonspråk (WSDL) är en XML-baserad fil som i princip talar om för klientapplikationen vad webbtjänsten gör. WSDL-filen används för att i ett nötskal beskriva vad webbtjänsten gör och ger kunden all information som krävs för att ansluta till webbtjänsten och använda all funktionalitet som tillhandahålls av webbtjänsten.

I den här handledningen kommer vi att fokusera på den sista punkten som är den viktigaste delen av webbtjänster, och det är WSDL eller webbtjänstens beskrivningsspråk.

WSDL-filen används för att i ett nötskal beskriva vad webbtjänsten gör och ger kunden all information som krävs för att ansluta till webbtjänsten och använda all funktionalitet som tillhandahålls av webbtjänsten.

Strukturen för ett WSDL-dokument

Ett WSDL-dokument används för att beskriva en webbtjänst. Denna beskrivning krävs för att klientapplikationer ska kunna förstå vad webbtjänsten faktiskt gör.

  • WSDL-filen innehåller platsen för webbtjänsten och
  • De metoder som exponeras av webbtjänsten.

WSDL-filen i sig kan se väldigt komplex ut för alla användare, men den innehåller all nödvändig information som en klientapplikation skulle behöva för att använda den relevanta webbtjänsten.

Nedan är den allmänna strukturen för en WSDL-fil

  • Definition
  • Targetnamespace
  • Datatyper
  • Notiser
  • Porttyp
  • Bindningar
  • service

En viktig sak att notera här är definitionen av meddelanden, vilket är vad som passeras av SOAP-protokoll är faktiskt definierad i WSDL-dokumentet.

WSDL-dokumentet berättar faktiskt för en klientapplikation vilka typer av SOAP-meddelanden som skickas och accepteras av webbtjänsten.

Med andra ord är WSDL precis som ett vykort som har adressen till en viss plats. Adressen innehåller uppgifter om den person som levererade vykortet. Därför är WSDL-filen på samma sätt vykortet, som har adressen till webbtjänsten som kan leverera all funktionalitet som kunden vill ha.

<!-- 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>

Nedan är ett diagram över strukturen för en WSDL-fil

Strukturen för ett WSDL-dokument
Strukturen för en WSDL

WSDL-element

WSDL-filen innehåller följande huvuddelar

  1. Smakämnen taggen används för att definiera alla komplexa datatyper som kommer att användas i meddelandet som utbyts mellan klientapplikationen och webbtjänsten. Detta är en viktig aspekt av klientapplikationen, för om webbtjänsten fungerar med en komplex datatyp, bör klientapplikationen veta hur den komplexa datatypen ska behandlas. Datatyper som flytande, siffror och strängar är alla enkla datatyper, men det kan finnas strukturerade datatyper som kan tillhandahållas av webbtjänsten.
    Till exempel kan det finnas en datatyp som heter EmployeeDataType som kan ha två element som kallas "EmployeeName" av typsträngen och "EmployeeID" av typnummer eller heltal. Tillsammans bildar de en datastruktur som sedan blir en komplex datatyp.
  2. Smakämnen taggen används för att definiera meddelandet som utbyts mellan klientapplikationen och webbservern. Dessa meddelanden kommer att förklara inmatnings- och utmatningsoperationerna som kan utföras av webbtjänsten. Ett exempel på ett meddelande kan vara ett meddelande som accepterar en anställds EmployeeID, och outputmeddelandet kan vara namnet på den anställde baserat på det angivna EmployeeID.
  3. Smakämnen taggen används för att kapsla in varje in- och utmeddelande i en logisk operation. Så det kan finnas en operation som heter "GetEmployee" som kombinerar ingångsmeddelandet att acceptera EmployeeID från en klientapplikation och sedan skicka EmployeeName som utdatameddelande.
  4. Smakämnen taggen används för att binda operationen till den specifika porttypen. Detta för att när klientapplikationen anropar den relevanta porttypen kommer den att kunna komma åt de operationer som är bundna till denna porttyp. Porttyper är precis som gränssnitt. Så om en klientapplikation behöver använda en webbtjänst måste de använda den bindande informationen för att säkerställa att de kan ansluta till gränssnittet som tillhandahålls av den webbtjänsten.
  5. Smakämnen taggen är ett namn som ges till själva webbtjänsten. Inledningsvis, när en klientapplikation ringer till webbtjänsten, kommer den att göra det genom att anropa namnet på webbtjänsten. Till exempel kan en webbtjänst finnas på en adress som t.ex http://localhost/Guru99/Tutorial.asmx . Servicetaggen kommer faktiskt att ha URL-adressen definierad som http://localhost/Guru99/Tutorial.asmx, som faktiskt talar om för klientapplikationen att det finns en webbtjänst tillgänglig på den här platsen.

Varför WSDL

En webbtjänst är en viktig komponent i att bygga moderna webbapplikationer. Deras huvudsakliga syfte är att tillåta flera applikationer byggda på olika programmeringsspråk att prata med varandra. Till exempel kan vi låta en .Net webbapplikation prata med en Java applikation via en webbtjänst.

En webbtjänst har följande nyckelfunktioner

  • Det är byggt med hjälp av programmeringsspråket XML. Nästan alla moderna teknologier som .Net och Java har motsvarande kommandon som har förmågan att arbeta med XML. Därför togs XML som det lämpligaste språket för att bygga webbtjänster.
  • Webbtjänster kommunicerar över HTTP. HTTP är ett protokoll som används av alla webbaserade applikationer. Därför var det bara vettigt att se till att webbtjänster också hade förmågan att fungera över HTTP-protokollet.
  • Webbtjänster överensstämmer med en viss språkspecifikation. Denna specifikation fastställs av W3C, som är det styrande organet för alla webbstandarder.
  • Webbtjänster har ett beskrivningsspråk som kallas WSDL, som används för att beskriva webbtjänsten.

WSDL-filen är skriven i vanlig gammal XML. Anledningen till att den är i XML är för att filen ska kunna läsas av vilket programmeringsspråk som helst.

Så om klientapplikationen skrevs i .Net skulle den förstå XML-filen. På samma sätt, om klientapplikationen skrevs i Java programmeringsspråk då skulle det också kunna tolka WSDL-filen.

Behöver WSDL

WSDL-filen är det som binder ihop allt. Från diagrammet ovan kan du se att du kan skapa en webbtjänst på .Net-språket.

Så det är här tjänsten implementeras. Om du inte hade WSDL-filen och ville ha en Java klass för att konsumera webbtjänsten, skulle du behöva mycket kodning för att uppnå detta.

Men nu med WSDL-filen som är i XML, som kan förstås av alla programmeringsspråk, kan du nu enkelt ha en Java klass konsumerar webbtjänsten .Net. Därför minskar mängden kodningsansträngning avsevärt.

WSDL-meddelandedel

WSDL består av en sektion som kallas "meddelanden" som betecknas med elementet.

Detta element används i grunden för att beskriva data som utbyts mellan webbtjänsten och klientapplikationen.

Varje webbtjänst kommer alltid att ha 2 typer av meddelanden,

  • Den ena är för inmatningen av webbtjänsten, och den andra är för utmatningen av webbtjänsten.
  • Ingången används för att beskriva de parametrar som accepteras av webbtjänsten. Detta är en viktig aspekt av klientapplikationen så att den känner till de värden som ska skickas som parametrar till webbtjänsten.
  • Den andra typen av meddelande är det utgående meddelandet som berättar vilka resultat som tillhandahålls av webbtjänsten.

Varje meddelande kommer i sin tur att ha en element som används för att beskriva parametern som används av in- och utmeddelandet.

Nedan är ett enkelt exempel på hur ett meddelande för en webbtjänst ser ut. Funktionen för webbtjänsten är att ge namnet på en "Tutorial" när ett "Tutorial ID" har skickats in som en parameter till webbtjänsten.

WSDL-meddelandedel

  1. Som vi kan se har webbtjänsten 2 meddelanden, ett för input och ett för output.
  2. Inmatningsmeddelandet är känt som TutorialNameRequest som har en parameter som heter TutorialID. Denna parameter är av typnumret som anges av typen xsd:number
  3. Utdatameddelandet är känt som TutorialNameResponse som har en parameter som heter TutorialName. Denna parameter är av typen sträng som anges av typen xsd:string

Bindning av porttyp

Portar används i WSDL för att definiera en komplett operation som erbjuds av webbtjänsten.

I det föregående ämnet såg vi att vår webbtjänst gav 2 meddelanden, ett för inmatningen som heter "TutorialNameRequest" och det andra för outputet som heter "TutorialNameResponse." Tillsammans kallas inmatnings- och utmatningsmeddelandet som en komplett operation.

WSDL tillhandahåller ett element som kallas som används för att definiera de funktioner som tillhandahålls av webbtjänsten.

Bindning av porttyp

Så i vårt exempel ovan kan vi notera följande:

  1. Namnet på porttypen som kapslar in operationen ges som "Tutorial_PortType."
  2. Själva operationen får namnet "Tutorial". Så vår operation ger i princip ett TutorialName om TutorialID ges som en indataparameter.
  3. Nästa är våra 2 meddelanden, ett för input och det andra för output som utgör vår verksamhet

Utöver element, det finns också element som används för att definiera hur meddelandena ska överföras.

Bindning av porttyp

  1. Ovanstående exempel visar att bindningen består av ett bindande namn som i vårt fall anges som "TutorialSoapBinding". Bindande förenklat är den information som klientapplikationen använder för att faktiskt binda sig till webbtjänsten. När den väl faktiskt är bunden till webbtjänsten har den sedan möjlighet att anropa de olika operationerna som exponeras av webbtjänsten.
  2. Transportlagret ges som http:// vilket betyder att meddelandena som kommer att överföras över HTTP-protokollet.

Skapar WSDL-fil

WSDL-filen skapas när en webbtjänst byggs i vilket programmeringsspråk som helst.

Eftersom WSDL-filen är ganska komplicerad att genereras från grunden, är alla redigerare som Visual Studio för .Net och Eclipse för Java skapa WSDL-filen automatiskt.

Nedan är ett exempel på en WSDL-fil skapad 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>

Ovanstående WSDL-fil ser väldigt skrämmande ut för alla användare, vi kommer att täcka de olika delarna i detalj i de efterföljande handledningarna, men för nu ska vi ta en sammanfattning av vad varje sektion av WSDL-filen faktiskt gör

Publicera webbtjänstexemplet

Låt oss nu titta på ett exempel på hur vi kan publicera en webbtjänst och konsumera den genom att använda Visual Studio.

I det här exemplet kommer vi att skapa en webbtjänst med en WebMethod. Den här metoden accepterar en heltalsparameter som heter "TutorialID." Webbmetoden returnerar sedan en sträng som heter "Web Services".

Vi kommer sedan att skapa en konsolbaserad applikation, som kommer att använda denna webbtjänst och anropa vår webbmetod i enlighet med detta.

Låt oss titta på de steg som krävs för att utföra detta exempel.

Steg 1) Det första steget är att skapa din webbtjänst. De detaljerade stegen för hur Asp.Net webbprojekt och en webbtjänst skapas har förklarats här; Följ samma steg för att skapa projektet och webbtjänsten i enlighet med detta. Den viktigaste delen är att ange koden nedan i webbtjänstfilen.

Publicera webbtjänstexemplet

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

Kodförklaring:

  1. Här skapar vi en webbmetod som heter "Guru99WebService." I den här webbmetoden inkluderar vi en heltalsparameter som måste skickas när den här webbmetoden anropas.
  2. Därefter definierar vi en variabel som heter "TutorialName" som kommer att hålla strängvärdet för "Web Services." Detta är värdet som kommer att returneras när webbtjänsten anropas.

Steg 2) När vi väl har definierat webbtjänstfilen är nästa steg att skapa ett kundprojekt som kommer att konsumera denna webbtjänst.

Låt oss skapa en enkel konsolapplikation som kommer att anropa denna webbtjänst, anropa "Guru99WebService" och sedan visa utdata från webbmetoden på konsolens loggskärm. Följ stegen nedan för att skapa en konsolapplikation.

Högerklicka på Visual Studio-lösningsfilen och välj alternativet Lägg till->Nytt projekt

Publicera webbtjänstexemplet

Steg 3) I detta steg

  1. Se till att först välja Visual C# Windows alternativ. Välj sedan alternativet att skapa en konsolapplikation.
  2. Ge ditt projekt ett namn som i vårt fall har getts som "DemoApplication."

Publicera webbtjänstexemplet

När du har klickat på OK-knappen på ovanstående skärm kommer du att kunna se projektet i lösningsutforskaren i Visual Studio.

Publicera webbtjänstexemplet

Steg 4) I det här steget ställer du in DemoApplication Console-applikationen som startprojekt. Detta görs för att säkerställa att denna applikation startar först när hela Visual Studio-projektet körs. Denna konsolapplikation kommer i sin tur att anropa webbtjänsten som automatiskt startas av Visual Studio.

För att slutföra det här steget, högerklicka på DemoApplication-projektet och välj alternativet "Set as StartUp Project."

Publicera webbtjänstexemplet

Steg 5) Nästa steg är att lägga till servicereferensen för vår "Guru99Webservice" till vår konsolapplikation. Detta görs för att DemoApplicationen ska kunna referera till webbtjänsten och alla webbmetoder i webbtjänsten.

För att göra detta, högerklicka på DemoApplication-projektfilen och välj menyalternativet Lägg till->Servicereferens.

Publicera webbtjänstexemplet

Steg 6) I detta steg kommer vi att tillhandahålla de olika värden som krävs för att lägga till vår servicereferens

  1. Först måste vi välja vårt upptäcktsalternativ. Det här alternativet hämtar automatiskt WSDL-filen för vår TutorialService-webbtjänst.
  2. Därefter bör vi ge ett namn för vår servicereferens. I vårt fall ger vi det namnet Guru99Webservice.
  3. Sedan måste vi utöka alternativet TutorialService.asmx så att vi kan se "GetTutorialService"-metoden på höger sida. Här är TutorialService.asmx namnet på vår Visual Studio .Net-fil som innehåller koden för vår webbtjänst.
  4. Vi kommer då att se vår webbmetod som vi hade i vår webbtjänst känd som "GetTutorialService"

Publicera webbtjänstexemplet

När vi klickar på "OK"-knappen kommer all kod som krävs för att komma åt denna webbtjänst att läggas till vår DemoApplication Console-applikation enligt nedan.

Skärmdumpen visar att "Guru99Webservice" har lagts till i vår konsolapplikation.

Publicera webbtjänstexemplet

Steg 7) Nästa steg är att lägga till koden i vår konsolapplikation för att komma åt webbmetoden i vår webbtjänst. Öppna Program.cs-kodfilen som kommer automatiskt med konsolapplikationen och lägg till koden nedan

Publicera webbtjänstexemplet

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

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

Kodförklaring:-

  1. Den första delen är att välja filen Program.cs. Detta är huvudfilen som skapas av Visual Studio när en konsolapplikation skapas. Den här filen är vad som exekveras när konsolapplikationen (i vårt fall demoapplikationen) körs.
  2. Vi skapar sedan en variabel som heter "klient" som kommer att ställas in på en instans av vår tjänstreferens som skapades i ett tidigare steg. I vårt fall är tjänstreferensen 'Guru99Webservice.Guru99WebserviveSoapClient()'
  3. Vi kallar sedan vår webbmetod för 'GetTutorialService' i webbtjänsten TutorialService Kom ihåg att vår GetTutorialService-metod accepterar en heltalsparameter, så vi skickar bara en heltalsparameter till webbmetoden.
  4. Den här sista raden är bara för att säkerställa att konsolens loggskärm förblir aktiv så att vi kan se resultatet. Detta kommando väntar bara på lite input från användaren.

Produktion

När alla ovanstående steg har följts och DemoApplication körs kommer nedanstående utdata att visas.

Publicera webbtjänstexemplet

Från utgången kan vi tydligt se att DemoApplication anropar vår webbtjänst och att strängen som returneras av webbtjänsten visas i vår konsollogg.

Sammanfattning

  • Fullständig form av WSDL är webbtjänster Descriptjonspråk
  • Ett WSDL-dokument är ett dokument som används för att beskriva en webbtjänst. Detta är nyckeln för alla klientapplikationer att veta var webbtjänsten finns. Det tillåter också klientapplikationen att förstå metoderna som finns tillgängliga i webbtjänsten.
  • WSDL-filen gör det mycket enkelt för webbtjänsten att implementeras i ett programmeringsspråk och anropas från ett annat programmeringsspråk.
  • WSDL-dokumentet består normalt av ett meddelande. För varje webbmetod finns det 2 meddelanden, ett är för ingången och det andra är för utdata. Tillsammans bildar de en operation.
  • Web Services Description Language (står för WSDL)-filer skapas normalt i editorn som används för motsvarande programmeringsspråk.
  • Vi har sett hur vi kan konsumera en webbtjänst i Visual Studio. Detta kan göras genom att skapa ett annat projekt som är en konsolapplikation. Genom att sedan lägga till en tjänstreferens kan vi sedan komma åt webbmetoderna i vår webbtjänst.