变更现有 SOAP over HTTP 或 DISH 服务。
ALTER SERVICE service-name [ TYPE 'SOAP' ] [ DATATYPE { ON | OFF | IN | OUT } ] [ FORMAT { 'DNET' | 'CONCRETE' [ EXPLICIT { ON | OFF } ] | 'XML' | NULL } ] [ common-attributes ] [ AS statement ]
common-attributes : [ AUTHORIZATION { ON | OFF } ] [ ENABLE | DISABLE ] [ METHODS 'method,...' ] [ SECURE { ON | OFF } ] [ USER { user-name | NULL } ]
method : DEFAULT | POST | HEAD | NONE
ALTER SERVICE service-name [ TYPE 'DISH' ] [ GROUP { group-name | NULL } ] [ FORMAT { 'DNET' | 'CONCRETE' [ EXPLICIT { ON | OFF } ]| 'XML' | NULL } ] [ common-attributes ]
common-attributes : [ AUTHORIZATION { ON | OFF } ] [ ENABLE | DISABLE ] [ METHODS 'method,...' ] [ SECURE { ON | OFF } ] [ USER { user-name | NULL } ]
method : DEFAULT | POST | GET | HEAD | NONE | *
对 ALTER SERVICE 子句的说明与对 CREATE SERVICE 语句的说明相同。
service-name Web 服务名称可以是由字母数字字符,或正斜线 (/)、连字符 (-)、下划线 (_)、句点 (.)、感叹号 (!)、代字号 (~)、星号 (*)、撇号 (')、左括号 (() 或右括号 ()) 组成的任意序列,但服务名称不得以正斜线 (/) 开头或结尾,并且不得包含两个或两个以上连续的正斜线(例如 //)。
与其它服务不同,您不能在 DISH 服务名称中的任何位置使用正斜线 (/)。
您可以将服务命名为 root,但该名称具有特殊功能。
TYPE 子句 标识服务类型,其中每种服务定义一种特殊的响应格式。该类型必须是列出的服务类型之一。无缺省值。
'SOAP'
结果集作为 XML 载荷(也称为 SOAP 封装)返回。数据格式可以使用 FORMAT 子句进一步细化。对 SOAP 服务的请求必须是有效 SOAP 请求,而不仅是一般的 HTTP 请求。有关 SOAP 标准的详细信息,请参见 http://www.w3.org/TR/2000/NOTE-SOAP-20000508/。
'DISH' DISH 服务 (Determine SOAP Handler) 是一个 SOAP 端点,它可以引用其 GROUP 上下文内部的任意 SOAP 服务。它还可以通过生成由 SOAP 客户端工具箱使用的 WSDL(Web Services Description Language,简称 Web 服务描述语言)将接口公开给其 SOAP 服务。
GROUP 子句 不包含 GROUP 子句的 DISH 服务会公开数据库中定义的所有 SOAP 服务。按照约定,SOAP 服务名称可以包含 GROUP 和 NAME 元素。名称与组由最后面的正斜线字符分隔。例如,定义为 'aaa/bbb/ccc' 的 SOAP 服务名称为 'ccc',而组为 'aaa/bbb'。使用该约定分隔 DISH 服务是无效的。取而代之,可以应用 GROUP 子句指定作为 SOAP 端点的 SOAP 服务的组。
在 WSDL 中,正斜线将转换为下划线以便生成有效的 XML。当使用没有指定 GROUP 子句的 DISH 服务时请小心谨慎,因为它会公开可能包含正斜线的所有 SOAP 服务。当与包含下划线的 SOAP 服务名称一同使用组时请小心谨慎以避免歧义。
DATATYPE 子句 仅适用于 SOAP 服务。当指定 DATATYPE OFF 时,SOAP 输入参数和响应数据将定义为 XMLSchema 字符串类型。在大多数情况下,最好使用真实的数据类型,因为这样可以使 SOAP 客户端不需要在计算前强制转换数据。参数数据类型在 DISH 服务生成的 WSDL 的模式部分中公开。输出数据类型则表示为每列数据的 XML 模式类型属性。
DATATYPE 子句允许使用以下值:
ON 生成输入参数和结果集响应的数据类型。
OFF 所有输入参数和响应数据的类型都设置为 XMLSchema 字符串(缺省)。
IN 仅生成输入参数的真实数据类型。响应数据类型是 XMLSchema 字符串。
OUT 仅生成响应的真实数据类型。输入参数的类型为 XMLSchema 字符串。
有关 SOAP 服务的详细信息,请参见教程:使用 SQL Anywhere 访问 SOAP/DISH 服务。
有关将 XMLSchema 类型映射为 SQL 数据类型的详细信息,请参见SOAP 数据类型。
FORMAT 子句 该子句指定当发送响应到 SOAP 客户端应用程序时的输出格式。
如果 SOAP 服务没有指定 SOAP 服务格式,则由相关的 DISH 服务格式规定决定该格式。缺省格式为 DNET。
SOAP 请求应定向到 DISH 服务(SQL Anywhere SOAP 端点)以便利用一组 SOAP 服务(SOAP 操作)的通用格式规则。SOAP 服务 FORMAT 规定会替换 DISH 服务的规定。当 SOAP 服务没有定义 FORMAT 子句时,使用 DISH 服务的格式规定。如果两个服务都未提供 FORMAT,则缺省为 'DNET'。
支持以下格式:
'DNET' 输出为 System.Data.DataSet 兼容格式以便由 .NET 客户端应用程序使用。(缺省)
'CONCRETE' 该输出格式用于支持能够生成代表行和列对象的接口,但不能使用 DNET 格式的客户端 SOAP 工具箱。Java 和 .NET 客户端可以轻松地使用该输出格式。
特定输出格式在 DISH 服务的 WSDL 内公开。对于 CONCRETE OFF 或作为最后手段,一个或多个 SOAP 服务的 CONCRETE 格式由 SimpleDataset 表示。检查 WSDL,您会发现 SimpleDataset 由行数组构成,而这些行由任意数量的列数组构成。这不是最理想的表示方式,因为未指定特定列的名称和数据类型。建议由 SOAP 服务定义对存储过程的调用,接着由此过程定义 RESULT 子句。针对以这种方式定义的 SOAP 服务,DISH 服务可以在生成 WSDL 时完整地描述结果集。
缺省情况下,如果可以描述 SOAP 服务的结果集,则假定为 EXPLICIT ON 且 WSDL 包含每个 SOAP 服务的专用 Dataset 条目。每个条目名称都以 SOAP 服务名称和下划线为前缀。例如,名为 test 的 SOAP 服务会生成 test_Dataset 对象格式,其中包含每个列元素的 XMLSchema 定义。
指定 EXPLICIT ON 后(缺省值),当满足以下条件时,WSDL 描述显式 DataSet 元素:
CREATE SERVICE 语句调用存储过程
在存储过程中指定了描述列和数据类型的 RESULT 子句
指定 EXPLICIT OFF 后,WSDL 描述 SimpleDataset 元素。此说明不提供列数、列名或数据类型。
'XML' 输出以 XMLSchema 字符串格式生成。响应是需要 SOAP 客户端进一步处理以提取列数据的 XML 文档。该格式适用于无法生成代表行和列数组的中间接口对象的 SOAP 客户端。
NULL NULL 类型会使 SOAP 或 DISH 服务使用缺省行为。当在 ALTER SERVICE 语句中使用 NULL 类型时,现有服务的格式类型将被覆盖。
AUTHORIZATION 子句 确定在连接服务时用户是否必须通过基本 HTTP 授权指定用户名和口令。缺省值为 ON。如果 AUTHORIZATION 为 OFF,则需要使用 AS 子句处理 SOAP 服务,并且必须用 USER 子句指定用户。所有请求都使用该用户的帐户和权限运行。如果 AUTHORIZATION 为 ON,则所有用户都必须提供用户名和口令。也可通过使用 USER 子句提供用户名或用户组名来限定允许使用服务的用户。如果用户名为 NULL,则所有已知用户都可以访问该服务。AUTHORIZATION 子句允许 Web 服务使用数据库授权和权限控制对数据库中数据的访问。
与 Web 服务相连的 HTTP 客户端使用基本授权 (RFC 2617)。基本授权通过 64 位编码来模糊处理用户和口令信息。建议使用 HTTPS 协议以提高安全性。
ENABLE 和 DISABLE 子句
确定是否该服务是否可用。缺省情况下,创建服务时,即启用该服务。创建或变更服务时,可以包含 ENABLE 或 DISABLE 子句。禁用服务可以使该服务离线。之后可以使用 ALTER SERVICE 及 ENABLE 子句启用该服务。对已禁用服务的
HTTP 请求通常返回 404 Not Found
HTTP 状态。
METHODS 子句 指定服务支持的 HTTP 方法。有效值包括 DEFAULT、POST、GET、HEAD 和 NONE。可使用星号 (*) 作为简写形式,用来表示 POST、GET 和 HEAD 方法。SOAP 服务的缺省方法类型是 POST 和 HEAD。DISH 服务的缺省方法类型是 GET、POST 和 HEAD。并非所有的 HTTP 方法都对所有服务类型有效。下表总结了每种服务类型可以应用的有效 HTTP 方法:
方法值 | 适用的服务 | 说明 |
---|---|---|
DEFAULT | 两者 | 使用 DEFAULT 可重置给定服务类型的缺省 HTTP 方法集。该方法集不能包含在具有其它方法值的列表中。 |
POST | 两者 | SOAP 缺省启用。 |
GET | 仅适用于 DISH | DISH 缺省启用。 |
HEAD | 两者 | SOAP 和 DISH 缺省启用。 |
NONE | 两者 |
使用 NONE 来禁止对服务的访问。如果应用于 SOAP 服务,则 SOAP 请求无法直接访问该服务。这将强行通过 DISH 服务 SOAP 端点独占访问 SOAP 操作。 建议为每种 SOAP 服务指定 METHOD NONE。 |
* | 仅适用于 DISH | 与指定 'POST,GET,HEAD' 效果相同。 |
例如,可使用以下子句指定某个服务支持所有 SOAP over HTTP 方法类型:
METHODS 'POST,HEAD' |
要将任意服务类型的请求类型列表重置为缺省值,可以使用下列子句:
METHODS 'DEFAULT' |
SECURE 子句 指定服务是否能够通过安全或非安全监听器访问。ON 表示仅接受 HTTPS 连接,并且在 HTTP 端口上接收的连接都将自动重定向到 HTTPS 端口。OFF 表示只要在启动 Web 服务器时指定了必要的端口,就可同时接受 HTTP 和 HTTPS 连接。缺省值为 OFF。
USER 子句
指定数据库用户(或用户组)拥有执行 Web 服务请求的权限。如果应该指定 AUTHORIZATION ON 的服务配置为 AUTHORIZATION OFF(缺省值),则必须指定 USER 子句。对需要授权的服务执行 HTTP 请求会导致 401 Authorization Required
HTTP 响应状态。根据该响应,Web 浏览器会提示需要用户 ID 和口令。
强烈建议您在启用授权时(缺省情况)指定 USER 子句。否则,将向所有用户授予权限。
USER 子句控制可以使用哪些数据库用户帐户处理服务请求。数据库访问权限限制为分配给该服务的用户的权限。
语句 指定访问服务时调用的命令,例如存储过程调用。
DISH 服务是唯一必须定义空语句或不定义语句的服务。SOAP 服务必须定义语句。任何其他 SERVICE 必须配置为 AUTHORIZATION ON,才可以具有 NULL 语句。
对非 DISH 服务的 HTTP 请求(无 statement)指定要在其 URL 内执行的 SQL 表达式。尽管有授权要求,依然不得在生产系统中使用此功能,因为它会给服务器带来 SQL 注入的风险。在该服务内定义语句时,指定的 SQL 语句是唯一可在整个服务内执行的语句。
在典型的 Web 服务应用中,使用 statement 调用函数或过程。可将主机变量作为参数传递以访问客户端提供的 HTTP 变量。
以下 statement 演示了一个过程调用,它会将两个主机变量传递到名为 AuthenticateUser 的过程。该调用假定 Web 客户端提供 user_name 和 user_password 变量:
CALL AuthenticateUser ( :user_name, :user_password ); |
有关将主机变量传递到函数或过程的详细信息,请参见访问客户端提供的 HTTP 变量与标头。
ALTER SERVICE 语句修改 Web 服务的属性。
DBA 特权
无。
SQL/2008 服务商扩充。
以下示例演示如何使用 ALTER SERVICE 语句禁用现有 Web 服务:
CREATE SERVICE WebServiceTable TYPE 'SOAP' AUTHORIZATION OFF USER DBA AS SELECT * FROM SYS.SYSTAB; ALTER SERVICE WebServiceTable DISABLE; |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |