Você está na página 1de 5

10/10/13

WSDL O que ? Pra que serve? Onde utilizo? | Fabricio Sanchez

WSDL O que ? Pra que serve? Onde utilizo?


Enviado por Fabrcio Sanchez em set 8, 2011 em Desenvolvimento, SOAP, WebService | 4 comentrios
Home Desenvolvimento WSDL O que ? Pra que serve? Onde utilizo?

Recentemente tenho dedicado boa parte do pouco tempo que me sobra a conhecer (entenda-se, estudar) de forma mais estreita os modelos arquiteturais de comunicao remota entre aplicaes. Como resultado destes estudos, tenho produzido alguns posts que so nada mais nada menos que o reflexo dos conceitos que tenho aprendido e colocado em prtica em algumas aplicaes de meu dia-a-dia. O penltimo post tcnico que escrevi neste site, tratou justamente de levantar os conceitos fundamentais relacionados ao modelo de comunicao REST. Voc pode efetuar a leitura deste post clicando aqui. Na sequncia, escrevi um novo post apresentando o modelo em funcionamento com Razor e WebMatrix (este voc pode ler aqui). No post de hoje, quero falar um pouco sobre o modelo WSDL (Web Services Description Language), um padro definido pela W3C para especificar as atividades a serem realizadas pelo servio chamado via RPC. RPC Remote Procedure Calls RPC (em portugus, chamada de procedimentos remotos) um modelo que define a forma como so realizadas as chamadas a operaes remotas atravs de web services. O modelo descreve o funcionamento de chamadas remotas, de forma semelhante a chamada de procedimentos locais. Assim, a diferena fundamental de um modelo em relao ao outro consiste no fato de que, no modelo descrito pelo RPC, temos a presena marcante de duas figuras trabalhando ativamente: o cliente e o servidor. Basicamente, no modelo RPC tem-se uma thread responsvel por gerir o processo de requisio e resposta, que funciona da seguinte forma: 1. O processo invocador (A) faz uma requisio ao processo servidor (B). Enquanto esta resposta no devolvida com todos os parmetros, o processo A aguarda bloqueado (ou seja, nenhuma outra operao pode ser realizada por A). A mensagem enviada por A, possui toda parametrizao necessria para a execuo da mesma e posterior resposta por parte de B. 2. O processo B recebe a solicitao, extrai os dados, processa a mesma e produz os resultados e devolve a resposta para A. Vale notar que, assim que a resposta foi despachada, B volta a esperar por uma nova requisio. Neste modelo de comunicao, apenas um processo permanece ativo em determinado instante de tempo. Variaes do modelo RPC, permitem a comunicao assncrona, mas este um assunto para outro post. A Figura 1 apresenta o modelo de comunicao RPC.

Figura 1: O modelo RPC de comunicao inter-processos WSDL O que ? WSDL um documento proposto pela W3C a partir de Junho de 2007 escrito em XML que visa padronizar as

fabriciosanchez.com.br/2/wsdl-o-que-e-pra-que-serve-onde-utilizo/

1/5

10/10/13
linguagem. Possui basicamente duas finalidades:

WSDL O que ? Pra que serve? Onde utilizo? | Fabricio Sanchez

descries das funcionalidades ofereridas por web services de forma independente de plataforma ou

