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

 

Rückgabewerte und Ergebnismengen verwenden

Webdienstclientaufrufe können entweder mit gespeicherten Funktionen oder mit gespeicherten Prozeduren durchgeführt werden. Wenn er von einer Funktion gemacht wird, muss der Rückgabetyp der Funktion ein Zeichendatentyp wie CHAR, VARCHAR oder LONG VARCHAR sein. Der zurückgegebene Wert ist der Hauptteil der HTTP-Antwort. Es werden keine Headerinformationen aufgenommen. Zusätzliche Informationen über die Anforderung, einschließlich von HTTP-Statusinformationen, werden von Prozeduren zurückgegeben. Daher sind Prozeduren vorzuziehen, wenn diese zusätzlichen Informationen erwünscht sind.

SOAP-Prozeduren

Die Antwort von einer SOAP-Funktion ist ein XML-Dokument, das die SOAP-Antwort enthält.

Da SOAP-Antworten strukturierte XML-Dokumente sind, versucht SQL Anywhere standardmäßig, diese Informationen zu verwerten und eine sinnvollere Ergebnismenge zu erstellen. Jede der obersten Markierungen innerhalb des zurückgegebenen Antwortdokuments wird extrahiert und als Spaltenname verwendet. Der Inhalt der Verzweigung unter den einzelnen Markierungen wird als Zeilenwert für diese Spalte verwendet.

Beispiel: Bei der unten angeführten SOAP-Antwort würde SQL Anywhere die angezeigte Datenmenge erstellen:

<SOAP-ENV:Envelope
  xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema"
  xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Body>
     <ElizaResponse xmlns:SOAPSDK4="SoapInterop">
        <Eliza>Hi, I'm Eliza. Nice to meet you.</Eliza>
     <ElizaResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Eliza
Hi, I'm Eliza. Nice to meet you.

In diesem Beispiel ist das Antwortdokument durch die ElizaResponse-Markierungen begrenzt, die innerhalb der SOAP-ENV:Body-Markierungen auftreten.

Ergebnismengen haben so viele Spalten wie es oberste Markierungen gibt. Diese Ergebnismenge hat nur eine Spalte, weil es nur eine oberste Markierung in der SOAP-Antwort gibt. Diese einzige oberste Markierung, Eliza, wird zum Namen der Spalte.

XML-Verarbeitungseinrichtungen

Auf Informationen in XML-Ergebnismengen, einschließlich der SOAP-Antworten, kann auch unter Verwendung der integrierten Open XML-Verarbeitungsfähigkeiten zugegriffen werden.

Das folgende Beispiel verwendet die OPENXML-Prozedur, um Teile einer SOAP-Antwort zu extrahieren. Das Beispiel verwendet einen Webdienst, um den Inhalt der SYSWEBSERVICE-Tabelle als einen SOAP-Dienst vorzulegen:

CREATE SERVICE get_webservices
TYPE 'SOAP'
AUTHORIZATION OFF
USER DBA
AS SELECT * FROM SYSWEBSERVICE;

Die folgende gespeicherte Funktion, die in einer zweiten SQL Anywhere-Datenbank erstellt werden muss, gibt einen Aufruf an diesen Webdienst aus. Der Rückgabewert dieser Funktion ist das gesamte SOAP-Antwortdokument. Die Antwort ist im .NET DataSet-Format, da DNET das Standard-SOAP-Dienstformat ist.

CREATE FUNCTION get_webservices()
RETURNS LONG VARCHAR
URL 'HTTP://localhost/get_webservices'
TYPE 'SOAP:DOC';

Die folgende Anweisung veranschaulicht, wie Sie die OPENXML-Prozedur verwenden können, um zwei Spalten der Ergebnismenge zu extrahieren. Die Spalten service_name und secure_required geben an, welche SOAP-Dienste sicher sind und wo HTTPS erforderlich ist.

SELECT *
FROM openxml( get_webservices(), '//row' )
WITH ("Name"    char(128) 'service_name',
      "Secure?" char(1)   'secure_required' );

Diese Anweisung funktioniert, indem die Abkömmlinge des row-Knotens ausgewählt werden. Die WITH-Klausel erstellt die Ergebnismenge, die auf den beiden entscheidenden Elementen basiert. Unter der Annahme, dass nur der get_webservices-Dienst existiert, gibt diese Funktion die folgende Ergebnismenge zurück:

Name Secure?
get_webservices N

Weitere Hinweise zu den in SQL Anywhere verfügbaren XML-Verarbeitungsfunktionen finden Sie unter XML in der Datenbank benutzen.

Andere Typen von Prozeduren

Prozeduren anderen Typs geben die ganzen Informationen über eine Antwort in einer zweispaltigen Ergebnismenge zurück. Diese Ergebnismenge enthält den Antwortstatus, Headerinformationen unf den Hauptteil. Die erste Spalte heißt "Attribute" und die zweite "Value". Beide sind vom Datentyp LONG VARCHAR.

Die Ergebnismenge hat eine Zeile für jedes Antwort-Headerfeld sowie auch eine Zeile für die HTTP-Statuszeile (Status-Attribut) und eine Zeile für den Antwort-Hauptteil (Body-Attribut).

Das folgende Beispiel zeigt eine typische Antwort:

Attribut Wert
Status HTTP/1.0 200 OK
Body <!DOCTYPE HTML ... ><HTML> ... </HTML>
Content-Type text/html
Server GWS/2.1
Content-Length 2234
Date Mon, 18 Oct 2004, 16:00:00 GMT