[ITA] Introduzione ai web services: SOAP, WSDL, UDDI

15,049 views
14,795 views

Published on

Lezione introduttiva sui web services (in italiano): cosa sono, a cosa servono e standard base: SOAP, WSDL, UDDI,

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
15,049
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
423
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • The data entry unit permits the designer to specify a device for collecting user input The outgoing link of data entry unit transports the information input by the user to a subsequent unit, which can process it, In an way similar to the behaviour of the submit button of the html form tag
  • [ITA] Introduzione ai web services: SOAP, WSDL, UDDI

    1. 1. Introduzione ai Web Services: SOAP, WSDL, UDDI Marco Brambilla - http://www.elet.polimi.it/upload/mbrambil http://home.dei.polimi.it/mbrambil http://twitter.com/MarcoBrambi http://www.slideshare.net/mbrambil
    2. 2. Sommario <ul><li>Obiettivo della lezione </li></ul><ul><li>Cosa sono i Web service </li></ul><ul><li>Le specifiche su cui si basano: </li></ul><ul><ul><li>SOAP </li></ul></ul><ul><ul><li>WSDL </li></ul></ul><ul><ul><li>UDDI </li></ul></ul>
    3. 3. Obiettivi della lezione <ul><li>Introdurre i Web service </li></ul><ul><li>Descrivere le loro caratteristiche e scenari applicativi </li></ul><ul><li>Definire le tecnologie su cui si basano </li></ul><ul><li>Nella prossima lezione: introdurre il concetto di coreografia </li></ul>
    4. 4. Motivazioni <ul><li>Esigenze della costruzione di applicazioni enterprise (Enterprise Application Integration): </li></ul><ul><ul><li>Integrare nuove applicazioni e sistemi pre-esistenti,spesso progettati con tecnologie pre-Web </li></ul></ul><ul><ul><li>Integrare applicazioni Internet, extranet ed intranet, con un protocollo di trasporto facilmente implementabile e compatibile con le regole di sicurezza (VPN, firewall) </li></ul></ul><ul><ul><li>Pubblicare in modo esplicito i servizi offerti dalle applicazioni esistenti, per favorirne il riuso da parte di altre applicazioni </li></ul></ul>
    5. 5. Requisiti per la soluzione <ul><li>Un protocollo di trasporto che consenta la comunicazione mediante HTTP </li></ul><ul><li>Interoperabilità mediante scambio di messaggi </li></ul><ul><li>Formattazione dei messaggi tramite XML </li></ul><ul><li>Pubblicazione dei servizi mediante un registro pubblico basato su XML </li></ul><ul><li> TOTALE INDIPENDENZA DALLE TECNOLOGIE DI SVILUPPO DEI SINGOLI SERVIZI E DALLE INFRASTRUTTURE DI RETE </li></ul>
    6. 6. Web Service: definizione <ul><li>W3C Definition: [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] </li></ul><ul><li>Un Web service è un componente software: </li></ul><ul><ul><li>Accessibile mediante un protocollo denominato SOAP (Simple Object Access Protocol), facilmente implementabile sopra HTTP </li></ul></ul><ul><ul><li>La cui interfaccia è descritta da un documento XML che segue il formato WSDL (Web Service Description Language) </li></ul></ul><ul><li>I Web service si basano sulle specifiche XML, SOAP, WSDL, UDDI. Questi sono i pilastri per l'integrazione ed aggregazione di applicazioni </li></ul>
    7. 7. Architetture a servizi vs 3 tier
    8. 8. Ciclo di vita di un servizio 3 2 1 PRODUTTORE CONSUMATORE REGISTRO CHIAMA CERCA PUBBLICA
    9. 9. Web Service Stack <ul><li>L’architettura dei Web Services è definita su sei livelli (layers) di tecnologie e standard </li></ul>Service Integration Service Discovery Service Publication Service Description XML - based Messaging Transport BPEL4WS IBM , Microsoft & BEA WCSI Sun BPML BPMI.org WSFL IBM XLANG Microsoft ebBPSS ebXML .org UDDI UDDI.org ebXML ebXML .org UDDI UDDI.org ebXML ebXML .org WSDL W3C XMLP W3C SOAP W3C XML W3C HTTPR IBM HTTP W3C
    10. 10. SOAP: Simple Object Access Protocol (v. 1.2) <ul><li>Protocollo di scambio di informazioni in formato XML tra attori qualsiasi </li></ul><ul><li>Definisce un formato generico di messaggio XML </li></ul><ul><li>E’ un paradigma di scambio stateless e one-way </li></ul><ul><li>Pattern di interazione più complessi (es. Richiesta/risposta, …) devono essere definiti a livello applicativo </li></ul><ul><li>Specifica le azioni che gli attori della conversazione (i SOAP processors) devono svolgere al momento della ricezione dei messaggi </li></ul><ul><li>Non descrive </li></ul><ul><ul><li>La semantica dei dati trasportati, </li></ul></ul><ul><ul><li>L’implementazione della comunicazione </li></ul></ul><ul><ul><li>La qualità del trasporto (affidabilità, routing) </li></ul></ul>
    11. 11. SOAP: scenario e componenti <ul><li>SOAP prevede un processing model distribuito: </li></ul><ul><ul><li>un SOAP message </li></ul></ul><ul><ul><li>viene inviato da un SOAP sender </li></ul></ul><ul><ul><li>è diretto ad un SOAP receiver finale </li></ul></ul><ul><ul><li>attraverso zero o più SOAP intermediaries </li></ul></ul><ul><li>Il SOAP processing model specifica in che modo un SOAP receiver processa un SOAP message. </li></ul><ul><ul><li>Si applica ad un singolo messaggio, isolato da tutti gli altri </li></ul></ul>
    12. 12. SOAP: scenario e componenti <ul><li>Nel processare i SOAP message, un nodo SOAP agisce in uno o più SOAP roles </li></ul><ul><li>Ciascun role è identificato da un URI chiamato SOAP role name </li></ul><ul><li>I ruoli assunti da un nodo non possono variare nell'atto di processare un messaggio </li></ul>
    13. 13. Formato dei messaggi SOAP <ul><li>Envelope: il contenitore delle diverse parti delmessaggio </li></ul><ul><li>Body (obbligatorio): parte centrale del messaggio </li></ul><ul><li>Header (opzionale): informazioni addizionali al messaggio, divise in blocchi, per i diversi attori coinvolti </li></ul><ul><li>I contenuti di ogni parte NON sono specificati in SOAP </li></ul>SOAP Envelope SOAP Header (opzionale) SOAP Body (obbligatorio) Header Block 1 ………… Header Block N
    14. 14. Esempio di messaggio SOAP <ul><li><?xml version=’1.0’ ?> </li></ul><ul><li>< env:Envelope xmlns:env=”http://www.w3.org/2001/12/soap-envelope” > </li></ul><ul><li>< env:Header > </li></ul><ul><li>   <m:reservation xmlns:m=”http://webml.org/reservation” > </li></ul><ul><li><m:reference>abl:0932 </reference> </li></ul><ul><li><m:dateAndTime>2001-11-29 13:35:00</m:dateAndTime> </li></ul><ul><li></m:reservation> </li></ul><ul><li><n:passenger xmlns:n=”http://webml.org/employees ”> </li></ul><ul><li><n:name>John Smith</n:name> </li></ul><ul><li>   </n:passenger> </li></ul><ul><li>< /env:Header > </li></ul><ul><li>  < env:Body > </li></ul><ul><li><p:itinerary xmlns:p=”http://webml.org/reservation/travel” > </li></ul><ul><li><p:airportChoices> </li></ul><ul><li>JFK LGA EWR </li></ul><ul><li></p:airportChoices> </li></ul><ul><li></p:itinerary> </li></ul><ul><li></env:Body > </li></ul><ul><li>< /env:Envelope > </li></ul>
    15. 15. L’uso dei namespace nei messaggi SOAP <ul><li>Poichè in XML i nomi degli elementi non sono fissati a priori è spesso possibile che si verifichino conflitti quando due documenti usano lo stesso nome per descrivere due diversi tipi di elementi </li></ul>XHTML: <table> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table> Mobilio: <table> <name>African Coffee Table </name> <width>80</width> <length>120</length> </table>
    16. 16. <ul><li>I namespace sono dei semplici prefissi usati per evitare conflitti tra elementi con lo stesso nome </li></ul><ul><li>La sintassi: xmlns:namespace-prefix=&quot;namespace&quot; </li></ul><ul><li><f:table xmlns:f=&quot;http://www.w3schools.com/furniture&quot;> </li></ul><ul><li><f:name>African Coffee Table</f:name> </li></ul><ul><li><f:width>80</f:width> </li></ul><ul><li><f:length>120</f:length> </li></ul><ul><li></f:table> </li></ul><ul><li>L'attributo xmlns associa al prefisso &quot;f&quot; un qualified name (un URI) </li></ul><ul><li>Nota: viene usato un URI semplicemente per dare al namespace un identificativo unico, non viene usato dal parser per recuperare informazioni </li></ul>L’uso dei namespace nei messaggi SOAP
    17. 17. I namespace usati nello standard (SOAP 1.2) <ul><li>xmlns:env=http://www.w3.org/2003/05/soap-envelope </li></ul><ul><li>xmlns:rpc=http://www.w3.org/2003/05/soap-rpc </li></ul><ul><li>xmlns:SOAP-ENC = http://schemas.xmlsoap.org/soap/encoding/ </li></ul><ul><li>xmlns:xsd=http://www.w3.org/1999/XMLSchema </li></ul><ul><li>xmlns:xsi=&quot;http://www.w3.org/1999/XMLSchema-instance&quot; </li></ul>
    18. 18. SOAP processing model (1) <ul><li>Descrive le azioni che un SOAP processor deve svolgere alla ricezione di un messaggio SOAP </li></ul><ul><li>Il processor deve saper riconoscere le parti di messaggio specifiche di SOAP (“env” namespace: envelope, header, body, header blocks) </li></ul><ul><li>Un header block può contenere un attributo role (actor in SOAP 1.1) che specifica il ruolo del destinatario di quel blocco. Ruoli standard sono: </li></ul><ul><ul><li>next: (&quot;http://www.w3.org/2003/05/soap-envelope/role/next&quot;): il ruolo che deve essere assunto da tutti gli intermediari e dal nodo ficevente finale. . </li></ul></ul><ul><ul><li>none: (&quot;http://www.w3.org/2003/05/soap-envelope/role/none&quot;): denota che un header block NON è destinato ad alcun nodo SOAP </li></ul></ul><ul><ul><li>ultimateReceiver: (&quot;http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver“): il ruolo che deve essere ricoperto dall’utimo ricevente </li></ul></ul>
    19. 19. SOAP processing model(2) <ul><li>Un Header block può contenere l’attributo mustUnderstand : dice se altre azioni devono essere svolte oltre al corretto riconoscimento del blocco da parte dell’attore </li></ul><ul><li>mustUnderstand = “true”: il SOAP processor destinatario deve processare il blocco, comprendendone la semantica svolgendo eventualmente azioni specifiche (es., rimuovere l’header, modificare l’header, …); se non è in grado di farlo deve generare un errore(fault). </li></ul><ul><li>Scopo: esser certi che un SOAP processor non ignori mai dei blocchi significativi </li></ul><ul><li>L’elemento Body non ha attributo mustUnderstand </li></ul><ul><li>Generalmente un SOAP processor genera SOAP fault o nuovi SOAP messages che verranno consumati da altri processors </li></ul>
    20. 20. Stili di scambio messaggi <ul><li>Document style : si adotta quando i servizi richiedono di scabiarsi veri e propri documenti/dati XML </li></ul><ul><ul><li>Il Body contiene il contenuto informativo del messaggio formattato in XML </li></ul></ul><ul><ul><li>Il documento scambiato può avere struttura e contenuti qualunque, non definiti a priori </li></ul></ul><ul><li>RPC style : si adotta quando chiamata si vuole invocare una procedura remota </li></ul><ul><ul><li>Utilizza una struttura del corpo del messaggio convenzionale che rappresenta le informazioni necessarie per una RPC: nome della procedura o metodo, segnatura (opzionale), parametri </li></ul></ul><ul><ul><li>La risposta della RPC (cioè il valore di ritorno della chiamata) è restituita nel Body di un altro messaggio SOAP, secondo il meccanismo richiesta-risposta (p.e: la chiamata è inviata mediante request HTTP e la risposta fornita come respons HTTP) </li></ul></ul>
    21. 21. RPC vs Document <ul><li>RPC: </li></ul><ul><ul><li>Realizza un’invocazione di procedura </li></ul></ul><ul><ul><li>Basata sulla segnatura della procedura </li></ul></ul><ul><ul><li>Sincrona </li></ul></ul><ul><ul><li>Effettua il marshalling/unmarshalling dei parametri da/verso XML </li></ul></ul><ul><li>Document </li></ul><ul><ul><li>Sia sincrona che asincrona </li></ul></ul><ul><ul><li>Basata sui contenuti del documento </li></ul></ul><ul><ul><li>Usata quando si devono scambiare dati semistrutturati e di una certa dimensione </li></ul></ul>
    22. 22. Esempio RPC SOAP <ul><li>Supponiamo di dover chiamare una procedura del tipo: </li></ul><ul><ul><ul><li>double GetStockQuote ( [in] string sSymbol ); </li></ul></ul></ul><ul><li>La chiamata si rappresenta in SOAP con un messaggio dalla struttura convenzionale: </li></ul><ul><ul><ul><li><q:GetStockQuote xmlns:q=&quot;http://www.wroxstox.com/&quot;> </li></ul></ul></ul><ul><ul><ul><li>   <q:sSymbol xsi:type=&quot;xsd:string&quot;>OU812</q:sSymbol> </li></ul></ul></ul><ul><ul><ul><li></q:GetStockQuote> </li></ul></ul></ul><ul><li>La convenzione di chiamata stabilisce una corrispondenza tra nome della procedura e dei parametri in ingresso e nomi degli elementi da usarsi nel messaggio SOAP </li></ul>
    23. 23. Risposta a chiamata RPC SOAP <ul><li>Esempio: </li></ul><ul><ul><ul><li>string ReverseString ( [in] string s ); </li></ul></ul></ul><ul><li>Rappresentazione convenzionale della risposta: </li></ul><ul><ul><ul><li><x:ReverseString Response xmlns:x=&quot;http://www.wrox.com/&quot;> </li></ul></ul></ul><ul><ul><ul><li>   < x:ret xsi:type=&quot;xsd:string&quot;>THOR</x:ret> </li></ul></ul></ul><ul><ul><ul><li></x:ReverseString> </li></ul></ul></ul><ul><li>NB: si possono rappresentare in modo simile anche risposte a chiamate di procedura con parametri OUT e INOUT </li></ul>
    24. 24. Gestione errori: SOAP fault <ul><li>SOAP fornisce un modello per gestire situazioni di errore nella elaborazione di un messaggio </li></ul><ul><li>L’elemento Body ha un sottoelemento particolare (Fault) in cui specificare le informazioni sull’errore verificatosi </li></ul><ul><li>L’elemento Fault , nel Body, contiene: </li></ul><ul><ul><li>Faultcode: sub-elemento standard </li></ul></ul><ul><ul><li>Faultstring: sub-elemento standard </li></ul></ul><ul><ul><li>Details (opzionale): informazioni applicative specifiche </li></ul></ul><ul><ul><li>Faultactor (opzionale): identifica il SOAP processor che ha generato l’errore </li></ul></ul>
    25. 25. SOAP Binding <ul><li>I messaggi SOAP possono essere scambiati usando diversi protocolli. La specifica di come i messaggi sono passati da un nodo ad un altro usando un protocollo prende il nome di SOAP binding </li></ul><ul><li>I due binding più diffusi di SOAP usano HTTP o SMTP, ma si possono prevedere anche altri vettori (socket, messaggi MQseries, ecc..) </li></ul><ul><li>Uso tipico di HTTP </li></ul><ul><ul><ul><li>RPC: POST request con il messaggio contenente i dati di invocazione, POST response contenente il valore di ritorno </li></ul></ul></ul><ul><ul><ul><li>Document: POST request con il documento inviato ed endpoint URL a cui inviare il documento di risposta </li></ul></ul></ul>
    26. 26. SOAP Encoding <ul><li>L’invio di un messaggio può richiedere la codifica dei parametri attesi dal ricevente </li></ul><ul><li>Sorge il problema di come rappresentare in XML valori di tipi complessi (p.e.: array, record, ecc..) </li></ul><ul><li>Lo stile di codifica viene dichiarato usando l’attributo encodingStyle, che può qualificare qualunque elemento di un messaggio (ma che solitamente si mette nella SOAP envelope) </li></ul><ul><li>SOAP fornisce uno stile di encoding (http://schemas.xmlsoap.org/soap/encoding/) che usa XML schema per la rappresentazione dei valori serializzati </li></ul><ul><li>SOAP encoding tratta tipi di dati semplici, enumerativi, dati binari, tipi composti (structs, array), riferimenti, ecc.. </li></ul>
    27. 27. SOAP + HTTP <ul><li>E’ il binding più usato </li></ul><ul><li>Sfrutta il metodo POST e le entity HTTP come vettori del messaggio SOAP </li></ul><ul><li>Sfrutta HTTP URL per identificare il processore destinatario del messaggio </li></ul><ul><li>La request utilizza uno header speciale (SOAPAction) che indica informazione opzionale sul motivo della request HTTP utilizzabile dai proxy oppure dal ricevente </li></ul><ul><li>La response usa gli error code HTTP, abbinati al fault header di SOAP </li></ul>
    28. 28. Esempio SOAP+HTTP request <ul><li>POST /endpoint.asp HTTP/1.1 </li></ul><ul><li>Content-Type: text/xml </li></ul><ul><li>Content-Length: ### </li></ul><ul><li>SOAPAction: &quot;urn:wroxheroes&quot; </li></ul><ul><li><soap:Envelope xmlns:soap=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; </li></ul><ul><li>               soap:encodingStyle=&quot;http://schemas.xmlsoap.org/soap </li></ul><ul><li>                                   /encoding/&quot;> </li></ul><ul><li>   <soap:Header> </li></ul><ul><li>      <h:from xmlns:h=&quot;http://www.wrox.com/Header&quot;> </li></ul><ul><li>         [email_address] </li></ul><ul><li>      </h:from> </li></ul><ul><li>   </soap:Header> </li></ul><ul><li>   <soap:Body> </li></ul><ul><li>      <w:GetSecretIdentity xmlns:w=&quot;http://www.wrox.com/heroes/&quot;> </li></ul><ul><li>         <codename>XSLT-Man</codename> </li></ul><ul><li>      </w:GetSecretIdentity> </li></ul><ul><li>   </soap:Body> </li></ul><ul><li></soap:Envelope> </li></ul>
    29. 29. Esempio: SOAP+HTTP response <ul><li>HTTP/1.1 200 OK </li></ul><ul><li>Content-Type: text/xml </li></ul><ul><li>Content-Length: ### </li></ul><ul><li><soap:Envelope xmlns:soap=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; </li></ul><ul><li>               soap:encodingStyle=&quot;http://schemas.xmlsoap.org/soap </li></ul><ul><li>                                   /encoding/&quot; </li></ul><ul><li>               xmlns:xsi=&quot;http://www.w3.org/1999/XMLSchema-instance&quot; </li></ul><ul><li>               xmlns:xsd=&quot;http://www.w3.org/1999/XMLSchema&quot;> </li></ul><ul><li>   <soap:Body> </li></ul><ul><li>      <m:GetSecretIdentityResponse xmlns:m=&quot;http://www.wrox.com/heroes/&quot;> </li></ul><ul><li>         <return xsi:type=&quot;xsd:string&quot;>Michael Kay</return> </li></ul><ul><li>      </m:GetSecretIdentityResponse> </li></ul><ul><li>   </soap:Body> </li></ul><ul><li></soap:Envelope> </li></ul>
    30. 30. Esempio: SOAP+HTTP response con errore <ul><li>HTTP/1.1 500 Internal Server Error </li></ul><ul><li>Content-Type: text/xml </li></ul><ul><li>Content-Length: ### </li></ul><ul><li><soap:Envelope xmlns:soap=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; </li></ul><ul><li>               soap:encodingStyle=&quot;http://schemas.xmlsoap.org/soap </li></ul><ul><li>                                   /encoding/&quot; </li></ul><ul><li>               xmlns:xsi=&quot;http://www.w3.org/1999/XMLSchema-instance&quot; </li></ul><ul><li>               xmlns:xsd=&quot;http://www.w3.org/1999/XMLSchema&quot;> </li></ul><ul><li>   <soap:Body> </li></ul><ul><li>      <soap:Fault> </li></ul><ul><li>         <faultcode>soap:VersionMismatch</faultcode> </li></ul><ul><li>            <faultstring>The SOAP namespace is incorrect.</faultstring> </li></ul><ul><li>         <faultactor>http://www.wrox.com/endpoint.asp</faultactor> </li></ul><ul><li>         <detail> </li></ul><ul><li>            <w:errorinfo xmlns:w=&quot;http://www.wrox.com/&quot;> </li></ul><ul><li>               <desc>The SOAP namespace was blank.</desc> </li></ul><ul><li>            </w:errorinfo> </li></ul><ul><li>         </detail> </li></ul><ul><li>      </soap:Fault> </li></ul><ul><li>   </soap:Body> </li></ul><ul><li></soap:Envelope> </li></ul>
    31. 31. Descrizione dei servizi <ul><li>Limiti di SOAP: </li></ul><ul><ul><li>Nonostante il nome, SOAP non è veramante object- oriented, ma solo message-oriented </li></ul></ul><ul><ul><li>Non si può descrivere un servizio complesso, formato da diversi metodi </li></ul></ul><ul><ul><li>Non si può descrivere la corrispondenza tra messaggi di richiesta e messaggi di risposta </li></ul></ul><ul><ul><li>Non si può descrivere il tipo di dati che costituiscono la richiesta e la risposta </li></ul></ul>
    32. 32. Web Service Description Language <ul><li>DEFINIZIONE: WSDL è un linguaggio basato su XML per definire e descrivere Web services </li></ul><ul><li>WSDL descrive un servizio fornendo le informazioni necessarie per sviluppare client che intendano utilizzarlo seguendo la sintassi XML </li></ul><ul><li>Contenuti : Un documento WSDL specifica la locazione (URL) del servizio e le operazioni offerte, mediante: </li></ul><ul><ul><li>Una descrizione astratta di una classe di servizi </li></ul></ul><ul><ul><li>Un insieme di descrizioni di servizi concreti, conformi alla descrizione astratta </li></ul></ul>
    33. 33. Descrizione dei tipi <ul><li>La parte astratta di un descrittore WSDL specifica: </li></ul><ul><ul><li>Un insieme (opzionale) di TIPI (types): nuovi tipi XML schema che potranno essere usati nella specifica </li></ul></ul><ul><ul><li>Un insieme di MESSAGGI (messages): descrizioni astratte (tipi e nomi) dei dati scambiati con il Service (eventualmente usando i types sopra definiti) </li></ul></ul><ul><ul><li>Un insieme di OPERAZIONI (operations): descrizioni astratte delle azioni supportate da un Service </li></ul></ul><ul><ul><li>Uno o più PORT TYPE: insiemi di operazioni correlate dal punto di vista applicativo </li></ul></ul>
    34. 34. Descrizione dell’implementazione <ul><li>La parte concreta di un descrittore WSDL specifica: </li></ul><ul><ul><li>Binding: il particolare protocollo di comunicazione per un certo port type. E’ possibile specificare diversi binding per un lo stesso port type (es. su HTTP, SMTP ecc.) </li></ul></ul><ul><ul><li>Port : modulo concreto costituito da: </li></ul></ul><ul><ul><ul><li>un port type [interfaccia e specifica del servizio] </li></ul></ul></ul><ul><ul><ul><li>un binding [come funziona il servizio] </li></ul></ul></ul><ul><ul><ul><li>un indirizzo di rete (URL) [dove trovare il servizio] </li></ul></ul></ul><ul><ul><li>Service: fornitore di servizi concreto formato da un insieme di port </li></ul></ul>
    35. 35. Struttura di un documento WSDL <ul><li><definitions> </li></ul><ul><ul><li><types> </li></ul></ul><ul><ul><li>i tipi di dati che verranno trasmessi </li></ul></ul><ul><ul><li></types> </li></ul></ul><ul><ul><li><message> </li></ul></ul><ul><ul><li>i messaggi scambiati </li></ul></ul><ul><ul><li></message> </li></ul></ul><ul><ul><li><portType> </li></ul></ul><ul><ul><li>le operazioni (funzioni) supportate </li></ul></ul><ul><ul><li></portType> </li></ul></ul><ul><ul><li><binding> </li></ul></ul><ul><ul><li>come si scambiano i messaggi (dettagli SOAP) </li></ul></ul><ul><ul><li></binding> </li></ul></ul><ul><ul><li><service> </li></ul></ul><ul><ul><ul><li>dove trovare il servizio </li></ul></ul></ul><ul><ul><li></service> </li></ul></ul><ul><li></definitions> </li></ul>
    36. 36. Tipi di operazioni WSDL <ul><li>Un’operazione ( operation ) può essere: </li></ul><ul><li>one-way :il service riceve un messaggio (input message) </li></ul><ul><li>request-response : il service riceve una richiesta(input message) e restituisce la risposta relativa(output message) </li></ul><ul><li>solicit-response : il service invia un messaggio (output message) e riceve una risposta (input message) </li></ul><ul><li>notification : il servizio invia un messaggio (output message) </li></ul>
    37. 37. Asincronismo delle operazioni <ul><li>L’operation è l’unità di interazione elementare con un Web service, ed è eseguita attraverso lo scambio di messaggi. </li></ul><ul><li>Convenzionalmente: </li></ul><ul><ul><li>input messages: inviati dall’utilizzatore al Service </li></ul></ul><ul><ul><li>output messages : messaggi inviati dal Service. </li></ul></ul><ul><li>L’interazione con i Web Services può essere asincrona. Scambi asincroni possono verificarsi all’interno di una operazione a due messaggi, oppure tra due operazioni a messaggio singolo </li></ul><ul><li>Nel caso di operazioni binarie asincrone su protocolli sincroni (es: HTTP) l’implementazione deve occuparsi della correlazione dei messaggi: p.e. usando SOAP header di tipo “reply-to” </li></ul>
    38. 38. Esempio (parte 1) <ul><li>< message name=”getTranslationRequest”> </li></ul><ul><li><part name=”word” type=”xs:string”/> </li></ul><ul><li></ message > </li></ul><ul><li>< message name=”getTranslationResponse”> </li></ul><ul><li><part name=”value” type=”xs:string”/> </li></ul><ul><li></ message > </li></ul><ul><li>< portType name=”dictionaryService”> < operation name=”getTranslation”> <input message=”getTranslationRequest”/> <output message=”getTranslationResponse”/> </ operation > </li></ul><ul><li>… altre operations... </li></ul><ul><li></ portType > </li></ul>Request-response operation
    39. 39. Esempio (parte 2) – SOAP binding <ul><li>< binding type=”dictionaryService” name=”bind1”> </li></ul><ul><li><soap:binding style=”document” </li></ul><ul><li>transport=”http://schemas.xmlsoap.org/soap/http” /> </li></ul><ul><li><operation> </li></ul><ul><li><soap:operation soapAction=”http://webml.org/getTransl”/> </li></ul><ul><li><input> </li></ul><ul><li><soap:body use=”literal”/> </li></ul><ul><li></input> </li></ul><ul><li><output> </li></ul><ul><li>< soap:body use=&quot;encoded&quot; namespace=&quot;urn:enc-name&quot; encodingStyle=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot;/> </li></ul><ul><li></output> </li></ul><ul><li></operation> </li></ul><ul><li></ binding > </li></ul>Eventuale Tipo di encoding rpc o document riferimento al portType SOAP su HTTP
    40. 40. Esempio (parte 3) - endpoint <ul><li><service name=&quot;dictService&quot;> </li></ul><ul><li><port name=&quot;dictionaryService” binding=&quot;bind1&quot;> </li></ul><ul><li><soap:address </li></ul><ul><li>location=&quot;http://www.dict.com/serv&quot;/> </li></ul><ul><li></port> </li></ul><ul><li></service> </li></ul>PortType Binding End Point
    41. 41. WSDL: un esempio completo (1/2) <ul><li><?xml version=&quot;1.0&quot; ?> </li></ul><ul><li><definitions name=&quot; BabelFishService &quot; xmlns:tns=&quot; http://www.xmethods.net/sd/BabelFishService.wsdl &quot; targetNamespace=&quot; http://www.xmethods.net/sd/BabelFishService.wsdl &quot; xmlns:xsd=&quot; http://www.w3.org/2001/XMLSchema &quot; xmlns:soap=&quot; http://schemas.xmlsoap.org/wsdl/soap/ &quot; xmlns=&quot; http://schemas.xmlsoap.org/wsdl/ &quot;> </li></ul><ul><li>- <message name=&quot; BabelFishRequest &quot;> </li></ul><ul><li>  <part name=&quot; translationmode &quot; type=&quot; xsd:string &quot; /> </li></ul><ul><li>  <part name=&quot; sourcedata &quot; type=&quot; xsd:string &quot; /> </li></ul><ul><li>  </message> </li></ul><ul><li>- <message name=&quot; BabelFishResponse &quot;> </li></ul><ul><li>  <part name=&quot; return &quot; type=&quot; xsd:string &quot; /> </li></ul><ul><li>  </message> </li></ul><ul><li>- <portType name=&quot; BabelFishPortType &quot;> </li></ul><ul><li>- <operation name=&quot; BabelFish &quot;> </li></ul><ul><li>  <input message=&quot; tns:BabelFishRequest &quot; /> </li></ul><ul><li>  <output message=&quot; tns:BabelFishResponse &quot; /> </li></ul><ul><li>  </operation> </li></ul><ul><li>  </portType> </li></ul><ul><li>... </li></ul>
    42. 42. WSDL: un esempio completo (2/2) <ul><li>... </li></ul><ul><li>- <binding name=&quot; BabelFishBinding &quot; type=&quot; tns:BabelFishPortType &quot;> </li></ul><ul><li>  <soap:binding style=&quot; rpc &quot; transport=&quot; http://schemas.xmlsoap.org/soap/http &quot; /> </li></ul><ul><li>- <operation name=&quot; BabelFish &quot;> </li></ul><ul><li>  <soap:operation soapAction=&quot; urn:xmethodsBabelFish#BabelFish &quot; /> </li></ul><ul><li>- <input> </li></ul><ul><li>  <soap:body use=&quot; encoded &quot; namespace=&quot; urn:xmethodsBabelFish &quot; </li></ul><ul><li>encodingStyle=&quot; http://schemas.xmlsoap.org/soap/encoding/ &quot; /> </li></ul><ul><li>  </input> </li></ul><ul><li>- <output> </li></ul><ul><li>  <soap:body use=&quot; encoded &quot; namespace=&quot; urn:xmethodsBabelFish &quot; </li></ul><ul><li>encodingStyle=&quot; http://schemas.xmlsoap.org/soap/encoding/ &quot; /> </li></ul><ul><li>  </output> </li></ul><ul><li>  </operation> </li></ul><ul><li>  </binding> </li></ul><ul><li>- <service name=&quot; BabelFishService &quot;> </li></ul><ul><li>  <documentation> Translates text of up to 5k in length, between a variety of languages. </documentation> </li></ul><ul><li>- <port name=&quot; BabelFishPort &quot; binding=&quot; tns:BabelFishBinding &quot;> </li></ul><ul><li>  <soap:address location=&quot; http://services.xmethods.net:80/perl/soaplite.cgi &quot; /> </li></ul><ul><li>  </port> </li></ul><ul><li>  </service> </li></ul><ul><li>  </definitions> (www.xmethods.com) </li></ul>
    43. 43. Uniform Description, Discovery and Integration <ul><li>Scopo: implementare un catalogo (stile “pagine gialle”) in cui è possibile registrare servizi, per permettere ai potenziali utilizzatori di localizzarli </li></ul><ul><li>UDDI è una specifica ad alto livello di un sistema distribuito (ed eventualmente replicato) di catalogazione di servizi descritti in WSDL </li></ul><ul><li>UDDI non è un servizio di ricerca completo e strutturato </li></ul><ul><li>Un registro UDDI è esso stesso accessibile mediante Web Service </li></ul>
    44. 44. Le informazioni in UDDI <ul><li>Le informazioni memorizzate da UDDI sono: </li></ul><ul><li>businessEntity: gli attori che pubblicano i servizi. Possono anche contenere informazioni per classificare tali attori (lozalizzazione, tipologia di attore e di servizi forniti, …) </li></ul><ul><li>businessService: contenitore di una famiglia di servizi correlati </li></ul><ul><li>bindingTemplate: descrizione tecnica del servizio: ciò che è necessario per connettersi e comunicare con il servizio (url del servizio e uno o più riferimenti a service models) </li></ul><ul><li>Il service model è una descrizione astratta del servizio, che dice cosa fa, qual è la sintassi dei messaggi che accetta, ecc. Non è descritto da UDDI, ma da altri standard </li></ul><ul><li>Una businessEntity può pubblicare molti businessServices, ciascuno dei quali può avere più bindingTemplate </li></ul>
    45. 45. Operazioni in UDDI <ul><li>UDDI consente di: </li></ul><ul><li>Registrare (una businessEntity , contenente businessServices , ecc.); una chiave univoca viene assegnata e la sottomissione è replicata su tutti i registri UDDI. </li></ul><ul><li>Cercare , cioè effettuare interrogazioni sulle descrizioni UDDI di servizi, secondo i criteri di ricerca specificati. Il risultato è l’insieme delle chiavi dei servizi corrispondenti </li></ul><ul><li>Recuperare i dati di un preciso servizio/ entità/ binding di cui è nota la chiave. </li></ul>
    46. 46. UDDI implementations <ul><li>Per garantire l’accesso ai registri UDDI da ogni piattaforma, le directory UDDI espongono un insieme di API sotto forma di Web services basati su SOAP. </li></ul><ul><li>Attualmente i servizi UDDI sono forniti solo pochi providers: </li></ul><ul><ul><li>IBM </li></ul></ul><ul><ul><li>Microsoft </li></ul></ul><ul><ul><li>Xmethods </li></ul></ul><ul><ul><li>SAP </li></ul></ul>
    47. 47. UDDI Registries + client <ul><li>http://uddi.ibm.com/ </li></ul><ul><li>http://uddi.microsoft.com/ </li></ul><ul><li>http://uddi.sap.com/ </li></ul><ul><li>http://www.ntt.com/uddi/ </li></ul><ul><li>Client: http://soapclient.com </li></ul>
    48. 48. UDDI Query find_binding : Used to locate specific bindings within a registered businessService.  Returns a bindingDetail message. find_business : Used to locate information about one or more businesses.  Returns a businessList message. find_relatedBusinesses : Used to locate information about businessEntity registrations that are related to a specific business entity whose key is passed in the inquiry.  The Related Businesses feature is used to manage registration of business units and subsequently relate them based on organizational hierarchies or business partner relationships.  Returns a relatedBusinessesList message. find_service : Used to locate specific services within a registered businessEntity.  Returns a serviceList message. find_tModel : Used to locate one or more tModel ( technical fingerprint of a particular software interface ) information structures.  Returns a tModelList structure. get_bindingDetail : Used to get full bindingTemplate information suitable for making one or more service requests.  Returns a bindingDetail message. get_businessDetail : Used to get the full businessEntity information for one or more businesses or organizations.  Returns a businessDetail message. get_businessDetailExt : Used to get extended businessEntity information.  Returns a businessDetailExt message. get_serviceDetail : Used to get full details for a given set of registered businessService data.  Returns a serviceDetail message. get_tModelDetail : Used to get full details for a given set of registered tModel data.  Returns a tModelDetail message.
    49. 49. Esempio UDDI - request <ul><li><Envelope> </li></ul><ul><ul><li><Body> </li></ul></ul><ul><ul><ul><li><find_business generic=&quot;1.0&quot; maxRows=&quot;100&quot;> </li></ul></ul></ul><ul><ul><ul><ul><li><findQualifiers/> </li></ul></ul></ul></ul><ul><ul><ul><ul><li><name>google</name> </li></ul></ul></ul></ul><ul><ul><ul><li></find_business> </li></ul></ul></ul><ul><ul><li></Body> </li></ul></ul><ul><li></Envelope> </li></ul>
    50. 50. Esempio UDDI - response <ul><li><soap:Envelope> </li></ul><ul><ul><li><soap:Body> </li></ul></ul><ul><ul><ul><li><businessList generic=&quot;1.0&quot; operator=&quot;Microsoft Corporation&quot; truncated=&quot;false&quot;> </li></ul></ul></ul><ul><ul><ul><ul><li><businessInfos> </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li><businessInfo businessKey=&quot;824f69e0-6f23-11d7-b2e8-000629dc0a53&quot;> </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li><name>GoogleWebService</name> </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li><description xml:lang=&quot;en&quot;>service for Discovery base on Web services</description> </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li><serviceInfos/> </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li></businessInfo> </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li></businessInfos> </li></ul></ul></ul></ul><ul><ul><ul><li></businessList> </li></ul></ul></ul><ul><ul><li></soap:Body> </li></ul></ul><ul><li></soap:Envelope> </li></ul>
    51. 51. Riferimenti <ul><li>S tandard (obbligatori) : </li></ul><ul><ul><li>SOAP www.w3.org/TR/ soap </li></ul></ul><ul><ul><li>WSDL www.w3.org/TR/wsdl </li></ul></ul><ul><ul><li>UDDI www. uddi .org/specification.html </li></ul></ul><ul><li>SOAP: Henri Bequet “Professional Java SOAP” Cap. 2 http://www.perfectxml.com/SOAPIntro.asp#chap </li></ul><ul><li>WSDL: Ethan Cerami “Web Service Essentials” Cap. 6 http://www.oreilly.com/catalog/webservess/chapter/ch06.html </li></ul><ul><li>http://soapclient.com </li></ul>
    52. 52. Altre fonti <ul><li>www.w3c.org </li></ul><ul><li>www.sun.com </li></ul><ul><li>http://otn.oracle.com/tech/webservices </li></ul><ul><li>http://www.onjava.com </li></ul><ul><li>http://uddi.org </li></ul>
    53. 53. Grazie <ul><li>Per commenti potete scrivere a: </li></ul><ul><ul><li>Marco Brambilla </li></ul></ul><ul><ul><li>Politecnico di Milano </li></ul></ul><ul><ul><li>Dipartimento di Elettronica e Informazione </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul>http://home.dei.polimi.it/mbrambil http://twitter.com/MarcoBrambi http://www.slideshare.net/mbrambil

    ×