Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » SQL Anywhere-Webdienste

 

SOAP- und DISH-Webdienste erstellen

SOAP- und DISH-Webdienste bieten Ihnen die Möglichkeit, Standard-SOAP-Webdienste zu erstellen, auf die von Standard-SOAP-Clients zugegriffen werden kann, die beispielsweise mit Microsoft .NET oder JAX-WS entwickelt wurden.

SOAP-Dienste

SOAP-Dienste sind Mechanismen zum Erstellen von Webdiensten in SQL Anywhere, die Standard-SOAP-Anforderungen annehmen und verarbeiten.

Um einen SOAP-Dienst zu deklarieren, geben Sie als Typ des Dienstes SOAP an. Der Hauptteil einer Standard-SOAP-Anforderung ist ein SOAP-Rahmen, d.h. ein XML-Dokument mit einem bestimmten Format. SQL Anywhere führt eine syntaktische Analyse dieser Anforderungen durch und verarbeitet sie, wobei von Ihnen gelieferte Prozeduren verwendet werden. Die Antwort wird automatisch als Standard-SOAP-Antwort formatiert, die auch ein SAOP-Rahmen ist, und an den Client zurückgegeben.

Die Syntax der Anweisung, mit der SOAP-Dienste erstellt werden, sieht folgendermaßen aus:

CREATE SERVICE Dienstname
TYPE 'SOAP'
[ FORMAT { 'DNET' | 'CONCRETE' | 'XML' | NULL } ]
[ Gemeinsame_Attribute ]
AS Anweisung
DISH-Dienste

DISH-Dienste agieren als Proxys für Gruppen von SOAP-Diensten. Überdies erstellen sie automatisch WSDL-Dokumente (Web Services Description Language) für ihre Clients, die die SOAP-Dienste beschreiben, die sie derzeit vorlegen.

Wenn Sie einen DISH-Dienst erstellen, legt der in der GROUP-Klausel angegebene Name fest, welche SOAP-Dienste vom DISH-Dienst vorgelegt werden. Jeder SOAP-Dienst, dessen Name ein Präfix mit dem Namen des DISH-Dienstes hat, wird vorgelegt. Beispiel: Die Angabe von "GROUP xyz" legt die SOAP-Dienste xyz/aaaa, xyz/bbbb bzw. xyz/cccc vor. Die SOAP-Dienste abc/aaaa oder xyzaaaa werden nicht vorgelegt. SOAP-Dienste können durch mehr als einen DISH-Dienst vorgelegt werden. Wenn kein Gruppenname angegeben ist, legt der DISH-Dienst alle SOAP-Dienste in der Datenbank vor. In DISH-Gruppennamen sind dieselben Zeichen wie in SOAP-Dienstnamen zulässig.

Die Syntax der Anweisung, mit der DISH-Dienste erstellt werden, sieht folgendermaßen aus:

CREATE SERVICE Dienstname
TYPE 'DISH'
[ GROUP { Gruppenname | NULL } ]
[ FORMAT { 'DNET' | 'CONCRETE' | 'XML' | NULL } ]
[ Gemeinsame_Attribute ]
Formate von SOAP- und DISH-Diensten

Die FORMAT-Klausel der CREATE SERVICE-Anweisung passt die Inhaltsdaten des SOAP-Diensts an, damit sie zu den verschiedenen Typen von SOAP-Clients wie .NET und JAX-WS passen. Die FORMAT-Klausel wirkt sich auf den Inhalt des vom DISH-Dienst zurückgegebenen WSDL-Dokuments und auf das Format der von SOAP-Antworten zurückgegebenen Datenladungen aus.

Das Standardformat DNET ist ein natives Format für die Verwendung mit .NET SOAP-Clientanwendungen, die ein .NET DataSet-Format erwarten.

