Tutorial WSDL: linguagem de descrição de serviços da Web com exemplo

O que é WSDL?

Linguagem de descrição de serviços Web (WSDL) é um arquivo baseado em XML que basicamente informa ao aplicativo cliente o que o serviço web faz. O arquivo WSDL é usado para descrever resumidamente o que o serviço web faz e fornece ao cliente todas as informações necessárias para se conectar ao serviço web e usar todas as funcionalidades fornecidas pelo serviço web.

Neste tutorial vamos nos concentrar no último ponto que é a parte mais importante dos serviços web, que é o WSDL ou linguagem de descrição de serviços web.

O arquivo WSDL é usado para descrever resumidamente o que o serviço web faz e fornece ao cliente todas as informações necessárias para se conectar ao serviço web e usar todas as funcionalidades fornecidas pelo serviço web.

Estrutura de um documento WSDL

Um documento WSDL é usado para descrever um serviço web. Esta descrição é necessária para que os aplicativos clientes possam entender o que o serviço web realmente faz.

  • O arquivo WSDL contém a localização do serviço web e
  • Os métodos que são expostos pelo serviço web.

O próprio arquivo WSDL pode parecer muito comumplex para qualquer usuário, mas contém todas as informações necessárias que qualquer aplicativo cliente exigiria para usar o serviço web relevante.

Abaixo está a estrutura geral de um arquivo WSDL

  • Definição
  • TargetNamespace
  • Tipos de dados
  • Mensagens
  • Tipo de porta
  • Ligações
  • Serviço

Uma coisa importante a ser observada aqui é a definição de mensagens, que é o que é passado pelo Protocolo SOAP é realmente definido no documento WSDL.

Na verdade, o documento WSDL informa a um aplicativo cliente quais são os tipos de mensagens SOAP que são enviadas e aceitas pelo serviço da Web.

Em outras palavras, o WSDL é como um cartão postal que contém o endereço de um determinado local. O endereço fornece o details da pessoa que entregou o postal. Assim, da mesma forma, o arquivo WSDL é o cartão postal, que contém o endereço do web service que pode entregar todas as funcionalidades que o cliente deseja.

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

Abaixo está um diagrama da estrutura de um arquivo WSDL

Estrutura de um documento WSDL
Estrutura de um WSDL

Elementos WSDL

O arquivo WSDL contém o seguintewing partes principais

  1. A tag é usada para definir todos os complex tipos de dados, que serão utilizados na mensagem trocada entre a aplicação cliente e o web service. Este é um aspecto importante da aplicação cliente, pois se o serviço web funcionar com uma comunicaçãoplex tipo de dados, então o aplicativo cliente deve saber como processar o complex tipo de dados. Tipos de dados como float, números e strings são tipos de dados simples, mas pode haver tipos de dados estruturados que podem ser fornecidos pelo serviço da web.
    Por exemplo, pode haver um tipo de dados chamado EmployeeDataType que pode ter 2 elementos chamados “EmployeeName” do tipo string e “EmployeeID” do tipo número ou inteiro. Juntos, eles formam uma estrutura de dados que então se torna uma comunidadeplex tipo de dados.
  2. A tag é usada para definir a mensagem que é trocada entre a aplicação cliente e o servidor web. Estas mensagens explicarão as operações de entrada e saída que podem ser realizadas pelo serviço web. Um exemplo de mensagem pode ser uma mensagem que aceita o EmployeeID de um funcionário, e a mensagem de saída pode ser o nome do funcionário com base no EmpoyeeID fornecido.
  3. A tag é usada para encapsular cada mensagem de entrada e saída em uma operação lógica. Portanto, poderia haver uma operação chamada “GetEmployee” que combina a mensagem de entrada de aceitação do EmployeeID de um aplicativo cliente e, em seguida, envio do EmployeeName como mensagem de saída.
  4. A tag é usada para vincular a operação ao tipo de porta específico. Isto ocorre para que, quando o aplicativo cliente chamar o tipo de porta relevante, ele possa acessar as operações vinculadas a esse tipo de porta. Os tipos de porta são como interfaces. Portanto, se um aplicativo cliente precisar usar um serviço web, ele precisará usar as informações de ligação para garantir que possa se conectar à interface fornecida por esse serviço web.
  5. A tag é um nome dado ao próprio serviço da web. Inicialmente, quando um aplicativo cliente faz uma chamada para o serviço web, isso o fará chamando o nome do serviço web. Por exemplo, um serviço web pode estar localizado em um endereço como http://localhost/Guru99/Tutorial.asmx . A tag de serviço terá, na verdade, o URL definido como http://localhost/Guru99/Tutorial.asmx, que na verdade informará ao aplicativo cliente que há um serviço da Web disponível neste local.

