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

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - 编程 » HTTP Web 服务 » HTTP Web 服务示例 » 教程:使用 JAX-WS 访问 SOAP/DISH Web 服务

 

第 1 课:设置用于接收 SOAP 请求和发送 SOAP 响应的 Web 服务器

在本课中,您将设置运行 SOAP 和 DISH Web 服务的 SQL Anywhere Web 服务器,处理 JAX-WS 客户端应用程序的请求。

前提条件

本课假定您拥有在教程教程:使用 JAX-WS 访问 SOAP/DISH Web 服务开头的特权部分中列出的角色和特权。

上下文和注释

本课将设置 Web 服务器,并设置一个下一课将用到的简单 Web 服务。它对于使用代理软件观察 XML 消息流量具有指导意义。代理软件置身于客户端应用程序和 Web 服务器之间。

 任务
  1. 使用以下命令启动 SQL Anywhere 演示数据库:

    dbsrv16 -xs http(port=8082) "%SQLANYSAMP16%\demo.db"

    此命令表示 HTTP Web 服务器应当监听 8082 端口上的请求。如果网络禁用了 8082 端口,则使用其它端口号。

  2. 使用以下命令在 Interactive SQL 中连接数据库服务器:

    dbisql -c "UID=DBA;PWD=sql;SERVER=demo"
  3. 创建列出 Employees 表列的存储过程。

    在 Interactive SQL 中执行以下 SQL 语句:



    CREATE OR REPLACE PROCEDURE ListEmployees()
    RESULT (
        EmployeeID            INTEGER,
        Surname               CHAR(20),
        GivenName             CHAR(20),
        StartDate             DATE,
        TerminationDate       DATE )
    BEGIN
        SELECT EmployeeID, Surname, GivenName, StartDate, TerminationDate 
        FROM Employees;
    END;

    这些语句创建名为 ListEmployees 的新过程,它定义结果集输出的结构,并从雇员表中选出某些列。

  4. 创建新的 SOAP 服务来接受进来的请求。

    在 Interactive SQL 中执行以下 SQL 语句:

    CREATE SERVICE "WS/EmployeeList"
        TYPE 'SOAP'
        FORMAT 'CONCRETE' EXPLICIT ON
        DATATYPE ON
        AUTHORIZATION OFF
        SECURE OFF
        USER DBA
        AS CALL ListEmployees();

    此语句创建名为 WS/EmployeeList 的新 SOAP Web 服务,此服务生成 SOAP 类型作为输出。当 Web 客户端向服务发送请求时,它调用 ListEmployees 过程。用引号将服务名引起来,因为服务名中存在斜线字符 (/)。

    从 JAX-WS 访问的 SOAP Web 服务应该用 FORMAT 'CONCRETE' 子句来声明。EXPLICIT ON 子句表示相应的 DISH 服务应当生成 XML 模式,该模式基于 ListEmployees 过程的结果集描述一个显式 dataset 对象。EXPLICIT 子句只对生成的 WSDL 文档有影响。

    DATATYPE ON 表示显式数据类型信息在 XML 结果集响应和输入参数中生成。此选项不影响生成 WSDL 文档。

    如果使用其他用户 ID 登录,则必须对 USER DBA 子句进行更改以反映您的用户 ID。

  5. 创建一个新 DISH 服务以充当 SOAP 服务的代理并生成 WSDL 文档。

    在 Interactive SQL 中执行以下 SQL 语句:

    CREATE SERVICE WSDish
        TYPE 'DISH'
        FORMAT 'CONCRETE'
        GROUP WS
        AUTHORIZATION OFF
        SECURE OFF
        USER DBA;

    从 JAX-WS 访问的 DISH Web 服务应该用 FORMAT 'CONCRETE' 子句来声明。GROUP 子句标识 DISH 服务应当处理的 SOAP 服务。前面步骤中创建的 EmployeeList 服务是 GROUP WS 的一部分,因为它被声明为 WS/EmployeeList。如果使用其他用户 ID 登录,则必须对 USER DBA 子句进行更改以反映您的用户 ID。

  6. 通过利用 Web 浏览器访问相关 WSDL 文档来验证 DISH Web 服务是否工作正常。

    打开 Web 浏览器,访问 [external link] http://localhost:8082/demo/WSDish

    DISH 服务会自动生成一个 WSDL 文档,该文档将出现在浏览器窗口中。检查 EmployeeListDataset 对象,它类似以下输出内容:



    <s:complexType name="EmployeeListDataset">
    <s:sequence>
    <s:element name="rowset">
      <s:complexType>
      <s:sequence>
      <s:element name="row" minOccurs="0" maxOccurs="unbounded">
        <s:complexType>
        <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="EmployeeID" nillable="true" type="s:int" /> 
        <s:element minOccurs="0" maxOccurs="1" name="Surname" nillable="true" type="s:string" /> 
        <s:element minOccurs="0" maxOccurs="1" name="GivenName" nillable="true" type="s:string" /> 
        <s:element minOccurs="0" maxOccurs="1" name="StartDate" nillable="true" type="s:date" /> 
        <s:element minOccurs="0" maxOccurs="1" name="TerminationDate" nillable="true" type="s:date" /> 
        </s:sequence>
        </s:complexType>
      </s:element>
      </s:sequence>
      </s:complexType>
    </s:element>
    </s:sequence>
    </s:complexType>

    EmployeeListDatasetEmployeeList SOAP 服务中的 FORMAT 'CONCRETE' 和 EXPLICIT ON 子句生成的显式对象。在随后的课程中,wsimport 应用程序将使用此信息为该服务生成一个 SOAP 1.1 客户端接口。

结果

您已设置运行 SOAP 和 DISH Web 服务的 SQL Anywhere Web 服务器,从而能够处理 JAX-WS 客户端应用程序的请求。

下一个

在下一课中,将创建与 Web 服务器通信的 Java 应用程序。前进至第 2 课:创建与 Web 服务器通信的 Java 应用程序

 另请参见