在本课中,您将设置用于发送 SOAP 请求和接收 SOAP 响应的 Web 客户端。
前提条件
本课假设您已经按照上一课设置了 Web 服务器。请参见第 1 课:设置用于接收 SOAP 请求和发送 SOAP 响应的 Web 服务器。
本课假定您拥有在教程教程:使用 SQL Anywhere 访问 SOAP/DISH 服务开头的特权部分中列出的角色和特权。
上下文和注释
本课中包含对 localhost 的引用。如果 Web 客户端与 Web 服务器运行在不同的计算机上,则使用第 1 课中 Web 服务器的主机名或 IP 地址而不是 localhost。
运行以下命令创建 SQL Anywhere 数据库:
dbinit -dba DBA,sql ftc_client |
使用以下命令启动数据库客户端:
dbsrv16 ftc_client.db |
使用以下命令在 Interactive SQL 中连接数据库:
dbisql -c "UID=DBA;PWD=sql;SERVER=ftc_client" |
创建新的存储过程以向 DISH 服务发送 SOAP 请求。
在 Interactive SQL 中执行以下 SQL 语句:
CREATE OR REPLACE PROCEDURE FtoC( fahrenheit FLOAT, INOUT inoutheader LONG VARCHAR, IN inheader LONG VARCHAR ) URL 'http://localhost:8082/soap_endpoint' SET 'SOAP(OP=FtoCService)' TYPE 'SOAP:DOC' SOAPHEADER '!inoutheader!inheader'; |
URL 子句中的 http://localhost:8082/soap_endpoint 字符串表示 Web 服务器在 localhost 上运行且监听 8082 端口。需要的 DISH Web 服务名为 soap_endpoint,它作为 SOAP 端点。
SET 子句指定要调用的 SOAP 操作名称或 FtoCService 服务。
创建 Web 服务请求时使用的缺省格式是 'SOAP:RPC'。本例中选择了 'SOAP:DOC' 格式,此格式与 'SOAP:RPC' 相似但允许更多数据类型。SOAP 请求始终以 XML 文档发送。SOAP 请求的发送机制是 'HTTP:POST'。
诸如 FtoC 的 Web 服务客户端过程中的替换变量(inoutheader、inheader)必须是字母数字字符。如果将 Web 服务客户端声明为函数,所有参数仅处于 [IN] 模式(无法由调用函数赋值)。因此,OPENXML 或其它字符串函数将必须用来提取 SOAP 响应标头信息。
创建构建两个特殊 SOAP 请求标头条目的包装过程,将它们传递给 FtoC 过程,并处理服务器响应。
在 Interactive SQL 中执行以下 SQL 语句:
CREATE OR REPLACE PROCEDURE FahrenheitToCelsius( Fahrenheit FLOAT ) BEGIN DECLARE io_header LONG VARCHAR; DECLARE in_header LONG VARCHAR; DECLARE result LONG VARCHAR; DECLARE err INTEGER; DECLARE crsr CURSOR FOR CALL FtoC( Fahrenheit, io_header, in_header ); SET io_header = '<Authentication xmlns="SecretAgent" ' || 'mustUnderstand="1">' || '<userName alias="99">' || '<first>Susan</first><last>Hilton</last>' || '</userName>' || '</Authentication>'; SET in_header = '<Session xmlns="SomeSession">' || '123456789' || '</Session>'; MESSAGE 'send, soapheader=' || io_header || in_header; OPEN crsr; FETCH crsr INTO result, err; CLOSE crsr; MESSAGE 'receive, soapheader=' || io_header; SELECT Fahrenheit, Celsius FROM OPENXML(result, '//tns:answer', 1, result) WITH ("Celsius" FLOAT 'text()'); END; |
第一个 SET 语句创建 SOAP 标头条目的 XML 表示,以向 Web 服务器通知用户证书:
<Authentication xmlns="SecretAgent" mustUnderstand="1"> <userName alias="99"> <first>Susan</first> <last>Hilton</last> </userName> </Authentication> |
第二个 SET 语句创建 SOAP 标头条目的 XML 表示,以跟踪客户端会话 ID:
<Session xmlns="SomeSession">123456789</Session> |
OPEN 语句导致调用 FtoC 过程,此过程向 WEB 服务器发送 SOAP 请求并处理来自 Web 服务器的响应。响应包括在 inoutheader 中返回的标头。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |