XML WEB Services
Arquitectura de Sistemas
DEI-ISEP
0
Web Services
A Web service is a software system designed to
support interoperable machine-to-machine interaction
over a network. It has an interface described in a
machine-processable format (specifically WSDL).
Other systems interact with the Web service in a
manner prescribed by its description using SOAP
messages, typically conveyed using HTTP with an
XML serialization in conjunction with other Webrelated standards.
Fonte:http://www.w3.org/TR/2004/NOTE-ws-arch-20040211
1
Web Services

Um cenário de utilização
2

Um cenário de utilização
3
Web Services

Um Web Service é um bloco de software que
pode ser acedido pela Internet e usado
remotamente por outras aplicações
Infra-estrutura para a comunicação entre aplicações
4
Web Services

Antecedentes






DCOM – Distributed Component Object Model
CORBA -Common Object Request Broker
Architecture
Java RMI – Remote Method Invocation
Problemas de interoperabilbidade
Orientados à ligação
Dependentes da plataforma
5
Web Services

Características de um Web Service







Expõe funcionalidades de programação na Web serviço
São acedidos usando protocolos standard - HTTP
Comunicam por meio de mensagens
Simple Object Access Protocol
Usam XML para codificar as mensagens
Estruturam as mensagens usando o protocolo
SOAP
Web Services Description Language
São auto-descritivos permitindo a um cliente
facilmente comunicar com o serviço - WSDL
Universal Description, Discovery and Integration
São serviços que podem ser registados e
facilmente descobertos
– UDDI
Independentes
de plataformas,
linguagens de
programação e sistemas operativos
6
Arquitectura de um Web Service




Service-Oriented Architecture + Web =
Web Services
Fornecedor do serviço - Implementa o serviço,
define as funcionalidades a desenvolver e
disponibiliza o serviço na Internet.
Cliente do serviço - Qualquer aplicação que usa o
serviço. Faz chamada remota ao fornecedor do
serviço criando uma conexão e enviando um
pedido
Registo do serviço - é um directório de serviços
logicamente centralizado. Fornece um lugar para
registar os serviços e definir mecanismo simples
7
de publicação/descoberta desses serviços.
Web Services

Arquitectura baseada em SOAP, WSDL e UDDI

Fonte:Introduction to Web Services by Philippe Le Hégaret – w3c.org
8
Camadas de Protocolos




Serviço de transporte - é responsável pelo
transporte das mensagens entre aplicações.
HTTP, SMTP, FTP
Mensagens XML - responsável pela codificação
das mensagens num formato XML, de modo a
serem facilmente interpretadas pelas aplicações.
XML-RPC e SOAP
Descrição do serviço - é responsável pela
descrição da interface publica do serviço,
implementada através do protocolo WSDL
Descoberta do Serviço - é responsável pela
centralização dos serviços, simplificando a sua
publicação/descoberta - UDDI
9
Camadas de Protocolos
Descoberta
UDDI
Descrição
WSDL
Mensagens XML
Transporte
SOAP, XML-RPC
HTTP
SMTP FTP
10
SOAP
Simple Object Access Protocol
11
SOAP

SOAP Version 1.2 (SOAP) is a lightweight protocol
intended for exchanging structured information in a
decentralized, distributed environment. It uses XML
technologies to define an extensible messaging
framework providing a message construct that can be
exchanged over a variety of underlying protocols. The
framework has been designed to be independent of
any particular programming model and other
implementation specific semantics.
[SOAP Version 1.2 Part 1: Messaging Framework ]
http://www.w3.org/TR/2003/REC-soap12-part1-20030624/
12
SOAP

SOAP é um protocolo, baseado em XML,
para troca de mensagens entre aplicações

Define:


A estrutura das mensagens
Um modelo de processamento que descreve
como as mensagens devem ser
processadas pelo serviço.
13
SOAP

Template de uma mensagem SOAP:
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envel
ope/">
<soap:Header>
<!-- optional -->
<!-- header blocks go here... -->
</soap:Header>
<soap:Body>
<!-- payload or Fault element goes here... -->
</soap:Body>
</soap:Envelope>
14
SOAP

<soap:Envelope>
Elemento raiz de uma mensagem SOAP. Contém um
Header opcional e um Body obrigatório
 <soap:Header>
usado para codificar informação adicional da
mensagem – header blocks
 <soap:Body>
contém o conteúdo principal da mensagem a enviar
e deve ser um documento XML válido.

<soap:Fault>
trata os erros de um modo centralizado, permitindo
ao servidor comunicar ao cliente os erros
encontrados no processamento da mensagem
15
Mensagem SOAP .Net
[WebMethod ]
public int Add(int x, int y)
{return x+y;}
Codificação da chamada Add(3,5)
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Add xmlns="http://w2kslosaw/DemoService/">
<x>3</x>
<y>5</y>
</Add>
</soap:Body>
</soap:Envelope>
16
Mensagem SOAP .Net

Codificação da Resposta
<soap:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<AddResponse xmlns="http://w2kslosaw/helloworld/">
<AddResult>
8
</AddResult>
</AddResponse>
</soap:Body>
</soap:Envelope>
17
SOAP – Protocol Binding



Para além da codificação da mensagem em SOAP é
necessário definir como a mensagem será enviada.
Uma da grandes vantagens do SOAP é que não está
ligado a nenhum protocolo particular. As mensagens
SOAP podem ser enviadas por qualquer protocolo que
possa transmitir XML
A especificação SOAP define apenas um “protocol
binding” – enviar mensagens SOAP via HTTP POST
18
SOAP – Protocol Binding
Exemplo de um
mensagem SOAP:

pedido
HTTP
com
uma
POST /losaw/dir1/demoservice.asmx HTTP/1.1
Host: w2ks
Request
Content-Type: text/xml; charset=utf-8
Content-Length: 312
SOAPAction: "http://w2kslosaw/helloworld/Add"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope …
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Add xmlns="http://w2kslosaw/helloworld/">
<x>3</x>
<y>5</y>
</Add>
</soap:Body>
19
</soap:Envelope>
SOAP – Protocol Binding
Exemplo
de resposta HTTP com mensagem SOAP:
HTTP/1.1 200 OK
Response
Content-Type: text/xml; charset=utf-8
Content-Length: 100
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope …
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<AddResponse xmlns="http://w2kslosaw/helloworld/">
<AddResult>8</AddResult>
</AddResponse>
</soap:Body>
</soap:Envelope>
20
Camadas de Protocolos
Descoberta
UDDI
Descrição
WSDL
Mensagens XML
SOAP, XML-RPC
Transporte
HTTP SMTP FTP
21
Web Service
WSDL
Web Service Description Language
22
WSDL

WSDL is an XML format for describing network
services as a set of endpoints operating on
messages containing either document-oriented or
procedure-oriented information. The operations and
messages are described abstractly, and then bound
to a concrete network protocol and message format
to define an endpoint. Related concrete endpoints
are combined into abstract endpoints (services).
WSDL is extensible to allow description of endpoints
and their messages regardless of what message
formats or network protocols are used to
communicate.
[Web Services Description Language (WSDL) 1.1 ]
http://www.w3.org/TR/2001/NOTE-wsdl-20010315
23
WSDL - Web Service Description Language


WSDL é uma especificação para descrever um
Web Service num vocabulário XML
WSDL é um documento XML para descrever:




A interface pública descrevendo todas as funções
disponibilizadas pelo serviço
A informação dos tipos de dados para as
mensagens de chamada/resposta dos serviços
A informação sobre o protocolo de transporte a usar
A informação sobre a localização do serviço
WSDL representa um contracto entre o cliente do serviço
e o fornecedor do serviço
24
WSDL - Web Service Description Language

Estrutura de um documento WSDL






<definitions> é o elemento raíz do documento WSDL
<types> especifica o tipo de dados usados no serviço,
que serão referenciados pelas mensagens
<message> especifica as mensagens do serviço
<definitions> Root
<portType> especifica as <operation>( interface) do
<types> Que dados?
serviço
<binding> especifica o <message>
formato dasQue
mensagens
e um
mensagens?
protocolo de transporte
operações?
<service> especifica a <portType>
localizaçãoQue
para
invocar o
serviço <port>
<binding> Que formato e transporte?
<service> Onde está o serviço?
25
WSDL - Web Service Description Language

Definitions
É o elemento raíz de um documento WSDL. O atributo
targetNamespace permite definir um namespace e o atributo xmlns
permite referenciar outos namespaces
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:s0="http://w2kslosaw/addservice/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
targetNamespace="http://w2kslosaw/addservice/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
26
WSDL - Web Service Description Language

<types>
Contém declarações de tipos de dados referenciadas pelas
mensagens
É um Schema embebido no documento.

Add
element – Add (Chamada do serviço)
<types>
<s:schema elementFormDefault="qualified" [WebMethod ]
targetNamespace="http://w2kslosaw/addservice/">
public int Add(int x, int y)
<s:element name="Add">
{return x+y;}
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="x" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="y" type="s:int" />
</s:sequence>
</s:complexType>
27
</s:element>
WSDL

<types>

element – AddResponse – (tipo de dados da resposta)
<s:element name="AddResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="AddResult"
type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
28
WSDL - Web Service Description Language

<message>



Uma descrição abstracta das mensagens entre o cliente e
o servidor.
Cada mensagem contém uma ou mais <part> que
descrevem um item a ser enviado ou recebido
Um element part tem um atributo element ou type
Input
<message name="AddSoapIn">
<part name="parameters" element="s0:Add" />
</message>
Referência a types
Output
<message name="AddSoapOut">
<part name="parameters" element="s0:AddResponse" />
</message>
29
WSDL - Web Service Description Language
<message name="AddSoapIn">
<part name="parameters" element="s0:Add" />
</message>
<types>…
<s:element name="Add"> …
<s:element minOccurs="1" maxOccurs="1" name="x" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="y" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
<soap:Body>
<Add xmlns="http://w2kslosaw/DemoService/">
<x>3</x>
<y>5</y>
Request
</Add>
</soap:Body>
30
<message name="AddSoapOut">
<part name="parameters" element="s0:AddResponse" />
</message>
<s:element name="AddResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="AddResult“ type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
<soap:Body>
<AddResponse xmlns="http://tempuri.org/">
<AddResult>int</AddResult>
</AddResponse> </soap:Body>
Response
31
WSDL - Web Service Description Language

<portType> (Interfaces)


Define um grupo de <operation> relacionadas, isto é uma
interface para o serviço.
Cada operação é constituída por combinações de elementos
input e output (e fault opcional) dependendo do
padrão da mensagem (Message Exchange Pattern)
<portType name="DemoServiceSoap">
<operation name="Add">
<input message="s0:AddSoapIn" />
<output message="s0:AddSoapOut" />
</operation>
</portType>
<message name="AddSoapIn">
<part name="parameters" element="s0:Add" />
</message>
32
WSDL - Web Service Description Language

Message Exchange pattern
33
WSDL - Web Service Description Language

<binding>
Descreve os detalhes concretos da utilização de um determinado
portType, com um dado protocolo.
 Define o formato das mensagens e os detalhes do protocolo.
 Especifica como criar um envelope SOAP para uma operation

Referência ao portType
<binding name="DemoServiceSoap“ type="s0:DemoServiceSoap">
<soap:binding style="document"
transport=http://schemas.xmlsoap.org/soap/http” />
<operation name="Add">
<soap:operation style="document"
soapAction="http://w2kslosaw/addservice/Add" />
<input> <soap:body use="literal" /> </input>
<output> <soap:body use="literal" /> </output>
</operation>
</binding>
34
WSDL - Web Service Description Language
<soap:binding>


binding através de SOAP

transport define o protocolo de transporte
transport=http://schemas.xmlsoap.org/soap/http
35
WSDL - Web Service Description Language

<soap:binding>
<soap:operation style="document"
soapAction="http://w2kslosaw/addservice/Add" />
<input> <soap:body use="literal" /> </input>
<output> <soap:body use="literal" /> </output>
</operation>

<soap:operation>
define a forma como é feito o binding de determinada operação

<soapAction>
define cabeçalho http SOAPACTION

<soap:body> define a codificação da mensagem no body do SOAP use="literal"
36
WSDL - Web Service Description Language

<service>


O elemento service define um ou mais elementos port ( ponto
de acesso).
Um elemento <port> é usado para especificar um endereço
do Web Service com referência a um determinado binding.
<service name="DemoService">
Referência ao binding
<port name="DemoServiceSoap"
binding="s0:DemoServiceSoap">
<soap:address
location="http://w2ks/losaw/dir1/demoservice.asmx" />
</port>
</service>
37
Service
Port
Binding
Operation
PortType
Operation
Message
Part
Types
<service name="DemoService">
binding="s0:DemoServiceSoap">
<soap:address location="http://w2ks/losaw/dir1/demoservice.asmx"
<binding name="DemoServiceSoap“ type="s0:DemoServiceSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document" />
<operation name="Add">
<portType name="DemoServiceSoap">
<operation name="Add">
<input message="s0:AddSoapIn" />
<output message="s0:AddSoapOut" />
<message name="AddSoapIn">
<part name="parameters" element="s0:Add" />
</message>
<types>
<s:element name="Add">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="x" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="y" type="s:int" />
</s:sequence>
Web Services
Universal Description, Discovery
and Integration
39
UDDI

Um registo de serviços





UDDI Business registry
Um local para descobrir serviços e
informação detalhado sobre o serviço , p.e
WSDL
Classificar, catalogar e gerir Web services
Selecção dinâmica da implementação de
um serviço em Runtime
Criado inicialmente por Microsoft, IBM e
Ariba
40
UDDI

Repositórios UDDi de teste





http://test.uddi.microsoft.com/
https://uddi.ibm.com/testregistry/registry.html
http://udditest.sap.com
Replicação da informação nos repositórios
Registo da informação



White pages – identificação da empresa
Yellow pages – classificação do serviço
Green pages – informação técnica sobre o serviço
41
UDDI

UDDI Programmers APIs






Inquiry API Set
Publication API Set
Security Policy API Set
Subscription API Set
Value Set API Set
Implementações




Microsoft UDDI SDK
IBM UDDI4J
Java API for XML Registry – JAXR
WASP UDDI
42
ASP.NET Web Services

Exemplos
1 – Criar Web Service .Net básico
2 – Criar Cliente do serviço
3 – Criar cliente para o serviço na máquina dot
http://dot.dei.isep.ipp.pt/losa/aula7/WebServiceSomar.asmx
4 – criar cliente do serviço
43
ASP.NET Web Services

Criar Serviço



New Web Site -> ASP.NET Web Service
Serviço criado na máquina dot
http://dot.dei.isep.ipp.pt/losa/WS1/WebServiceSomar.asmx
44
ASP.NET Web Services

Código do serviço WebServiceSomar.cs
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo =WsiProfiles.BasicProfile1_1)]
public class WebServiceSomar :System.Web.Services.WebService{
public WebServiceSomar() {}
[WebMethod] // método do serviço
public int Somar(int x, int y)
{
return x + y;
}
}
 Atributo [WebMethod] expõe o método público como método do serviço
45
ASP.NET Web Services

Teste do serviço

http://dot.dei.isep.ipp.pt/losa/WS1/WebServiceSomar.asmx
46
ASP.NET Web Services

Criar cliente do serviço
• O cliente pode ser
qualquer tipo de
aplicação: Windows,
Console Application, Web
• Exemplo com Web
Application
• Add Web Reference no
projecto
47
ASP.NET Web Services

Namespace e Ficheiros gerados
48
ASP.NET Web Services

Código do cliente do serviço
int x = 5;
int y = 7;
//criar objecto proxy para chamar o serviço
WebServiceSomar proxy = new WebServiceSomar();
// chamar o método do serviço
int result=proxy.Somar( x, y);

A classe proxy WebServiceSomaré criada através da
descrição do serviço no ficheiro: WebServiceSomar.wsdl
49
ASP.NET Web Services



Classe WebServiceSomar(proxy) no cliente é
responsável pela chamada do serviço
Acrescentando ao projecto um class diagram permite
ver o código da classe, gerada pela framework.
Class View para ver o código
50
ASP.NET Web Services

Class WebServiceSomar no cliente (proxy)
public partial class WebServiceSomar :
System.Web.Services.Protocols.SoapHttpClientProtocol{
private System.Threading.SendOrPostCallback.
SomarOperationCompleted;
/// <remarks/>
public WebServiceSomar() {
string urlSetting =
System.Configuration.ConfigurationManager.
AppSettings["pt.ipp.isep.dei.dot.WebServiceSomar"];
if ((urlSetting != null)) {
this.Url = urlSetting;
}
else {
this.Url =
"http://dot.dei.isep.ipp.pt/losa/WS1/WebServiceSomar.asmx";
}}
Método Somar no cliente

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("h
ttp://tempuri.org/Somar",
RequestNamespace="http://tempuri.org/",
ResponseNamespace="http://tempuri.org/",
Use=System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle=System.Web.Services.Protocols.SoapParameterS
tyle.Wrapped)]
public int Somar(int x, int y) {
object[] results = this.Invoke("Somar",
new object[] { x, y});
return ((int)(results[0]))
}

Método Invoque chama o serviço, passando um array com os parâmetros
52
Web Services .Net

Framework .Net para Web Service
Fonte: Anatomy of an XML Web Service Lifetime - .NET Framework Developer's Guide
53
Web Services .Net

O cliente chama um método do serviço

A plataforma no cliente serialize os argumentos do método
numa mensagem SOAP e envia a mensagem através da
rede usando o protocolo HTTP para o computador onde
reside o serviço Web

O serviço Web recebe a mensagem SOAP e deserialize o
XML recebido. Cria uma instância da classe que implementa
o serviço e invoca o método do serviço.

O serviço executa o código e serialize o resultado enviando
uma mensagem de resposta para o cliente

O cliente deserialize a mensagem ...
54
Web Services .Net

Link

Walkthrough: Creating and Using an ASP.NET Web Service in Visual Web
Developer
http://msdn.microsoft.com/enus/library/8wbhsy70(VS.80).aspx#Mtps_DropDownFilterText

WSDL do Global Weather Service
http://www.webservicex.net/globalweather.asmx

Custo de envio de encomendas pelos CTT
http://webservices.tekever.eu/ctt/index.php

Sites com Web Services
http://www.xmethods.net/ve2/index.po
55
Download

Web Service