1. Expor os mtodos que determinado servio disponibilizar 2. Possibilitar a localizao de determinado servio Como mencionado anteriormente, WSDL escrito em XML, portanto, para que se possa elabor-lo, preciso acumular alguns conhecimentos, tais como: XML Namespaces, XML Schemas, etc. Outro conceito importante relacionado a WSDL o fato de que ele trabalha em parceria com outras duas tecnologias, sendo elas: UDDI e SOAP. Em posts futuros, trataremos destes dois assuntos com maiores detalhes. Por hora, basta mencionar que enquanto WSDL apresenta os recursos disponveis, UDDI permite a publicao do servio e SOAP possibilita o trfego das informaes. WSDL Elementos bsicos Como mencionado anteriormente, WSDL um documento XML simples que descreve atravs de elementos especficos, a estrutura dos servios web . Assim, sua estrutura extremamente simplificada. A seguir apresentamos os principais elementos descritivos de um documento WSDL. <types>: aqui devero ser descritos os tipos de dados suportados pelo servio em questo <message>: aqui devem ser especificados os padres de entrada e sada de dados dos web services <portType>: aqui devem ser descritos os agrupamentos lgicos das operaes. So as operaes executadas pelo web service <binding>: aqui devem ser apresentados os protocolos de comunicao que os web services utilizam <operation>: regio que permite a especificao das assinaturas dos mtodos disponibilizados <definitions>: elemento padro de todos os documentos WSDL. Permite efetuar descries sobre schemas enamespaces Mais adiante neste post, analisaremos um arquivo WSDL pronto para que possamos entender em nvel prtico como se d a construo do mesmo. WSDL Namespaces Se voc trabalha com C#, por exemplo, j est acostumado com o conceito de namespaces. Para arquivos WSDL, a ideia rigorosamente a mesma, isto , os conceitos de reaproveitamento e organizao de cdigos so implementados tambm. A seguir, apresentamos os principais namespaces j disponveis para WSDL. http://schemas.xmlsoap.org/wsdl: namespace de WSDL http://schemas.xmlsoap.org/wsdl/soap: namespace que permite a utilizao de WSDL com SOAP http://schemas.xmlsoap.org/wsdl/http: namespace que permite HTTP, GET e POST http://schemas.xmlsoap.org/wsdl/mime: namespace que permite a vinculao de MIME aos WSDLs http://schemas.xmlsoap.org/soap/encoding: namespace que permite a codificao segundo padro SOAP http://schemas.xmlsoap.org/soap/envelope: namespace que permite a codificao segundo padro SOAP 1.1 http://www.w3.org/2001/XMLSchema-instance: namespace de instncia definido pelo padro XML http://www.w3.org/2001/XMLShema: namespace de schemas definido conforme regras do XML Sobre o exemplo deste post Agora que j fomos apresentados aos conceitos fundamentais sobre WSDL, podemos estruturar um arquivo para que possamos aplicar os conceitos de forma satisfatria. Basicamente existem duas formas para escrever arquivos WSDL, sendo que, a forma escolhida impacta tambm na forma como a associao com o servio realizada. As formas as quais nos referimos so: manual (onde o arquivo WSDL estruturado manualmente pelo desenvolvedor) e automtica (gerado pela ferramenta onde o o servio criado). Se voc optar por criar um servio utilizando Visual Studio 2010 e WCF, por exemplo, o arquivo WSDL vai sendo gerado a medida que o servio estruturado. O que faremos criar um servio de disponibiliza um mtodo que reajusta o salrio informado de acordo com uma faixa salarial fictcia. Criando o web service Para criar o servio, utilizarei o Mono Develop, entretanto, voc pode utilizar o Visual Studio ou outra ferramenta qualquer de desenvolvimento que ser possvel obter o mesmo resultado. A Listagem 1 apresenta o cdigo doweb service. 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 < % @W e b S e r v i c eL a n g u a g e = " C # "C l a s s = " W e b S e r v i c e R e a j u s t e D e S a l a r i o . W S R e a j u s t e S a l a r i o ? " u s i n gS y s t e m ; u s i n gS y s t e m . W e b . S e r v i c e s ; n a m e s p a c eW e b S e r v i c e R e a j u s t e D e S a l a r i o { p u b l i cc l a s sW S R e a j u s t e S a l a r i o:S y s t e m . W e b . S e r v i c e s . W e b S e r v i c e { [ W e b M e t h o d ] p u b l i cs t r i n gC a l c u l a R e a j u s t e S a l a r i o ( s t r i n gp S a l a r i o ) { s t r i n gS a l a r i o F o r m a t a d o=p S a l a r i o . R e p l a c e ( " , " , " . " ) ; i f ( S a l a r i o F o r m a t a d o= =" "| |S a l a r i o F o r m a t a d o= =s t r i n g . E m p t y| |S a l a r i o F o r m a t a d o= = {