Por que WSDL

Um serviço da web é um componente importante na construção de aplicativos da web modernos. Seu principal objetivo é permitir que vários aplicativos construídos em várias linguagens de programação se comuniquem entre si. Por exemplo, podemos ter uma aplicação web .Net conversando com um Java aplicação através de um serviço Web.

Um serviço web tem o seguintewing características principais

  • Ele é construído usando a linguagem de programação XML. Quase todas as tecnologias modernas, como .Net e Java, possuem comandos correspondentes que têm a capacidade de trabalhar com XML. Assim, o XML foi considerado a linguagem mais apropriada para a construção de serviços web.
  • Os serviços da Web se comunicam por HTTP. HTTP é um protocolo usado por todos os aplicativos baseados na web. Portanto, fazia sentido garantir que os serviços Web também tivessem a capacidade de funcionar através do protocolo HTTP.
  • Os serviços da Web estão em conformidade com uma especificação de linguagem específica. Esta especificação é definida pelo W3C, que é o órgão regulador de todos os padrões da web.
  • Os serviços da Web possuem uma linguagem de descrição conhecida como WSDL, que é usada para descrever o serviço da Web.

O arquivo WSDL é escrito em XML antigo e simples. A razão de estar em XML é para que o arquivo possa ser lido por qualquer linguagem de programação.

Portanto, se o aplicativo cliente fosse escrito em .Net, ele entenderia o arquivo XML. Da mesma forma, se o aplicativo cliente fosse escrito na linguagem de programação Java, também seria capaz de interpretar o arquivo WSDL.

Precisa de WSDL

O arquivo WSDL é o que une tudo. No diagrama acima, você pode ver que pode criar um serviço web na linguagem .Net.

Então é aqui que o serviço é implementado. Se você não tivesse o arquivo WSDL e quisesse que uma classe Java consumisse o serviço da web, seria necessário muito esforço de codificação para conseguir isso.

Mas agora com o arquivo WSDL que está em XML, que pode ser entendido por qualquer linguagem de programação, você pode facilmente fazer com que uma classe Java consuma o serviço web .Net. Conseqüentemente, a quantidade de esforço de codificação é bastante reduzida.

Parte da mensagem WSDL

O WSDL consiste em uma seção chamada “mensagens” que é denotada pelo elemento.

Este elemento é basicamente usado para descrever os dados que são trocados entre o serviço web e a aplicação cliente.

Cada serviço web sempre terá 2 tipos de mensagens,

  • Um é para a entrada do serviço web e o outro é para a saída do serviço web.
  • A entrada é usada para descrever os parâmetros que são aceitos pelo serviço web. Este é um aspecto importante da aplicação cliente para que ela conheça os valores a serem enviados como parâmetros ao web service.
  • O outro tipo de mensagem é a mensagem de saída que informa quais resultados são fornecidos pelo serviço web.

Cada mensagem, por sua vez, terá um elemento que é usado para descrever o parâmetro usado pela mensagem de entrada e saída.

Abaixo está um exemplo simples da aparência de uma mensagem para um serviço da web. A funcionalidade do serviço web é fornecer o nome de um “Tutorial” assim que um “ID do tutorial” for enviado como parâmetro ao serviço web.

Parte da mensagem WSDL

  1. Como podemos ver o serviço web possui 2 mensagens, uma para entrada e outra para saída.
  2. A mensagem de entrada é conhecida como TutorialNameRequest que possui um parâmetro chamado TutorialID. Este parâmetro é do tipo number que é especificado pelo tipo xsd:number
  3. A mensagem de saída é conhecida como TutorialNameResponse que possui um parâmetro chamado TutorialName. Este parâmetro é do tipo string especificado pelo tipo xsd:string

Associação de tipo de porta

As portas são usadas no WSDL para definir uma operação completa que é oferecida pelo serviço web.

No tópico anterior, vimos que nosso serviço web disponibilizava 2 mensagens, uma para a entrada chamada “TutorialNameRequest” e outra para a saída chamada “TutorialNameResponse”. Juntos, o formulário da mensagem de entrada e saída é conhecido como uma operação completa.

WSDL fornece um elemento chamado que é usado para definir as operações fornecidas pelo serviço da Web.

Associação de tipo de porta

Portanto, em nosso exemplo acima, podemos observar o seguintewing:

  1. O nome do tipo de porta que encapsula a operação é fornecido como “Tutorial_PortType”.
  2. A operação em si recebe o nome de “Tutorial”. Portanto, nossa operação basicamente fornece um TutorialName se o TutorialID for fornecido como parâmetro de entrada.
  3. A seguir estão nossas 2 mensagens, uma para a entrada e outra para a saída que forma nossa operação

Além do elemento, há também o elemento que é utilizado para definir como as mensagens serão transferidas.

Associação de tipo de porta

  1. O exemplo acima mostra que a ligação consiste em um nome de ligação que no nosso caso é dado como “TutorialSoapBinding”. Vinculação em termos simples é a informação que o aplicativo cliente usa para realmente se vincular ao serviço da web. Uma vez vinculado ao serviço web, ele terá a capacidade de chamar as diversas operações expostas pelo serviço web.
  2. A camada de transporte é fornecida como http://, o que significa que as mensagens serão transferidas através do protocolo HTTP.

Criando arquivo WSDL

O arquivo WSDL é criado sempre que um serviço web é criado em qualquer linguagem de programação.

Como o arquivo WSDL é bastante complicado de ser gerado do zero, todos os editores como Visual Studio para .Net e Eclipse para Java cria automaticamente o arquivo WSDL.

Abaixo está um exemplo de um arquivo WSDL criado em 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>

O arquivo WSDL acima parece muito intimidante para qualquer usuário, abordaremos as diferentes partes em detalhes nos tutoriais subsequentes, mas por enquanto, vamos dar uma olhada resumida no que cada seção do arquivo WSDL realmente faz

Publicando o exemplo de serviço da Web

Agora vamos ver um exemplo de como podemos publicar um serviço web e consumi-lo usando Visual Studio.

Neste exemplo, criaremos um serviço web com um WebMethod. Este método aceitará um parâmetro inteiro chamado “TutorialID”. O método Web retornará então uma string chamada “Web Services”.

Em seguida, criaremos um aplicativo baseado em console, que consumirá esse serviço web e chamará nosso método web de acordo.

Vejamos as etapas necessárias para executar este exemplo.

Passo 1) O primeiro passo é criar seu serviço web. As etapas detalhadas de como o Asp.Net projeto web e um serviço web é criado foi explicado Aqui; Siga as mesmas etapas para criar o projeto e o serviço da web de acordo. A parte principal é inserir o código abaixo no arquivo de serviços da Web.

Publicando o exemplo de serviço da Web

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

Explicação do código:

  1. Aqui estamos criando um WebMethod chamado “Guru99WebService”. Neste método web, incluímos um parâmetro inteiro que precisa ser passado sempre que este método web for chamado.
  2. A seguir, estamos definindo uma variável chamada “TutorialName” que conterá o valor da string de “Web Services”. Este é o valor que será retornado quando o web service for chamado.

Passo 2) Depois de definir o arquivo de serviços web, o próximo passo é criar um projeto cliente que consumirá este serviço web.

Vamos criar um aplicativo de console simples que chamará esse serviço web, invocará o “Guru99WebService” e então exibirá a saída do método web na tela de log do console. Siga as etapas abaixo para criar um aplicativo de console.

Clique com o botão direito do mouse no Visual Studio arquivo de solução e escolha a opção Adicionar->Novo projeto

Publicando o exemplo de serviço da Web

Passo 3) Nesta etapa,

  1. Certifique-se de escolher primeiro o Visual C# Windows opção. Em seguida, escolha a opção de criar um aplicativo de console.
  2. Dê um nome ao seu projeto que no nosso caso foi dado como “DemoApplication”.

Publicando o exemplo de serviço da Web

Depois de clicar no botão OK na tela acima, você poderá ver o projeto no Solution Explorer em Visual Studio.

Publicando o exemplo de serviço da Web

Passo 4) Nesta etapa, você definirá o aplicativo DemoApplication Console como o projeto de inicialização. Isso é feito para garantir que este aplicativo seja iniciado primeiro quando todo o Visual Studio projeto é executado. Este aplicativo Console irá, por sua vez, chamar o serviço web que será iniciado automaticamente pelo Visual Studio.

