创建并存储于数据库中的 Web 服务定义了哪些 URL 有效以及它们的作用。单个数据库可以定义多个 Web 服务。可以在不同的数据库中定义 Web 服务,以使这些 Web 服务看起来像是单个 Web 站点的一部分。
以下语句允许您创建、变更和删除 Web 服务:
CREATE SERVICE
ALTER SERVICE
DROP SERVICE
COMMENT ON SERVICE
CREATE SERVICE 语句的一般语法如下:
CREATE SERVICE service-name TYPE 'service-type' [ attributes ] [ AS statement ]
由于服务名构成了用于访问服务的 URL 的一部分,因此它们在允许包含什么字符方面有很大的灵活性。除了标准的字母数字字符外,还允许使用以下字符: - _ . ! * '( )
此外,除了那些用于命名 DISH 服务的服务名,其它服务名可以包含斜线 "/",但有一些限制,因为此字符是标准 URL 分隔符,会影响 SQL Anywhere 对 URL 的解释。斜线不能用作服务名的第一个字符。此外,服务名不能包含两个连续的斜线。
服务名中允许使用的字符在仅适用于 DISH 服务的 GROUP 名称中也允许使用。
支持以下服务类型:
'SOAP' 结果集作为 SOAP 响应返回。数据格式由 FORMAT 子句决定。对 SOAP 服务的请求必须是有效 SOAP 请求,而不仅是简单的 HTTP 请求。
'DISH' DISH 服务 (Determine SOAP Handler) 充当 GROUP 子句标识的 SOAP 服务的代理,并为每个此类 SOAP 服务都生成一个 WSDL(Web 服务描述语言)文档。
'HTML' 将语句或过程的结果集自动设置为包含表的 HTML 文档格式。
'XML' 结果集以 XML 格式返回。如果结果集已是 XML 格式,则不应用其它任何格式设置。如果它还不是 XML 格式,则将其格式自动设置为 XML。其作用与在 SELECT 语句中使用 FOR XML RAW 子句的作用类似。
'JSON' 结果集以 JavaScript Object Notation (JSON) 格式返回。JSON 与 XML 的结构相似,但 JSON 的结构更精简。有关 JSON 的详细信息,请访问 http://www.json.org。
'RAW' 不对结果集另外进行任何格式设置就将其发送到客户端。可以通过在过程中显式生成所需的标记来生成格式化文档。
在所有服务类型中,RAW 可使您最大程度地控制输出。但它的确需要您执行更多操作,因为您必须显式输出所有必要的标记。可通过向服务的语句应用 FOR XML 子句来调整 XML 服务的输出。SOAP 服务的输出可使用 CREATE 或 ALTER SERVICE 语句的 FORMAT 属性进行调整。请参见CREATE SERVICE 语句。
语句是当某人访问服务时调用的命令(通常是存储过程)。如果您定义了语句,则这是唯一可以通过此服务运行的语句。该语句是 SOAP 服务所必需的,而 DISH 服务将忽略该语句。缺省值是 NULL,表示没有语句。
可以创建不含语句的服务。语句从 URL 中获取。在测试服务或者需要一种通用的信息访问方式时,以这种方式配置的服务会很有用。为此,可以完全省略该语句,或者使用短语 AS NULL 替换该语句。
未定义语句的服务会带来严重的安全风险,因为这类服务允许 Web 客户端执行任意命令。创建此类服务时,必须启用授权,这会强制所有客户端都提供有效的用户名和口令。虽然如此,但生产系统中仍应该只运行定义了语句的服务。
通常,所有属性都是可选的。但有些属性是互相依赖的。可以使用以下属性:
AUTHORIZATION 此属性控制哪些用户可以使用该服务。缺省设置为 ON。如果未提供任何语句,则必须将 AUTHORIZATION 设为 ON。此外,授权设置还影响对用户名(由 USER 属性定义)的解释。
SECURE 当设置为 ON 时,只允许安全连接。HTTP 端口上接收的所有连接都将自动重定向到 HTTPS 端口。缺省值为 OFF,即同时启用 HTTP 和 HTTPS 请求,前提是在启动数据库服务器时使用相应选项启用了这些端口。请参见-xs 服务器选项。
USER USER 子句控制可以使用哪些数据库用户帐户处理服务请求。但对此设置的解释取决于 AUTHORIZATION 是 ON 还是 OFF。
当 AUTHORIZATION 设置为 ON 时,所有客户端在连接时都必须提供有效的用户名和口令。当 AUTHORIZATION 设置为 ON 时,USER 选项可以为 NULL、数据库用户名或数据库组的名称。如果为 NULL,则任何数据库用户都能连接并发出请求。请求使用该用户的帐户和权限运行。如果指定了组名,则只有属于该组的用户可以运行请求。其他所有数据库用户都被拒绝使用该服务。
如果 AUTHORIZATION 设置为 OFF,则必须提供一条语句。此外,还必须提供用户名。所有请求都使用该用户的帐户和权限运行。这样,如果服务器连接到公共网络,则应将指定用户帐户的权限设置到最小程度,以限制由恶意使用造成的损失。
GROUP GROUP 子句仅适用于 DISH 服务,用于确定 DISH 服务公开哪些 SOAP 服务。DISH 服务仅公开其名称以该 DISH 服务的组名开头的 SOAP 服务。因此,组名是公开的 SOAP 服务的公用前缀。例如,指定 GROUP xyz 则仅公开 SOAP 服务 xyz/aaaa、xyz/bbbb 或 xyz/cccc,而不公开 abc/aaaa 或 xyzaaaa。如果没有指定组名,则 DISH 服务公开数据库中的所有 SOAP 服务。组名和服务名中允许使用相同的字符。
SOAP 服务可由多个 DISH 服务公开。特别是,此特性允许单个 SOAP 服务以多种格式提供数据。除非在 SOAP 服务中指定,否则服务类型将从 DISH 服务继承。因此,可以创建不声明格式类型的 SOAP 服务,然后将其包含在多个 DISH 服务中,每个 DISH 服务指定一个不同的格式。
FORMAT FORMAT 子句仅适用于 DISH 和 SOAP 服务,用于控制 SOAP 或 DISH 响应的输出格式。可以使用与各种类型的 SOAP 客户端(如 .NET 或 JAX-WS)兼容的输出格式。如果未指定 SOAP 服务的格式,则从该服务的 DISH 服务声明继承格式。如果 DISH 服务也没有声明格式,则格式缺省设置为与 .NET 客户端兼容的 DNET。可以通过定义多个 DISH 服务(每个都使用一个不同的 FORMAT 类型)将没有声明格式的 SOAP 服务与不同类型的 SOAP 客户端同用。
URL [PATH] URL 或 URL PATH 子句控制对 URL 的解释,并仅适用于 XML、HTML 和 RAW 服务类型。特别是,它决定了是否接受 URL 路径以及在接受的情况下如何处理 URL 路径。如果服务名以字符 "/" 结尾,则必须将 URL 设置为 OFF。请参见CREATE SERVICE 语句。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |