Neue Produktivität durch Web Services
RPC, WSDL und SOAP
Neue Technologien im Internet – Seminar WS 2003 / 2004
Hendrik Jander
Thomas Puhl
Friedrich-Schiller-Universität Jena
Institut für Informatik
Motivation
?
Wie kommt meine
Applikation an die
Google-Ergebnisse ???
Nimm doch die GoogleWeb Services !!!
!
Inhalt
Verteilte Systeme
RPC
Middleware
Web Services
SOAP
WSDL
UDDI
Implementierung .NET & Sun ONE
Zusammenfassung & Ausblick
Verteilte Systeme
Ressourcen/Anwendungen kommunizieren über Netzwerk
Motivation: gemeinsame, effiziente Ressourcennutzung
Probleme
Heterogenität (Prozessorarchitektur, OS)
Nebenläufigkeit
getrennte Speicher
Eigenschaften
lose Kopplung der Systemkomponenten
Datenaustausch nur durch Nachrichtenversand möglich
Dynamik
Fehlertoleranz durch Redundanz erreichbar
Interaktion der Anwendungen soll transparent erfolgen
Æ RPC
Verteilte Systeme - RPC
Remote Procedure Call
Prozedur auf entferntem Rechner ausgeführt
Stub bildet Signatur der entfernten Prozedur lokal ab
verhält sich wie lokale Prozedur
gewährleistet Transparenz für Anwender
Probleme
unterschiedliche Datendarstellung der Systeme
Time-Out
Call-by-Value vs. Call-by-Reference
Verteilte Systeme - RPC
Client
Stub
Betriebssystem/
Laufzeitumgebung
Client−
prozess
Betriebssystem/
Laufzeitumgebung
Server
Skeleton
Stub/Skeleton
Konvertierung der Datenformate
Nachrichtenerzeugung
Marshalling/Unmarshalling der Parameter
OS/Laufzeitumgebung
Kommunikation mit Remote-Host
Übertragung der Nachrichten
Server−
prozess
Middleware
Softwarekomponenten zur Realisierung von verteilten Systemen
kapselt (O)RPC – Prinzip
zwischen Netzwerk - und Anwendungsschicht
gewährleistet Orts – und Verteilungstransparenz
Kombination aus Standards und Laufzeitumgebung
Standards: Serialisierung & Transport
Laufzeitumgebung: Umsetzung der standardisierten
Kommunikation
bei verteilten Objektsystemen: Objektverwaltung notwendig
Middleware - Lösungen
CORBA – Common Object Request Broker Architecture
Standard von OMG spezifiziert
herstellerunabhängig
sprach – und plattformunabhängig
Java RMI – Remote Method Invocation
inhärent plattformunabhängig
Nur für Java – Komponenten
DCOM – Distributed Component Object Model
Weiterentwicklung von COM für Netzwerke
Keine Lösung konnte sich vollständig durchsetzen
wegen Sprach-, Plattform-, Herstellerabhängigkeit
Æ Web Service sind neuester Ansatz zu Realisierung von MW
Inhalt
Verteilte Systeme
RPC
Middleware
Web Services
SOAP
WSDL
UDDI
Implementierung .NET & Sun ONE
Zusammenfassung & Ausblick
Web Services
Softwarekomponente stellt Funktionalität über
Standardinternetprotokolle zur Verfügung
historisch aus den Erfahrungen und Protokollen des
verteilten Programmierens entstanden
Nutzung etablierter und standardisierter Internetstandards
W3C, OASIS, IETF
XML–basiert
W3C schlägt Web Service–Architektur vor
Web Services Architektur
Base Technologies: XML, DTD, Schema
Komposition von
Geschäftsprozessen
Processes
Discovery, Aggregation, Choreography ...
Security
Messages
SOAP Extensions
Reliability, Correlation, Transactions, ...
Generierung der Stubs
Management
Descriptions
Web−Service Description (WSDL)
Nachrichtenaustausch
SOAP
Communications
HTTP, SMTP, FTP, ...
Transport
SOAP
Simple Object Access Protocol
XML-basiertes Protokoll zum Verpacken von Nachrichten
ermöglicht Austausch typisierter Daten in verteiltem Umfeld
Austausch unabhängig von Betriebssystem und
Programmiersprache
ursprünglich 1998 von Microsoft entwickelt
Entwicklung seit 2000 durch W3C koordiniert
liegt heute in Version 1.2 vor
SOAP - Nachrichtenaufbau
SOAP-Nachricht ist einfaches XML-Dokument
Envelope
Header
Header Block
Body
Fault
Envelope definiert Umschlag, der
Nachricht beinhaltet
Header gestattet Informationen
zu übertragen, die nicht direkt mit
Inhalt verknüpft sind
Body enthält eigentliche Nachricht
Header und Body können bel.
wohlgeformten XML-Code enthalten
auftretende Fehler werden durch Fault-Elemente beschrieben
bel. Codierungsstile können zur Codierung der Daten verwendet
werden
SOAP - Nachrichtenaufbau
<SOAP:Envelope
xmlns:SOAP="http://www.w3.org/2003/05/soap-envelope">
<SOAP:Header>
<ns1:headerBlock1 xmlns:ns1="http://www.example.org/ns1">
...
</ns1:headerBlock1>
<ns2:headerBlock2 xmlns:ns2="http://www.example.org/ns2">
...
</ns2:headerBlock2>
</SOAP:Header>
<SOAP:Body>
<xyz:message xmlns:xyz="http://www.xyz.net">
...
</xyz:message>
</SOAP:Body>
</SOAP:Envelope>
SOAP - Verarbeitung
Nachrichtenversand erfolgt entlang SOAP-Nodes im
Nachrichtenpfad (Message Path)
Absender
"initial sender"
Empfänger
"ultimate receiver"
"intermediary"
"intermediary"
Absender = initial sender, Empfänger = ultimate receiver,
(optionale) zwischengeschaltete Knoten = intermediary
intermediary fügen Transaktion weitere Funktionalitäten hinzu
keine Standardmethode zur Pfadkonstruktion definiert !!!
SOAP - Verarbeitung
Nachricht durchläuft nacheinander alle Knoten
Knoten untersuchen, verändern und/oder löschen Headerblöcke
oder fügen neue hinzu
Fault wird erzeugt, falls Fehler bei Verarbeitung auftritt
optionale Attribute beschreiben Headerblöcke
role: bestimmt Rolle, die Block „spielt“ Æ durch Knoten
bearbeitet, die gegebene Rolle unterstützen/verstehen
mustUnderstand: gibt an, ob Block durch Knoten verarbeitet
werden muß
relay: gibt an, ob Block bei Nichtverarbeitung an nächsten
Knoten weitergeleitet werden muß
SOAP - Verarbeitung
<Envelope>
<Header>
<firstBlock role="http://www.w3.org/2003/05/soapenvelope/role/next">
...
</firstBlock>
<secondBlock role="http://www.example.org/log"
mustUnderstand="true">
...
</secondBlock>
<thirdBlock relay="true">
...
</thirdBlock>
</Header>
<Body>...</Body>
</Envelope>
SOAP - Kommunikationsmuster
Kommunikationsmuster (Message Exchange Patterns)
Beschreibt Ablauf der Kommunikation zweier Partner,
Beziehung der ausgetauschten Nachrichten zueinander und
reguläres und irreguläres Ende der Interaktion
verschiedene Muster durch Standard definiert; es lassen sich aber
beliebige Muster definieren
Request/Response-Muster
besteht aus zwei SOAP-Nachrichten (Anfrage & Antwort)
Response-Muster
besteht ebenfalls aus zwei Nachrichten, wobei aber nur die
Antwort als SOAP-Nachricht verpackt wird
SOAP - RPC
SOAP bietet Möglichkeit für XML-basierten RPC (SOAP-RPC)
Anfrage & Antwort werden als SOAP-Nachrichten versendet,
deren Format gewissen Vorgaben folgt
Anfrage:
XML-Konstrukt, dessen Wurzelement der Name der
aufzurufenden Funktion ist
darin sind alle Aufrufparameter enthalten
Antwort:
Name der Wurzelelements besteht aus Name der Funktion +
Zusatz „Response“ (per Konvention)
enthält alle Rückgabewerte
SOAP - RPC
<Envelope>
<Body>
<doSpellingSuggestion>
<key>00000000000000000000000000000000</key>
<phrase>britney speers</phrase>
</doSpellingSuggestion>
</Body>
</Envelope>
<Envelope>
<Body>
<doSpellingSuggestionResponse>
<return>britney spears</return>
</doSpellingSuggestionResponse>
</Body>
</Envelope>
SOAP - Transport
SOAP setzt auf Netzwerk- und Transportschichten auf
Æ flexibel bzgl. Ort und Art des Einsatzes
HTTP, HTTPS, FTP, TCP, SMTP, POP3, Jabber, ...
POST /search/beta2 HTTP/1.1
Host: api.google.com
Content-Type: application/soap+xml; charset="utf-8"
Content-Length: ???
SOAPAction: "urn:GoogleSearch#doSpellingSuggestion"
<?xml version="1.0" ?>
<SOAP:Envelope xmlns:SOAP="...">
...
</SOAP:Envelope>
WSDL
Web Service Description Language
WSDL zur Generierung der Stubs
Teilaspekte werden getrennt standardisiert
die 3 Teile des Standards:
Core Language
(Strukturierungselemente der Sprache)
Message Exchange Patterns
(Kardinalität & Sequenz der Nachrichten)
Bindings
(Serialisierung und Transport )
WSDL - Dokumentstruktur
definitions
types
interface
operation
input
output
infault
outfault
operation
input
output
infault
outfault
endpoint
öffnet und definiert Namensräume
Unterscheidung zwischen abstrakten
und konkreten Elementen
binding
service
definitions ist das Wurzelelement
konkrete Elemente referenzieren jeweils
abstrakte Elemente
WSDL - Types
definiert die im Dokument verwendeten Typen
i.d.R. Nutzung von XML Schema Definition (XSD)
primitive oder komplexe Datentypen möglich
<types>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:GoogleSearch">
<xsd:complexType name="GoogleSearchResult">
<xsd:all>
<xsd:element name="estimateIsExact"
type="xsd:boolean"/>
...
</xsd:all>
</xsd:complexType>
</xsd:schema>
</types>
WSDL - Interface
beschreibt abstrakt die Schnittstelle des Web Service
definiert Menge von Operationen
Operationen sind Mengen von Nachrichten
Nachrichten werden per XML Schema definiert
Vererbung ist möglich
<interface name="GoogleSearch">
<operation name="doGoogleSearch"
pattern="http://www.w3.org/2003/11/wsdl/in-out">
<input message="ns:doGoogleSearch"
messageReference="A" />
<output message="ns:doGoogleSearchResponse"
messageReference="B" />
</operation>
...
</interface>
WSDL - Binding
definieren Transport - und Serialisierungsdetails
referenzieren ein Interface
sind Container für Elemente der Binding Spezifikation
<binding name=„GoogleSearchBinding" interface=„GoogleSearch">
...
<operation name=„doGoogleSearch">
...
<input messageReference="A">...</input>
<output messageReference="B">...</output>
</operation>
...
</binding>
WSDL – Service
definiert mögliche Adressen eines Services
endpoint Elemente spezifizieren jeweils eine Adresse
beinhaltet Elemente aus der Binding-Spezifikation
<service name="GoogleSearchService" interface="GoogleSearch">
<endpoint name="GoogleSearchEndPoint"
binding="GoogleSearchBinding">
...
</endpoint>
...
</service>
WSDL - Kommunikationsmuster
Kommunikationsmuster (Message Exchange Pattern)
definieren Kardinalität und Sequenz der ausgetauschten
Nachrichten
In-Only, Robust In-Only, In-Out, In-Multi-Out, Out-Only,
Robust Out-Only, Out-In, Asynchronous Out-In, Out-Multi-In
Rollen der Nachrichten werden durch Großbuchstaben (A, B, …)
bezeichnet
Möglichkeiten der verwendeten Protokolle müssen beachtet
werden
WSDL – Binding Spezifikation
erweitern Standard
Details zu Transport
Codierung der Parameter
notwendig, um Stubs zu generieren
werden vom W3C für SOAP und HTTP exemplarisch definiert
andere möglich (z.B. Apache Group für EJB´s, Java Klassen ...)
Æ Clientbibliotheken müssen Bindings unterstützen
WSDL - Binding
<binding name="GoogleSearchBinding" type="ns:GoogleSearchPort">
<soap:binding transport="URI:http" style="rpc" />
<operation name="doGetCachedPage">
<soap:operation soapAction="urn:GoogleSearchAction" />
<input>
<soap:body namespace="urn:GoogleSearch"
encodingStyle="URI:encoding" />
</input>
<output>...</output>
</operation>
</binding>
<service name="GoogleSearchService">
<endpoint name="GoogleSearchEndPoint"
binding="s0:GoogleSearchBinding">
<soap:address
location="http://api.google.com/search/beta2" />
</endpoint>
</service>
UDDI
Universal Description, Discovery and Integration
Klassifizieren, Katalogisieren und Verwalten von Daten und
Metadaten über Dienste
ermöglicht Auffinden von Diensten nach bestimmten Kriterien
anhand allgemeiner, abstrakter Schnittstellenbeschreibung
nach Geschäftskategorien
Suche mittels Schlüsselworten
UDDI nicht ausschließlich für Web Services nutzbar !!!
entstand aus Initiative von IBM, Microsoft, SAP, Oracle u.a.
heute durch OASIS koordiniert (UDDIv3)
UDDI - Datenstrukturen
Standard definiert nur logische Komponenten (keine Impl.)
vier Basisstrukturen, die als XML-Dokumente gespeichert werden
UDDI−Registry
businessEntity
businessService
bindingTemplate
tModel
Adresse des
Web−Service
unterteilt in
allg. Unternehmens- und Servicedaten
technische Daten zu den Web Services
Spezifikation
des Models
UDDI - Datenstrukturen
businessEntity enthält Unternehmens- und Web ServiceBeschreibung
Name und Beschreibung des Unternehmens
Anschrift, Kontaktinformationen, ...
businessService repräsentiert logische Gruppierung von Web
Services eines Unternehmens
keine technische Informationen zu Service !!!
Name, Beschreibung und genereller Zweck des Services
Einordnung in Geschäftskategorien
UDDI - Datenstrukturen
bindingTemplate beinhaltet technische Informationen
beinhaltet Lage und evt. weitere Metadaten des Services
für einen Service lassen sich mehrere Templates erstellen
tModel repräsentiert eindeutige Spezifikation
kann beliebige Spezifikation, Protokoll, Namensraum, ... sein
Æ nicht zwangsläufig an WSDL-Dokument gebunden !!!
besitzen eindeutigen Schlüssel und verweisen auf Dokumente,
die Model spezifizieren
Templates verweisen auf alle Models, die Service beschreiben
Æ z.B. WSDL-Dokument, verwendete Transportprotokolle, ...
UDDI - Datenstrukturen
<businessService>
...
<bindingTemplates>
...
<bindingTemplate>
<accessPoint urlType="http">...</accessPoint>
<tModelnstanceDetails>
<tModelnstanceInfo tModelKey="...">
...
</tModelnstanceInfo>
...
</tModelnstanceDetails>
...
</bindingTemplate>
...
</bindingTemplates>
</businessService>
UDDI - Informationsarten
UDDI-Registry enthält drei Arten von Informationen
White Pages (businessEntity)
Informationen über Unternehmen selbst
Yellow Pages (businessService)
entsprechen Branchenbuch
beschreiben Dienste nach Geschäftskategorien
Green Pages (bindingTemplate & tModel)
technische Informationen zu Diensten
UDDI - Nutzung
UDDI definiert verschiedene SOAP-basierte APIs zur
Kommunikation mit Registries
Æ UDDI-Registry ist Sammlung von Web Services zum
Veröffentlichen und Auffinden von Web Services
Publisher API
für Dienst-Anbieter
Methoden zum Registrieren und Verwalten von Diensten
Inquiry API
für Dienst-Nutzer
Auffinden von Diensten nach bestimmten Suchkriterien
Zusammenwirken
UDDI−Registry
V
n
er
de
öf
in
fe
/F
nt
en
lic
ch
he
n
Su
WSDL
Web−Service
Anbieter
Binden
Web−Service
Nutzer
Bindung
zwei mögliche Szenarien
statische Bindung
geschieht zur Entwicklungszeit
Stub wird fest codiert und in Applikation eingebunden
dynamische Bindung
zur Laufzeit
Service wird von Applikation gesucht (via UDDI)
Stub wird automatisch aus Beschreibung erzeugt und
eingebunden
wird als Standardverfahren für Web Services angesehen
Anwendungen
B2B – Business to Business
WS geeignet für Maschine-zu-Maschine Kommunikation
komplexe Geschäftsprozesse aus Web Services
Enterprise Application Integration
Investitionsschutz für große Unternehmen
Wrapper Web Service um Altanwendung
Application Service Providing
Trennung der Applikations – und Präsenattionsebene
Kunde erhält nur Präsentationsclient
Logik und Daten auf dem Server
Inhalt
Verteilte Systeme
RPC
Middleware
Web Services
SOAP
WSDL
UDDI
Implementierung .NET & Sun ONE
Zusammenfassung & Ausblick
Implementierungen – .NET
Microsofts neue Produktstrategie
neue Architektur für Windowsplattformen– und Bibliotheken
besonderer Wert wurde auf XML und Web Services gelegt
interpreter-basierter Ansatz
Interpreter: CLR (Common Language Runtime)
Format: MSIL ( MS Intermediate Language)
Besonderheit:
Alle Microsoft Entwicklungssprachen können genutzt werden
z.B.: VB, C++, JScript, C#
Implementierungen – .NET
Serviceerstellung mit .NET in C#
using System.Web;
using System.Web.Services;
namespace helloWS {
public class MyService : System.Web.Services.WebService {
[WebMethod]
public string HelloWorld() {
return "Hello World";
}
}
}
Implementierungen – .NET
mit wsdl.exe generierter C# - Stub
public class GoogleSearchService :
System.Web.Services.Protocols.SoapHttpClientProtocol {
public GoogleSearchService() {
this.Url = "http://api.google.com/search/beta2";
}
[System.Web.Services.Protocols.SoapRpcMethodAttribute(
"urn:GoogleSearchAction", ResponseNamespace="urn:GoogleSearch")]
[return:
System.Xml.Serialization.SoapElementAttribute("return")]
public String doSpellingSuggestion(
string key, string phrase) {
object[] results = this.Invoke(
"doSpellingSuggestion", new object[] {key, phrase});
return ((String)(results[0]));
}
}
Implementierungen – .NET
Aufruf des Stubs
public class MyServiceClient{
public MyServiceClient(){
GoogleSearchService myGoogleProxy =
new GoogleSearchService();
myGoogleProxy.doSpellingSuggestion(
"00000000000000000000000000000000",
"suchstring");
}
static void Main() {
MyServiceClient mysc = new MyServiceClient();
}
}
Implementierungen – Sun ONE
Sun Open Net Environment
Sun‘s Antwort auf .NET
basiert vollständig auf Java
Sammlung von Werkzeugen und Bibliotheken
Sun ONE Web- und Applicationserver, Sun One Studio
J2SE + J2EE
JAXP, JAXB, JAX-RPC, SAAJ, JAXR
Implementierungen – Sun ONE
Serviceerstellung mit Sun‘s WS Developer Pack
package helloworld;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface HelloWorld extends Remote {
public String helloWorld() throws RemoteException;
}
package helloworld;
public class HelloWorldImpl implements HelloWorld {
public String helloWorld() {
return "Hello World!";
}
}
Implementierungen – Sun ONE
JAX-RPC-basierter Client (Ausschnitt)
ServiceFactory sf = ServiceFactory.newInstance();
Service s = sf.createService(
new URL("http://api.google.com/GoogleSearch.wsdl"),
new QName("urn:GoogleSearch", "GoogleSearchService"));
Call c = s.createCall(
new QName("urn:GoogleSearch", "GoogleSearchPort"),
"doSpellingSuggestion");
Object o = c.invoke(new Object[] {key, phrase});
System.out.println(o);
Inhalt
Verteilte Systeme
RPC
Middleware
Web Services
SOAP
WSDL
UDDI
Implementierung .NET & Sun ONE
Zusammenfassung & Ausblick
Zusammenfassung & Ausblick
Plattform-, Sprach-, Herstellerunabhängig
Æ interoperabel
ABER: langsam aufgrund XML-Basierung
Kernstandards (SOAP, WSDL, UDDI) von Industrie anerkannt und
zahlreiche Implementierungen vorhanden
neue Erweiterungen in Ausblick
Sicherheit & Authentifizierung, Choreographie, Routing, ...
Gefahr durch Vielfalt und Konkurrenz neuer Standards und
Implementierungen (z.B. Microsoft, BEA vs. IBM, SAP, HP)
Æ Verlust der Interoperabilität
Fragen ?