Para concluir esta etapa, clique com o botão direito no projeto DemoApplication e escolha a opção “Definir como projeto de inicialização”.

Publicando o exemplo de serviço da Web

Passo 5) A próxima etapa é adicionar a referência de serviço do nosso “Guru99Webservice” ao nosso aplicativo de console. Isso é feito para que DemoApplication possa fazer referência ao serviço web e a todos os métodos web no serviço web.

Para fazer isso, clique com o botão direito no arquivo do projeto DemoApplication e escolha a opção de menu Adicionar->Referência de Serviço.

Publicando o exemplo de serviço da Web

Passo 6) Nesta etapa, forneceremos os diferentes valores necessários para adicionar nossa referência de serviço

  1. Em primeiro lugar, precisamos escolher nossa opção de descoberta. Esta opção selecionará automaticamente o arquivo WSDL para nosso serviço web TutorialService.
  2. A seguir, devemos dar um nome para nossa referência de serviço. No nosso caso, estamos dando a ele o nome de Guru99Webservice.
  3. Em seguida, precisamos expandir a opção TutorialService.asmx para que possamos ver o método 'GetTutorialService' no lado direito. Aqui TutorialService.asmx é o nome do nosso Visual Studio Arquivo .Net que contém o código do nosso serviço web.
  4. Veremos então nosso método Web que tínhamos em nosso serviço web conhecido como “GetTutorialService”

Publicando o exemplo de serviço da Web

Ao clicar no botão 'OK', todo o código necessário para acessar este serviço web será adicionado ao nosso aplicativo DemoApplication Console conforme mostrado abaixo.

A captura de tela mostra que o “Guru99Webservice” foi adicionado com sucesso ao nosso aplicativo de console.

Publicando o exemplo de serviço da Web

Passo 7) A próxima etapa é adicionar o código ao nosso aplicativo de console para acessar o método web em nosso serviço web. Abra o arquivo de código Program.cs que vem automaticamente com o aplicativo de console e adicione o código abaixo

Publicando o exemplo de serviço da Web

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

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

Explicação do código: -

  1. A primeira parte é escolher o arquivo Program.cs. Este é o arquivo principal criado por Visual Studio quando um aplicativo de console é criado. Este arquivo é executado quando o aplicativo de console (em nosso caso, aplicativo de demonstração) é executado.
  2. Em seguida, criamos uma variável chamada “cliente” que será definida como uma instância de nossa referência de serviço que foi criada em uma etapa anterior. No nosso caso, a referência do serviço é 'Guru99Webservice.Guru99WebserviveSoapClient()'
  3. Estamos então chamando nosso método Web 'GetTutorialService' no serviço web TutorialService. Lembre-se de que nosso método GetTutorialService' aceita um parâmetro inteiro, então estamos apenas passando um parâmetro inteiro para o método web.
  4. Esta linha final serve apenas para garantir que a tela de log do console permaneça ativa para que possamos visualizar a saída. Este comando irá apenas esperar por alguma entrada do usuário.

saída

Quando todas as etapas acima forem seguidas e o DemoApplication for executado, a saída abaixo será exibida.

Publicando o exemplo de serviço da Web

Na saída, podemos ver claramente que DemoApplication chama nosso serviço Web e que a string retornada pelo serviço Web é exibida em nosso log do Console.

Resumo

  • A forma completa de WSDL é Web Services Description Language
  • Um documento WSDL é um documento usado para descrever um serviço da web. Isso é fundamental para qualquer aplicativo cliente saber onde o serviço da web está localizado. Também permite que o aplicativo cliente entenda os métodos disponíveis no serviço web.
  • O arquivo WSDL facilita muito a implementação do serviço web em uma linguagem de programação e a chamada de uma linguagem de programação diferente.
  • O documento WSDL normalmente consiste em uma mensagem. Para cada método web, existem 2 mensagens, uma é para entrada e a outra é para saída. Juntos eles formam uma operação.
  • Os arquivos de linguagem de descrição de serviços da Web (significa WSDL) normalmente são criados no editor usado para a linguagem de programação correspondente.
  • Vimos como podemos consumir um serviço web em Visual Studio. Isso pode ser feito criando outro projeto que seja um aplicativo de console. Então, ao adicionar uma referência de serviço, poderemos acessar os métodos da web em nosso serviço da web.