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

 

处理返回值和结果集

可以使用存储函数或存储过程进行 Web 服务客户端调用。如果从函数进行调用,则函数的返回类型必须是字符数据类型,如 CHAR、VARCHAR 或 LONG VARCHAR。返回值是 HTTP 响应的主体。不包含任何标头信息。关于请求的附加信息(包括 HTTP 状态信息)由过程返回。这样,在需要访问此附加信息时最好使用过程。

SOAP 过程

来自 SOAP 函数的响应是一个包含 SOAP 响应的 XML 文档。

由于 SOAP 响应是结构化的 XML 文档,因此,SQL Anywhere 在缺省情况下会尝试利用此信息,并构造一个更实用的结果集。返回的响应文档中的每个顶级标记都将被抽取并用作列名。每个此类标记下的子树的内容将用作该列的行值。

例如,假设 SOAP 响应如下所示,SQL Anywhere 将构造出所显示的数据集:

<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.

在本示例中,响应文档使用 SOAP-ENV:Body 标记中出现的 ElizaResponse 标记分隔。

结果集的列数与顶级标记数量相同。因为 SOAP 响应中只有一个顶级标记,所以此结果集只有一列。这单个顶级标记 Eliza 将成为列名。

XML 处理工具

使用内置 Open XML 处理功能也可以访问 XML 结果集中的信息(包括 SOAP 响应)。

以下示例使用 OPENXML 过程来抽取 SOAP 响应的各部分。此示例使用 Web 服务将 SYSWEBSERVICE 表的内容公开为 SOAP 服务:

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

以下存储函数(必须在另一个 SQL Anywhere 数据库中创建)发出对此 Web 服务的调用。该函数的返回值是整个 SOAP 响应文档。响应采用 .NET 数据集格式,因为 DNET 是缺省的 SOAP 服务格式。

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

以下语句演示了如何使用 OPENXML 过程抽取结果集的两列。service_namesecure_required 列分别指明哪些 SOAP 服务是安全的以及何处需要 HTTPS。

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

此语句通过选择 row 节点的子节点生效。WITH 子句基于相关的两个元素构造结果集。假定只存在 get_webservices 服务,此函数将返回以下结果集:

名称 Secure?
get_webservices N

有关 SQL Anywhere 提供的 XML 处理工具的详细信息,请参见在数据库中使用 XML

其它类型的过程

其它类型的过程在一个两列式结果集中返回关于响应的所有信息。此结果集包含响应状态、标头信息和主体。第一列名为 Attribute,第二列名为 Value。两列的数据类型都是 LONG VARCHAR。

结果集为每个响应标头字段都提供一个数据行,并且分别为 HTTP 状态行(Status 属性)和响应主体(Body 属性)提供了一个数据行。

以下示例代表一个典型响应:

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