Das CONCRETE-Format ist für die Verwendung mit Clients wie JAX-WS und .NET vorgesehen, die auf dem Format der zurückgegebenen Datenstrukturen basierende Schnittstellen automatisch generieren. Wenn Sie dieses Format angeben, legt ein von SQL Anywhere zurückgegebenes WSDL-Dokument ein SimpleDataset-Element vor, das eine Ergebnismenge in konkreten Ausdrücken beschreibt. Dieses Element ist eine Begrenzungshierarchie von einer Zeilenmenge, die aus einem Array von Zeilen besteht, von denen jede ein Array von Spaltenelementen enthält.

Das XML-Format ist für die Verwendung mit SOAP-Clients vorgesehen, die die SOAP-Antwort als eine lange Zeichenfolge akzeptieren und einen XML-Parser verwenden, um die erforderlichen Elemente und Werte zu lokalisieren und zu extrahieren. Dieses Format ist im Allgemeinen das portierbarste zwischen verschiedenen Typen von SOAP-Clients.

Wenn das Format eines SOAP-Dienstes nicht angegeben ist, wird das Format von der DISH-Dienstdeklaration des Dienstes übernommen. Wenn der DISH-Dienst ebenfalls kein Format deklariert, wird standardmäßig DNET genommen, was mit .NET-Clients kompatibel ist. Ein SOAP-Dienst, der kein Format deklariert, kann mit verschiedenen Typen von SOAP-Clients verwendet werden, indem mehrere DISH-Dienste definiert werden, von denen jeder einen anderen FORMAT-Typ hat.

Homogene DISH-Dienste erstellen

SOAP-Dienste müssen keinen Formattyp angeben, d.h. dass Sie den Formattyp auf NULL setzen können. In diesem Fall wird das Format von den DISH-Diensten geerbt, die als Proxys für sie agieren. Mehr als ein DISH-Dienst kann als Proxy für die einzelnen SOAP-Dienste handeln, und diese DISH-Dienste müssen nicht vom selben Typ sein. Dadurch ist es möglich, einen einzigen SOAP-Dienst mit verschiedenen Typen von SOAP-Clients wie .NET und JAX-WS zu verwenden, indem mehrere DISH-Dienste mit jeweils unterschiedlichem Typ eingesetzt werden. Solche DISH-Dienste werden homogen genannt, weil sie dieselben Datenladungen für dieselben SOAP-Dienste vorlegen, allerdings in unterschiedlichen Formaten.

Nehmen wir zum Beispiel die folgenden SOAP-Dienste, beide ohne Formatangabe:

CREATE SERVICE "abc/hello"
TYPE 'SOAP'
AS CALL hello(:student);
CREATE SERVICE "abc/goodbye"
TYPE 'SOAP'
AS CALL goodbye(:student);

Da keiner dieser Dienste eine FORMAT-Klausel enthält, ist das Format standardmäßig NULL. Es wird vom DISH-Dienst abgeleitet, der als Proxy agiert. Im folgenden Beispiel werden zwei DISH-Dienste festgelegt:

CREATE SERVICE "abc_xml"
TYPE 'DISH'
GROUP "abc"
FORMAT 'XML';
CREATE SERVICE "abc_concrete"
TYPE 'DISH'
GROUP "abc"
FORMAT 'CONCRETE';

Da beide DISH-Dienste denselben Gruppennamen "abc" festlegen, agieren sie als Proxys für dieselben SOAP-Dienste, nämlich für alle SOAP-Dienste, deren Namen das Präfix "abc/" haben.

Wenn allerdings auf einen der zwei SOAP-Dienste über den abc_xml-DISH-Dienst zugegriffen wird, erbt der SOAP-Dienst das XML-Format. Wenn über den abc_concrete-SOAP-Dienst zugegriffen wird, erbt der SOAP-Dienst das CONCRETE-Format.

Homogene DISH-Dienste bieten die Möglichkeit, eine Verdoppelung von Diensten zu vermeiden, wenn Sie verschiedene Typen von SOAP-Clients Zugriff auf die von Ihnen erstellten SOAP-Webdienste gewähren wollen.