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 服务

 

使用 MIME 类型

SQL Anywhere Web 服务客户端程序的 TYPE 子句或函数定义允许 MIME 类型说明。MIME 类型说明的值用于设置 Content-Type 请求标头并设置操作模式以允许仅调用单个参数填充请求的主体。处理完参数替换后进行 Web 服务存储过程(或函数)调用时,只能保留零个或一个参数。调用为空的或无参数的 Web 服务程序(替换后)将导致无主体的请求和内容长度为零。如果未指定 MIME 类型,将不更改该行为。参数名和值(允许多个参数)在 HTTP 请求的主体内进行 URL 编码。

一些典型 MIME 类型包括:

以下步骤说明了 MIME 类型的设置。第一部分设置可用于测试 MIME 类型设置的 Web 服务。第二部分演示如何设置 MIME 类型。

♦  创建 Web 服务服务器
  1. 创建数据库。

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

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

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

    CREATE SERVICE EchoService
    TYPE 'RAW'
    USER DBA
    AUTHORIZATION OFF
    SECURE OFF
    AS CALL Echo(:valueAsXML);
  5. 定义此服务要调用的存储过程。

    CREATE PROCEDURE Echo( parm LONG VARCHAR )
    BEGIN
        SELECT parm; 
    END;

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

要使用此 Web 服务器进行测试,可创建另一个 SQL Anywhere 数据库,然后启动并与之连接。以下步骤说明了如何执行此操作。

♦  发送 HTTP 请求
  1. 使用数据库创建实用程序另外创建一个要与 Web 服务客户端配合使用的数据库。

    dbinit echo_client
  2. 继续使用 Interactive SQL,使用以下语句启动此数据库。

    START DATABASE 'echo_client.db' 
    AS echo_client;
  3. 现在,可使用以下语句连接到在该服务器回写时启动的数据库。

    CONNECT TO 'echo'
    DATABASE 'echo_client' 
    USER 'DBA' 
    IDENTIFIED BY 'sql';
  4. 创建将与 EchoService Web 服务进行通信的存储过程。

    CREATE PROCEDURE setMIME( 
      value LONG VARCHAR, 
      mimeType LONG VARCHAR, 
      urlSpec LONG VARCHAR
      )
    URL '!urlSpec'
    HEADER 'ASA-Id'
    TYPE 'HTTP:POST:!mimeType';

    该 URL 子句用于引用 Web 服务。出于说明目的,URL 将作为参数传递到 setMIME 过程。

    TYPE 子句指示 MIME 类型将作为参数传递到 setMIME 过程。发出 Web 服务请求时使用的缺省格式是 'SOAP:RPC'。为此 Web 服务请求所选择的格式是 'HTTP:POST'。

  5. 调用该存储过程以发送请求并获得响应。所传递的值参数是 URL 编码形式的 <hello>this is xml</hello>。由于 SQL Anywhere Web 服务器可理解 URL 编码形式,所以媒体类型为 application/x-www-form-urlencoded。该 Web 服务的 URL 作为调用中的最后一个参数包括在内。

    CALL setMIME('valueAsXML=%3Chello%3Ethis%20is%20xml%3C/hello%3E', 
        'application/x-www-form-urlencoded', 
        'http://localhost:8082/EchoService');

    最后一个参数可指定在端口 8082 上监听的 Web 服务的 URI。

以下是发送到 Web 服务器的 HTTP 包的代表示例。

POST /EchoService HTTP/1.0
Date: Sun, 28 Jan 2007 04:04:44 GMT
Host: localhost
Accept-Charset: windows-1252, UTF-8, *
User-Agent: SQLAnywhere/11.0.0.1297
Content-Type: application/x-www-form-urlencoded; charset=windows-1252
Content-Length: 49
ASA-Id: 1055532613:echo_client:echo:968000
Connection: close

valueAsXML=%3Chello%3Ethis%20is%20xml%3C/hello%3E

以下是来自 Web 服务器的响应。

HTTP/1.1 200 OK
Server: SQLAnywhere/11.0.0.1297
Date: Sun, 28 Jan 2007 04:04:44 GMT
Expires: Sun, 28 Jan 2007 04:04:44 GMT
Content-Type: text/plain; charset=windows-1252
Connection: close

<hello>this is xml</hello>

Interactive SQL 显示的结果集如下所示。

属性
Status HTTP /1.1 200 OK
Body <hello>this is xml</hello>
Server SQLAnywhere/11.0.0.1297
日期 Sun, 16 Dec 2007 04:04:44 GMT
Expires Sun, 16 Dec 2007 04:04:44 GMT
Content-Type text/plain; charset=windows-1252
Connection close