SQL Anywhere Web 服务客户端程序的 TYPE 子句或函数定义允许 MIME 类型说明。MIME 类型说明的值用于设置 Content-Type 请求标头并设置操作模式以允许仅调用单个参数填充请求的主体。处理完参数替换后进行 Web 服务存储过程(或函数)调用时,只能保留零个或一个参数。调用为空的或无参数的 Web 服务程序(替换后)将导致无主体的请求和内容长度为零。如果未指定 MIME 类型,将不更改该行为。参数名和值(允许多个参数)在 HTTP 请求的主体内进行 URL 编码。
一些典型 MIME 类型包括:
以下步骤说明了 MIME 类型的设置。第一部分设置可用于测试 MIME 类型设置的 Web 服务。第二部分演示如何设置 MIME 类型。
创建数据库。
dbinit echo |
使用此数据库启动一个服务器。
dbsrv11 -xs http(port=8082) -n echo echo.db |
使用 Interactive SQL 连接到该服务器。
dbisql -c "UID=DBA;PWD=sql;ENG=echo" |
使用 Interactive SQL 创建一个 Web 服务。
CREATE SERVICE EchoService TYPE 'RAW' USER DBA AUTHORIZATION OFF SECURE OFF AS CALL Echo(:valueAsXML); |
定义此服务要调用的存储过程。
CREATE PROCEDURE Echo( parm LONG VARCHAR ) BEGIN SELECT parm; END; |
此时,已有一个 SQL Anywhere Web 服务服务器在运行且已准备好处理请求。该服务器正在监听端口 8082 上的 HTTP 请求。
要使用此 Web 服务器进行测试,可创建另一个 SQL Anywhere 数据库,然后启动并与之连接。以下步骤说明了如何执行此操作。
使用数据库创建实用程序另外创建一个要与 Web 服务客户端配合使用的数据库。
dbinit echo_client |
继续使用 Interactive SQL,使用以下语句启动此数据库。
START DATABASE 'echo_client.db' AS echo_client; |
现在,可使用以下语句连接到在该服务器回写时启动的数据库。
CONNECT TO 'echo' DATABASE 'echo_client' USER 'DBA' IDENTIFIED BY 'sql'; |
创建将与 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'。
调用该存储过程以发送请求并获得响应。所传递的值参数是 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 |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |