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 (中文) » SQL Anywhere 服务器 - 编程 » HTTP Web 服务 » 将 SQL Anywhere 用作 HTTP Web 服务器 » 如何在 HTTP Web 服务器中开发 Web 服务应用程序

 

如何访问客户端提供的 SOAP 请求标头

可将 NEXT_SOAP_HEADER 和 SOAP_HEADER 函数结合使用来获得 SOAP 请求中的标头。NEXT_SOAP_HEADER 函数将遍历包含在 SOAP 请求封装中的 SOAP 标头并返回下一个 SOAP 标头名。如果用 NULL 调用该函数,该函数会返回第一个标头的名称。通过向 NEXT_SOAP_HEADER 函数传递上一个标头的名称来检索后续的标头。当用最后一个标头的名称调用该函数时,该函数返回 NULL。

下面的示例将说明 SOAP 标头检索:

SET hd_key = NEXT_SOAP_HEADER( hd_key );
    IF hd_key IS NULL THEN
      -- no more header entries
      LEAVE header_loop;
    END IF;

重复调用该函数将会返回所有的标头字段且仅返回一次,但不一定与其出现在 SOAP 请求中的顺序相同。

SOAP_HEADER 函数将返回指定的 SOAP 标头字段的值或 NULL(如果不是从 SOAP 服务调用)。当通过 Web 服务处理 SOAP 请求时,将使用该函数。如果给定字段名的标头不存在,则会返回值 NULL。

该示例将搜索名为 Authentication 的 SOAP 标头。当它找到此标头时,便会抽取整个 SOAP 标头的值以及 [@namespace] 和 [mustUnderstand] 属性的值。SOAP 标头值可能类似于下面的 XML 字符串:

<Authentication xmlns="CustomerOrderURN" mustUnderstand="1">
  <userName pwd="none">
    <first>John</first>
    <last>Smith</last>
  </userName>
</Authentication>

对于此标头,[@namespace] 属性值将为:[CustomerOrderURN]

同时,[mustUnderstand] 属性值将为 1

使用设置为 /*:Authentication/*:userName 的 XPath 字符串来通过 OPENXML 函数分析此 XML 字符串的内部。

SELECT * FROM OPENXML( hd_entry, xpath )
    WITH ( pwd LONG VARCHAR '@*:pwd',
        first_name LONG VARCHAR '*:first/text()',
        last_name LONG VARCHAR '*:last/text()' );

通过使用上面所示的示例 SOAP 标头值,SELECT 语句将会创建一个如下所示的结果集:

pwd first_name last_name
none John Smith

在此结果集上会声明一个游标,且会将三个列值读取到三个变量中。此时,您获取了传递给 Web 服务的所有相关信息。

 示例