fabriciosanchez.com.br/2/wsdl-o-que-e-pra-que-serve-onde-utilizo/

2/5

10/10/13
1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1

WSDL O que ? Pra que serve? Onde utilizo? | Fabricio Sanchez


r e t u r n" E r r oa ot e n t a rc a l c u l a ror e a j u s t e ! " ; } e l s e { d o u b l ed S a l a r i o=C o n v e r t . T o D o u b l e ( S a l a r i o F o r m a t a d o ) ; i f ( d S a l a r i o> = 0& &d S a l a r i o< = 6 0 0 . 0 ) { d S a l a r i o* =1 . 8 ; r e t u r nC o n v e r t . T o S t r i n g ( d S a l a r i o ) ; } e l s ei f ( d S a l a r i o> =6 0 1 . 0& &d S a l a r i o< =1 0 0 0 . 0 ) { d S a l a r i o* =1 . 5 ; r e t u r nC o n v e r t . T o S t r i n g ( d S a l a r i o ) ; } e l s e { d S a l a r i o* =1 . 2 ; r e t u r nC o n v e r t . T o S t r i n g ( d S a l a r i o ) ; } } } } }

Listagem 1: Servio que calcula o reajuste de salrio O cdigo do servio simples e dispensa maiores comentrios. Como estamos criando um servio ASMX, estamos trabalhando com o protocolo SOAP no encapsulamento das informaes trafegadas e, portanto, precisamos de um arquivo WSDL para apresentar a descrio do servio. A Listagem 2 apresenta o cdigo do arquivo gerado pelo Mono Develop para o servio em questo. 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 < ? x m lv e r s i o n = " 1 . 0 "e n c o d i n g = " u t f 8 " ? > ? < d e f i n i t i o n sx m l n s : s o a p = " h t t p : / / s c h e m a s . x m l s o a p . o r g / w s d l / s o a p / " x m l n s : s o a p 1 2 = " h t t p : / / s c h e m a s . x m l s o a p . o r g / w s d l / s o a p 1 2 / " x m l n s : s o a p e n c = " h t t p : / / s c h e m a s . x m l s o a p . o r g / s o a p / e n c o d i n g / " x m l n s : s = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a " x m l n s : h t t p = " h t t p : / / s c h e m a s . x m l s o a p . o r g / w s d l / h t t p / " x m l n s : m i m e = " h t t p : / / s c h e m a s . x m l s o a p . o r g / w s d l / m i m e / " x m l n s : t m = " h t t p : / / m i c r o s o f t . c o m / w s d l / m i m e / t e x t M a t c h i n g / "x m l n s : s 0 = " h t t p : / / t e m p u r i . o r g / " n a m e = " W S R e a j u s t e S a l a r i o "t a r g e t N a m e s p a c e = " h t t p : / / t e m p u r i . o r g / " x m l n s = " h t t p : / / s c h e m a s . x m l s o a p . o r g / w s d l / " > < t y p e s > < x s : s c h e m ae l e m e n t F o r m D e f a u l t = " q u a l i f i e d "t a r g e t N a m e s p a c e = " h t t p : / / t e m p u r i . o r g / " x m l n s : x s = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a " > < x s : e l e m e n tn a m e = " C a l c u l a R e a j u s t e S a l a r i o " > < x s : c o m p l e x T y p e > < x s : s e q u e n c e > < x s : e l e m e n tm i n O c c u r s = " 0 "m a x O c c u r s = " 1 "n a m e = " p S a l a r i o "t y p e = " x s : s t r i n g " / > < / x s : s e q u e n c e > < / x s : c o m p l e x T y p e > < / x s : e l e m e n t > < x s : e l e m e n tn a m e = " C a l c u l a R e a j u s t e S a l a r i o R e s p o n s e " > < x s : c o m p l e x T y p e > < x s : s e q u e n c e > < x s : e l e m e n tm i n O c c u r s = " 0 "m a x O c c u r s = " 1 "n a m e = " C a l c u l a R e a j u s t e S a l a r i o R e s u l t " t y p e = " x s : s t r i n g " / > < / x s : s e q u e n c e > < / x s : c o m p l e x T y p e > < / x s : e l e m e n t > < x s : e l e m e n tn a m e = " s t r i n g "n i l l a b l e = " t r u e "t y p e = " x s : s t r i n g " / > < / x s : s c h e m a > < / t y p e s > < m e s s a g en a m e = " C a l c u l a R e a j u s t e S a l a r i o S o a p I n " > < p a r tn a m e = " p a r a m e t e r s "e l e m e n t = " s 0 : C a l c u l a R e a j u s t e S a l a r i o " / > < / m e s s a g e > < m e s s a g en a m e = " C a l c u l a R e a j u s t e S a l a r i o S o a p O u t " > < p a r tn a m e = " p a r a m e t e r s "e l e m e n t = " s 0 : C a l c u l a R e a j u s t e S a l a r i o R e s p o n s e " / > < / m e s s a g e > < m e s s a g en a m e = " C a l c u l a R e a j u s t e S a l a r i o H t t p G e t I n " > < p a r tn a m e = " p S a l a r i o "t y p e = " s : s t r i n g " / > < / m e s s a g e > < m e s s a g en a m e = " C a l c u l a R e a j u s t e S a l a r i o H t t p G e t O u t " > < p a r tn a m e = " B o d y "e l e m e n t = " s 0 : s t r i n g " / > < / m e s s a g e > < m e s s a g en a m e = " C a l c u l a R e a j u s t e S a l a r i o H t t p P o s t I n " > < p a r tn a m e = " p S a l a r i o "t y p e = " s : s t r i n g " / > < / m e s s a g e > < m e s s a g en a m e = " C a l c u l a R e a j u s t e S a l a r i o H t t p P o s t O u t " > < p a r tn a m e = " B o d y "e l e m e n t = " s 0 : s t r i n g " / > < / m e s s a g e > < p o r t T y p en a m e = " W S R e a j u s t e S a l a r i o S o a p " > < o p e r a t i o nn a m e = " C a l c u l a R e a j u s t e S a l a r i o " > < i n p u tm e s s a g e = " s 0 : C a l c u l a R e a j u s t e S a l a r i o S o a p I n " / > < o u t p u tm e s s a g e = " s 0 : C a l c u l a R e a j u s t e S a l a r i o S o a p O u t " / > < / o p e r a t i o n > < / p o r t T y p e > < p o r t T y p en a m e = " W S R e a j u s t e S a l a r i o S o a p 1 2 " > < o p e r a t i o nn a m e = " C a l c u l a R e a j u s t e S a l a r i o " > < i n p u tm e s s a g e = " s 0 : C a l c u l a R e a j u s t e S a l a r i o S o a p I n " / > < o u t p u tm e s s a g e = " s 0 : C a l c u l a R e a j u s t e S a l a r i o S o a p O u t " / > < / o p e r a t i o n > < / p o r t T y p e > < p o r t T y p en a m e = " W S R e a j u s t e S a l a r i o H t t p G e t " > < o p e r a t i o nn a m e = " C a l c u l a R e a j u s t e S a l a r i o " > < i n p u tm e s s a g e = " s 0 : C a l c u l a R e a j u s t e S a l a r i o H t t p G e t I n " / > < o u t p u tm e s s a g e = " s 0 : C a l c u l a R e a j u s t e S a l a r i o H t t p G e t O u t " / > < / o p e r a t i o n > < / p o r t T y p e > < p o r t T y p en a m e = " W S R e a j u s t e S a l a r i o H t t p P o s t " > < o p e r a t i o nn a m e = " C a l c u l a R e a j u s t e S a l a r i o " > < i n p u tm e s s a g e = " s 0 : C a l c u l a R e a j u s t e S a l a r i o H t t p P o s t I n " / >

