Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 编程 » SQL Anywhere 数据访问 API » SQL Anywhere Web 服务

 

创建 Web 服务

创建并存储于数据库中的 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 的详细信息,请访问 [external link] 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/aaaaxyz/bbbbxyz/cccc,而不公开 abc/aaaaxyzaaaa。如果没有指定组名,则 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 语句