next up previous contents
Nächste Seite: 3 Implementierungsumgebung Aufwärts: 2 Kommunikation in verteilten Vorherige Seite: 4 HTTP   Inhalt

5 XML-RPC

XML-RPC erweitert HTTP um eine einheitliche Darstellungsschicht für die Anwendungsdaten. Es existieren momentan zwei verschiedene Hauptrichtungen von XML-DTDs (eXtensible Markup Language-Document Type Definition)XMLeXtensible Markup LanguageDTDDocument Type Definitionfür XML-RPC: SOAP (Simple Object Access Protocol SOAPSimple Object Access Protocol[17] und XML-RPC [40] im engeren Sinne. Erstere ist ein wenig neuer und verwendet XML-Namensräume, während letztere einfachere Tags verwendet. Des Weiteren wird bei SOAP der Name der aufzurufenden Methode zusätzlich im HTTP-Header übertragen. Beide Standards bilden Objekte auf Strukturen ab, was für die Entwicklung einer objektorientierten Anwendung nicht von Vorteil ist. Eine Lösung für dieses Problem wird in 4.2 vorgestellt. Außerdem dürfen bei der Codierung im XML-RPC-Format nur Zeichenketten als Schlüsselwerte für Dictionaries verwendet werden sowie keine mehrfach referenzierten Objekte serialisiert werden8.

In Bild 9 bzw. 10 sieht man die Codierung eines Aufrufes der Methode callThisMethod mit folgenden Parametern:

Abbildung 9: XML-RPC-Codierung
<?xml version='1.0'?>
<methodCall>
<methodName>callThisMethod</methodName>
<params>
<param>
<value><string>aaa</string></value>
</param>
<param>
<value><int>1234</int></value>
</param>
<param>
<value><double>56.78</double></value>
</param>
<param>
<value><array><data>
<value><string>a</string></value>
<value><int>2</int></value>
<value><string>c</string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><int>12</int></value>
<value><int>34</int></value>
<value><int>56</int></value>
</data></array></value>
</param>
<param>
<value><struct>
<member>
<name>3</name>
<value><int>4</int></value>
</member>
<member>
<name>1</name>
<value><int>2</int></value>
</member>
</struct></value>
</param>
</params>
</methodCall>

Abbildung 10: SOAP-Codierung
<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'
  xmlns:enc='http://schexas.xmlsoap.org/soap/encoding/'
  xmlns:lab='http://www.pythonware.com/soap/'
  xmlns:xsd='http://www.w3.org/1999/XMLSchexa/'
  xmlns:xsi='http://www.w3.org/1999/XMLSchexa/instance/'
  env:encodingStyle='http://schexas.xmlsoap.org/soap/encoding/'>
<env:Body>
<callThisMethod>
<v.1 xsi:type='xsd:string'>aaa</v.1>
<v.2 xsi:type='xsd:int'>1234</v.2>
<v.3 xsi:type='xsd:double'>56.78</v.3>
<v.4 enc:arrayType='xsd:ur-type[3]'>
<v xsi:type='xsd:string'>a</v>
<v xsi:type='xsd:int'>2</v>
<v xsi:type='xsd:string'>c</v>
</v.4>
<v.5 enc:arrayType='xsd:ur-type[3]'>
<v xsi:type='xsd:int'>12</v>
<v xsi:type='xsd:int'>34</v>
<v xsi:type='xsd:int'>56</v>
</v.5>
<v.6 xsi:type='lab:PythonDict'>
<k xsi:type='xsd:string'>3</k>
<v xsi:type='xsd:int'>4</v>
<k xsi:type='xsd:string'>1</k>
<v xsi:type='xsd:int'>2</v>
</v.6>
</callThisMethod>
</env:Body>
</env:Envelope>

Die restlichen Eigenschaften werden durch die darunter liegende HTTP-Implementierung bestimmt.

Ein großer Vorteil von XML-RPC ist die leichte Implementierbarkeit in vielen Sprachen. Dies wird allerdings mit Geschwindigkeitseinbußen bezahlt. In Systemen, bei denen der Kommunikationsanteil aber nicht sehr hoch ist, spielt dieser Nachteil keine große Rolle. Stattdessen kann der Entwickler von der Portabilität und Flexibilität profitieren.

Auch für XML-RPC gilt, dass echte Transparenz nur dann möglich ist, wenn auf einer Metaebene die Methodenaufrufe abgefangen werden, um diese über die Netzverbindung zu entfernten Rechnern zu leiten. Wenn dies der Fall ist, so kann man ohne IDLs auskommen und schnell einsatzfähige Anwendungsprototypen realisieren.



Fußnoten

... werden8
SOAP spricht hingegen von multi-reference Values.

next up previous contents
Nächste Seite: 3 Implementierungsumgebung Aufwärts: 2 Kommunikation in verteilten Vorherige Seite: 4 HTTP   Inhalt
Chris Huebsch 2001-12-11