fabriciosanchez.com.br/2/wsdl-o-que-e-pra-que-serve-onde-utilizo/

3/5

10/10/13
7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0 8 1 8 2 8 3 8 4 8 5 8 6 8 7 8 8 8 9 9 0 9 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9 1 0 0 1 0 1 1 0 2 1 0 3 1 0 4 1 0 5 1 0 6 1 0 7 1 0 8 1 0 9 1 1 0 1 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 2 0 1 2 1 1 2 2 1 2 3 1 2 4 1 2 5 1 2 6 1 2 7 1 2 8 1 2 9 1 3 0 1 3 1 1 3 2 1 3 3 1 3 4 1 3 5 1 3 6 1 3 7

WSDL O que ? Pra que serve? Onde utilizo? | Fabricio Sanchez


< o u t p u tm e s s a g e = " s 0 : C a l c u l a R e a j u s t e S a l a r i o H t t p P o s t O u t " / > < / o p e r a t i o n > < / p o r t T y p e > < b i n d i n gn a m e = " W S R e a j u s t e S a l a r i o S o a p "t y p e = " s 0 : W S R e a j u s t e S a l a r i o S o a p " > < s o a p : b i n d i n gt r a n s p o r t = " h t t p : / / s c h e m a s . x m l s o a p . o r g / s o a p / h t t p " / > < o p e r a t i o nn a m e = " C a l c u l a R e a j u s t e S a l a r i o " > < s o a p : o p e r a t i o ns o a p A c t i o n = " h t t p : / / t e m p u r i . o r g / C a l c u l a R e a j u s t e S a l a r i o "s t y l e = " d o c u m e n t " < i n p u t > < s o a p : b o d yu s e = " l i t e r a l " / > < / i n p u t > < o u t p u t > < s o a p : b o d yu s e = " l i t e r a l " / > < / o u t p u t > < / o p e r a t i o n > < / b i n d i n g > < b i n d i n gn a m e = " W S R e a j u s t e S a l a r i o S o a p 1 2 "t y p e = " s 0 : W S R e a j u s t e S a l a r i o S o a p 1 2 " > < s o a p 1 2 : b i n d i n gt r a n s p o r t = " h t t p : / / s c h e m a s . x m l s o a p . o r g / s o a p / h t t p " / > < o p e r a t i o nn a m e = " C a l c u l a R e a j u s t e S a l a r i o " > < s o a p 1 2 : o p e r a t i o ns o a p A c t i o n = " h t t p : / / t e m p u r i . o r g / C a l c u l a R e a j u s t e S a l a r i o " s t y l e = " d o c u m e n t " / > < i n p u t > < s o a p 1 2 : b o d yu s e = " l i t e r a l " / > < / i n p u t > < o u t p u t > < s o a p 1 2 : b o d yu s e = " l i t e r a l " / > < / o u t p u t > < / o p e r a t i o n > < / b i n d i n g > < b i n d i n gn a m e = " W S R e a j u s t e S a l a r i o H t t p G e t "t y p e = " s 0 : W S R e a j u s t e S a l a r i o H t t p G e t " > < h t t p : b i n d i n gv e r b = " G E T " / > < o p e r a t i o nn a m e = " C a l c u l a R e a j u s t e S a l a r i o " > < h t t p : o p e r a t i o nl o c a t i o n = " / C a l c u l a R e a j u s t e S a l a r i o " / > < i n p u t > < h t t p : u r l E n c o d e d / > < / i n p u t > < o u t p u t > < m i m e : m i m e X m lp a r t = " B o d y " / > < / o u t p u t > < / o p e r a t i o n > < / b i n d i n g > < b i n d i n gn a m e = " W S R e a j u s t e S a l a r i o H t t p P o s t "t y p e = " s 0 : W S R e a j u s t e S a l a r i o H t t p P o s t " > < h t t p : b i n d i n gv e r b = " P O S T " / > < o p e r a t i o nn a m e = " C a l c u l a R e a j u s t e S a l a r i o " > < h t t p : o p e r a t i o nl o c a t i o n = " / C a l c u l a R e a j u s t e S a l a r i o " / > < i n p u t > < m i m e : c o n t e n tt y p e = " a p p l i c a t i o n / x w w w f o r m u r l e n c o d e d " / > < / i n p u t > < o u t p u t > < m i m e : m i m e X m lp a r t = " B o d y " / > < / o u t p u t > < / o p e r a t i o n > < / b i n d i n g > < s e r v i c en a m e = " W S R e a j u s t e S a l a r i o " > < p o r tn a m e = " W S R e a j u s t e S a l a r i o S o a p "b i n d i n g = " s 0 : W S R e a j u s t e S a l a r i o S o a p " > < s o a p : a d d r e s sl o c a t i o n = " h t t p : / / 1 2 7 . 0 . 0 . 1 : 8 0 8 0 / W S R e a j u s t e S a l a r i o . a s m x " / > < / p o r t > < p o r tn a m e = " W S R e a j u s t e S a l a r i o S o a p 1 2 "b i n d i n g = " s 0 : W S R e a j u s t e S a l a r i o S o a p 1 2 " > < s o a p 1 2 : a d d r e s sl o c a t i o n = " h t t p : / / 1 2 7 . 0 . 0 . 1 : 8 0 8 0 / W S R e a j u s t e S a l a r i o . a s m x " / > < / p o r t > < p o r tn a m e = " W S R e a j u s t e S a l a r i o H t t p G e t "b i n d i n g = " s 0 : W S R e a j u s t e S a l a r i o H t t p G e t " > < h t t p : a d d r e s sl o c a t i o n = " h t t p : / / 1 2 7 . 0 . 0 . 1 : 8 0 8 0 / W S R e a j u s t e S a l a r i o . a s m x " / > < / p o r t > < p o r tn a m e = " W S R e a j u s t e S a l a r i o H t t p P o s t "b i n d i n g = " s 0 : W S R e a j u s t e S a l a r i o H t t p P o s t " > < h t t p : a d d r e s sl o c a t i o n = " h t t p : / / 1 2 7 . 0 . 0 . 1 : 8 0 8 0 / W S R e a j u s t e S a l a r i o . a s m x " / > < / p o r t > < / s e r v i c e > < / d e f i n i t i o n s >

Listagem 2: Cdigo do arquivo WSDL criado Como possvel observar, o arquivo WSDL possui todas as informaes sobre o servio criado, tais como: nome, encode, descrio do mtodo disponvel, MIME, etc., e tudo isso, em um formato extremamente simples XML. A Figura 2 apresenta o servio criado em funcionamento.

Figura 2: Servio em execuo Bom pessoal, por hoje isso. Espero que este post possa t-lo ajudado a entender o conceito relacionado aos arquivos WSDL e sua importncia no conexto da comunicao de aplicaes.

fabriciosanchez.com.br/2/wsdl-o-que-e-pra-que-serve-onde-utilizo/

4/5

10/10/13

WSDL O que ? Pra que serve? Onde utilizo? | Fabricio Sanchez

No se esquea de deixar seus comentrios sobre o post.

fabriciosanchez.com.br/2/wsdl-o-que-e-pra-que-serve-onde-utilizo/

5/5

Você também pode gostar