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

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 编程 » SQL Anywhere 数据访问 API » SQL Anywhere Web 服务

 

使用 SOAP 服务

为阐明 Web 服务的众多特性,先以一个简单的华氏温度到摄氏温度转换器作为示例服务开始介绍。

♦  设置简单的 Web 服务服务器
  1. 创建数据库。

    dbinit ftc
  2. 使用此数据库启动一个服务器。

    dbsrv11 -xs http(port=8082) -n ftc ftc.db
  3. 使用 Interactive SQL 连接到该服务器。

    dbisql -c "UID=DBA;PWD=sql;ENG=ftc"
  4. 使用 Interactive SQL 创建一个 Web 服务。

    CREATE SERVICE FtoCService
    TYPE 'SOAP'
    FORMAT 'XML'
    AUTHORIZATION OFF
    USER DBA
    AS CALL FToCConvertor( :temperature );
  5. 定义此服务要调用的用来执行从华氏温度转换为摄氏温度所需计算的存储过程:

    CREATE PROCEDURE FToCConvertor( temperature FLOAT )
    BEGIN
        SELECT ROUND((temperature - 32.0) * 5.0 / 9.0, 5) 
        AS answer;
    END;

此时,已有一个 SQL Anywhere Web 服务服务器在运行且已准备好处理请求。该服务器在端口 8082 上监听 SOAP 请求。

那么您将如何测试该 SOAP 请求服务器?最简单的方法是使用另一个 SQL Anywhere 数据库服务器传达 SOAP 请求并检索响应。

♦  发送和接收 SOAP 请求
  1. 创建另一个数据库以供与第二台服务器一同使用。

    dbinit ftc_client
  2. 使用此数据库启动个人服务器。

    dbeng11 ftc_client.db
  3. 使用另一个 Interactive SQL 实例连接到个人服务器。

    dbisql -c "UID=DBA;PWD=sql;ENG=ftc_client"
  4. 使用 Interactive SQL 创建一个存储过程。

    CREATE PROCEDURE FtoC( temperature FLOAT )
      URL 'http://localhost:8082/FtoCService'
      TYPE 'SOAP:DOC';

    该 URL 子句用于引用 SOAP Web 服务。字符串 ['http://localhost:8082/FtoCService'] 用于指定要使用的 Web 服务的 URI。这是对监听端口 8082 的 Web 服务器的引用。

    发出 Web 服务请求时使用的缺省格式是 'SOAP:RPC'。此示例中选择的格式为 'SOAP:DOC',此格式与 'SOAP:RPC' 类似,但是它允许使用更丰富的一组数据类型。SOAP 请求始终作为 XML 文档发送。发送 SOAP 请求所用的机制是 'HTTP:POST'。

  5. 您需要一个用于 FtoC 存储过程的包装,因此创建另一个存储过程。

    CREATE PROCEDURE FahrenheitToCelsius( temperature FLOAT )
    BEGIN
        DECLARE result LONG VARCHAR;   
        DECLARE err INTEGER;
        DECLARE crsr CURSOR FOR 
            CALL FtoC( temperature );
    
        OPEN crsr;
        FETCH crsr INTO result, err;
        CLOSE crsr;
    
        SELECT temperature, Celsius 
        FROM OPENXML(result, '//tns:answer', 1, result)
             WITH ("Celsius" FLOAT 'text()'); 
    END;

    此存储过程充当对 Web 服务的调用的包装过程。FtoC 存储过程将返回一个此存储过程处理的结果集。该结果集是一个单独的 XML 字符串,与以下字符串类似。

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

    OPENXML 函数用于分析返回的 XML,从而抽取摄氏温度值。

  6. 调用该存储过程以发送请求并获得响应。

    CALL FahrenheitToCelsius(212);

    将出现华氏温度和对等的摄氏温度。

    温度 摄氏
    212 100

此时,已演示了一个在 SQL Anywhere Web 服务器上运行的简单 Web 服务。正如您所见,其它 SQL Anywhere 服务器可与此 Web 服务器进行通信。对这些服务器之间传送的 SOAP 请求和响应的内容几乎没有什么控制。在下一节中,您将了解如何通过添加您自己的 SOAP 标头来扩展这个简单的 Web 服务。

注意

Web 服务可由同一数据库服务器提供,但不得位于客户端函数所在的数据库中。尝试访问同一数据库中的 Web 服务将导致错误 [403 Forbidden]。

有关 SOAP 标头处理的信息,请参见处理 SOAP 标头