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

SAP Sybase SQL Anywhere 16.0 (Deutsch) » SQL Anywhere Server - Programmierung » HTTP-Webdienste » Beispiele für HTTP-Webdienste » Praktische Einführung: Verwenden von SQL Anywhere für den Zugriff auf einen SOAP/DISH-Dienst

 

Lektion 3: Senden einer SOAP-Anforderung und Empfangen einer SOAP-Antwort

In dieser Lektion rufen Sie die in der vorangehenden Lektion erstellte Wrapper-Prozedur auf, die eine SOAP-Anforderung an den in der ersten Lektion erstellte Webserver sendet.

Voraussetzungen

In dieser Lektion wird davon ausgegangen, dass Sie einen Webserver gemäß den Anweisungen in Lektion 1 eingerichtet haben. Siehe Lektion 1: Einrichten eines Webservers für den Empfang von SOAP-Anforderungen und das Senden von SOAP-Antworten.

In dieser Lektion wird davon ausgegangen, dass Sie einen Webclient gemäß den Anweisungen in Lektion 2 eingerichtet haben. Siehe Lektion 2: Einrichten eines Webclients zum Senden von SOAP-Anforderungen und Empfangen von SOAP-Antworten.

In dieser Lektion wird davon ausgegangen, dass Sie die Rollen und Privilegien haben, die im Abschnitt "Privilegien" am Anfang dieser praktischen Einführung aufgeführt sind: Praktische Einführung: Verwenden von SQL Anywhere für den Zugriff auf einen SOAP/DISH-Dienst.

 Aufgabe
  1. Stellen Sie in Interactive SQL eine Verbindung mit der Clientdatenbank her, wenn diese nicht bereits von der zweiten Lektion her geöffnet ist.

    dbisql -c "UID=DBA;PWD=sql;SERVER=ftc_client"
  2. Aktivieren der Protokollierung von SOAP-Anforderungen und Antworten.

    Führen Sie hierzu die folgende SQL-Anweisung in Interactive SQL aus:

    CALL sa_server_option('WebClientLogFile', 'soap.txt');
    CALL sa_server_option('WebClientLogging', 'ON');

    Mit diesen Aufrufen können Sie den Inhalt der SOAP-Anforderung und Antwort prüfen. Die Anforderungen und Antworten werden in einer Datei namens soap.txt protokolliert.

  3. Rufen Sie die Wrapper-Prozedur zum Senden einer SOAP-Anforderung und zum Empfangen einer SOAP-Antwort auf.

    Führen Sie die folgende SQL-Anweisung in Interactive SQL aus:

    CALL FahrenheitToCelsius(212);

    Dieser Aufruf gibt einen Fahrenheit-Wert von 212 an die Prozedur FahrenheitToCelsius weiter, welche ihrerseits diesen Wert zusammen mit zwei benutzerdefinierten SOAP-Headern an die Prozedur FToC weitergibt. Beide clientseitigen Prozeduren werden in der vorherigen Lektion erstellt.

Ergebnisse

Die Webdienstprozedur FToC sendet den Fahrenheit-Wert und den SOAP-Header an den Webserver. Die SOAP-Anforderung enthält folgende Daten.



<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:m="http://localhost:8082">
  <SOAP-ENV:Header>
    <Authentication xmlns="SecretAgent" mustUnderstand="1">
      <userName alias="99">
        <first>Susan</first>
        <last>Hilton</last>
      </userName>
    </Authentication>
    <Session xmlns="SomeSession">123456789</Session>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <m:FtoCService>
      <m:fahrenheit>212</m:fahrenheit>
    </m:FtoCService>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Die FtoC-Prozedur empfängt dann die Antwort vom Webserver wobei auch eine auf dem Fahrenheit-Wert basierende Ergebnismenge enthalten ist. Die SOAP-Antwort enthält folgende Daten.



<SOAP-ENV:Envelope 
  xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
  xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' 
  xmlns:tns='http://localhost:8082'>
  <SOAP-ENV:Header>
    <Authentication xmlns="SecretAgent" alias="99" mustUnderstand="1">
      <first>Susan</first>
      <last>Hilton</last>
    </Authentication>
  </SOAP-ENV:Header> 
  <SOAP-ENV:Body>
    <tns:FtoCServiceResponse>
      <tns:FtoCServiceResult xsi:type='xsd:string'>
        &lt;tns:rowset xmlns:tns=&quot;http://localhost:8082/ftc&quot;&gt;&#x0A; 
        &lt;tns:row&gt;&#x0A;  
        &lt;tns:answer&gt;100
        &lt;/tns:answer&gt;&#x0A; 
        &lt;/tns:row&gt;&#x0A;
        &lt;/tns:rowset&gt;&#x0A;   
      </tns:FtoCServiceResult>
      <tns:sqlcode>0</tns:sqlcode>
    </tns:FtoCServiceResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Der Inhalt von <SOAP-ENV:Header> wird in inoutheader zurückgegeben.

Wenn Sie die SOAP-Antwort überprüfen, können Sie sehen, dass die Ergebnismenge in der Antwort vom Webdienst FToCService kodiert ist. Die Ergebnismenge wird dekodiert und an die Prozedur FahrenheitToCelsius zurückgegeben. Die Ergebnismenge sieht wie folgt aus, wenn ein Fahrenheit-Wert von 212 an den Webserver übergeben wird:

<tns:rowset xmlns:tns="http://localhost:8082/ftc"> 
  <tns:row>
    <tns:answer>100
    </tns:answer>
  </tns:row>
</tns:rowset>

Die SELECT-Anweisung in der Prozedur FahrenheitToCelsius verwendet die Funktion OPENXML zur syntaktischen Analyse der SOAP-Antwort und extrahiert den durch die tns:answer-Struktur definierten Celsius-Wert.

Die folgende wird in Interactive SQL angezeigt:

Fahrenheit   Celsius
        212       100

Beispiel

Hier sehen Sie einen weiteren Beispielaufruf an den SOAP-Webdienst, mit dem ein Temperaturwert von Fahrenheit in Celsius konvertiert wird.

CALL FahrenheitToCelsius(32);

Die folgende wird in Interactive SQL angezeigt:

Fahrenheit   Celsius
         32         0

 Siehe auch