使用原生 Web 服务将 SQL Anywhere Server 的数据 Web 化
SQL Anywhere 数据库服务器上的 HTML 原生 Web 服务。
引言
通过本机 Web 服务,将服务器数据暴露给内网/互联网已成为一种诱人且急需的方法。这些服务可以在数据库本身上创建,并通过 HTTP 或 Soap 请求进行访问。Microsoft Access 的某些版本通过数据访问页提供了这种动态功能,而 Microsoft SQL Server 直到 2005 版本才直接实现此功能。然而,MS Access 2007 不支持数据访问页,而是推荐使用 SharePoint 服务器。SQL Anywhere 服务器,即使是 9.0 版本,也拥有这种内置功能。
SQL Anywhere Server 10
在之前描述 .NET Framework 集成的文章中介绍了图形化管理工具 Interactive SQL 和 Sybase Central。此外,Hodentek 博客链接提供了几篇相关文章。在 SQL Anywhere 主页上也可以找到详尽的文档。您可以下载该软件的评估版本并进行试用。评估版本包括 Sybase Central,这是一个一站式图形化数据库管理界面,用于管理数据库及其各种支持应用程序。在本教程中,我们将使用 Sybase Central 完成多项任务。
创建项目目录
为了隔离教程文件,我们将创建一个目录来存储数据库文件。打开提示符,使用以下列表创建 HTTPWebServerDemo 目录。
列表 1C:\> mkdir C:\HTTPWebServerDemo
C:\> cd C:\HTTPWebServerDemo
启动数据库服务器
SQL Anywhere 10 包含一个名为 demo.db 的示例数据库。因为它已经包含带有数据的表,我们将使用它来创建我们的 Web 服务。
由于我们不想直接修改 demo.db 文件(以防我们想将其用于其他演示),我们将它复制到 HTTPWebServerDemo 目录中。demo.db 文件安装在 SQL Anywhere 10 示例目录中。一个环境变量 SQLANYSAMP10 指向该目录。此变量在您安装 SQL Anywhere 10 时创建。
列表 2C:\HTTPWebServerDemo> copy “%SQLANYSAMP10%”\demo.db
C:\HTTPWebServerDemo> dbsrv10 –n SAWebServer demo.db –n demo
为了遵循最佳实践,我们将数据库服务器和数据库都命名。我们希望启动一个名为 SAWebServer 的 SQL Anywhere 10 网络服务器。在我们的服务器内部,我们将启动一个名为 demo 的数据库,该数据库从我们刚刚复制的 demo.db 文件加载。数据库服务器可以通过执行 dbsrv10 命令来启动,如以下列表所示。稍后我们将看到如何将其启动以接受 Web 请求。
列表 3C:\HTTPWebServerDemo> dbsrv10 –n SAWebServer demo.db –n demo
网络服务器成功启动后,一个服务器的小图标(参见图 22)将放置在桌面控制托盘中。您可以右键单击并恢复窗口,如以下图所示。

现在我们要使用 Sybase Central 连接到我们的数据库服务器。Sybase Central 可以通过“开始”-->“所有程序”-->“SQL Anywhere 10”-->“Sybase Central”启动。现在,您可以从菜单中选择 Connections --> Connect with SQL Anywhere 10 连接到此数据库。您必须使用新数据库的默认登录信息(用户名:dba;密码:sql)进行登录。

现在点击“数据库”选项卡,这将打开“数据库”选项卡页面,如下图所示。
要连接到服务器,您需要一个服务器名称。您可以在服务器名称中输入 sawebserver,或者单击 Find… 按钮,这将弹出 Connect 对话框。当此对话框显示时,Sybase Central 正在尝试定位其网络中的所有服务器。搜索完成后,结果将显示在下图所示的 Find Servers 窗口中。

选择 sawebserver 并单击 OK。

我们还可以指定数据库名称(demo)和数据库文件(demo.db)。但是,由于服务器(sawebserver)中只运行一个数据库,因此它将自动默认为此服务器。要测试是否可以连接到服务器,请单击左下角的 Tools 按钮,然后选择 Test Connection。

点击 Test Connection 窗口和 Connect 窗口中的 OK。

“连接”窗口现在将显示数据库对象,如下图所示。

要查看此数据库中的表,请单击主窗格中的 Tables。示例数据库中的表如下图所示。

创建通过 URL 访问的 Web 服务
大多数 Web 服务都会调用存储过程。为此,您必须首先创建一个存储过程,然后创建一个调用此过程的 Web 服务。此 Web 服务的结果可以显示为 HTML 页面。
创建存储过程
在本教程中,我们将创建一个简单的存储过程,用于显示 Customers 表中的行。前面讨论的 Interactive SQL 工具可用于创建此存储过程。或者,您也可以使用“创建存储过程向导”,它会引导您完成创建存储过程的过程。
在此示例中,我们将使用 Interactive SQL 工具创建存储过程。您可以通过点击 Tools 菜单项来调出此工具,如下图所示。

这将打开“交互式 SQL”窗口。您需要提供登录信息(用户名:dba;密码:sql),与我们连接 Sybase Central 时的方式相同。此窗口上的 Tools 菜单提供对几个有用项的访问,例如 Table Name 和 Stored Procedure Name lookups;Index Consultant 等。

本教程中使用的存储过程 TestProc 直接输入到 SQL Statements 窗口中,如下图所示。

这是一个简单的存储过程,它显示 GROUPO.Customers 表中的所有列。
创建 Web 服务
同样,您可以使用 Sybase Central 管理控制台创建 Web 服务。在图 7 的窗口中,双击右侧的“Web 服务”列表项,将打开 Web 服务窗口。目前没有列出任何服务。您将创建一个新的 Web 服务,它调用您之前创建的 TestProc 存储过程。单击左侧“Web 服务设计任务”中的 Create Web Service。

这将打开向导,并指导您创建 Web 服务,如图所示。您需要为该服务提供名称。在此处,它被命名为 TestHtmlSvc。

点击“下一步”按钮。这将打开一个页面,允许您选择要创建的 Web 服务类型。您可以创建多种类型。引用程序窗口中的各种类型如下:Raw:SQL 语句或过程的结果集发送到客户端,不进行任何额外格式化。
XML:SQL 语句或过程的结果集被假定为 XML;如果不是,则结果集将转换为 XML RAW 格式。
HTML:SQL 语句或过程的结果集格式化为 HTML 文档,其中包含一个包含行和列的表格。
SOAP:请求必须是有效的 SOAP(简单对象访问协议)请求,并且结果集格式化为 SOAP 响应。
DISH:DISH 服务充当一组 SOAP 服务的代理,并为其每个 SOAP 服务生成 WSDL(Web 服务描述语言)文件。
在此示例中,我们将选择 HTML 类型,它将以 HTML 文档的形式显示结果集。

在上述窗口中突出显示 HTML 后,单击“下一步”按钮。这将显示访问此服务的授权。在此示例中,如图所示,未选择任何授权。由于不需要授权,我们需要指定其运行的授权级别。在这种情况下,我们将使用 DBA。

单击“下一步”按钮。这将弹出安全相关页面。将选择默认选项(无安全)。但是,对于互联网用户,这可能不是正确的选项。

单击“下一步”按钮。这将弹出向导窗口,您可以在其中指定一个语句,通常是对存储过程名称的调用,如下图所示。

点击“下一步”按钮。这将弹出下图所示的窗口,您可以在其中定义 URI 访问的处理方式。同样,这里有两个选项。由于此存储过程没有参数,因此选择默认选项。

点击“下一步”按钮。这将显示最终屏幕,您可以在其中为该服务插入评论,如图所示。

点击 Finish 按钮。这将创建服务 TestHtmlSvc,并选择所有选项,如下图所示。

配置服务后,您还可以在 Sybase Central 中与该服务进行交互。要修改授权、安全性等,请单击要修改的字段,然后从下拉列表中选择所需项。
尽管我们已经创建了 Web 服务和存储过程,但我们没有启动带有 HTTP 服务器的服务器。在我们启动启用 Web 访问的服务器之前,我们必须断开与 Sybase Central 的连接并关闭数据库服务器。
注意:我们可以在教程开始时就启动启用了 HTTP 服务器的数据库服务器。我们没有这样做,原因有三:
|
在停止服务器之前,我们应该断开所有连接到服务器的应用程序。我们只有一个应用程序连接(Sybase Central)。要断开连接,请选择 Connections->Disconnect。

要停止服务器,请右键单击系统托盘中的 SQL Anywhere 图标,然后从弹出菜单中选择 Restore。服务器窗口出现后(图 1),点击右下角的 Shutdown 按钮。这将停止我们的数据库服务器。

启用服务器的 Web 访问
以下列表显示了启动带有 HTTP 服务器的数据库服务器的语法。
列表 4
{dbeng10 | dbsrv10} -xs {none | web-protocols}... web-protocols : { http [ ( parm=value;...) ] | https ( [ FIPS={ ON | OFF }; ]parmlist ) } , ...
对于本例,使用以下列表中的命令启动服务器以监听 HTTP 请求。
列表 5
C:\HTTPWebServerDemo> dbsrv10 –n SAWebServer demo.db –n demo -xs http(port=8082)
这将启动数据库服务器并启用其 HTTP 服务器功能。HTTP 服务器将监听端口 8082。如果未指定端口,它将使用默认值 80。
显示 Web 服务的结果集
已知访问端口后,您只需在 IE 浏览器的 URL 地址中输入以下内容即可访问此服务。
https://:8082/demo/TestHtmlSvc结果将如下图所示显示。

直接使用 Interactive SQL 创建 Web 服务
虽然向导是创建 Web 服务的一个很好的界面,但也可以使用 Interactive SQL 工具直接创建服务。将 CREATE SERVICE 语句直接键入 Interactive SQL 的 SQL Statement 页面,并执行该语句,如图所示。

这会将此 Web 服务 EmployeeListHtml 添加到 Web 服务列表中,如下图所示。选择列表与 TestHtmlSvc 中使用的类似。

这可以通过浏览器访问,地址相同,只是服务名称不同。当浏览此 URL 时,将显示类似的 HTML 页面。
https://:8082/demo/EmployeeListHtml总结与结论
本教程描述了如何通过向 Web 服务发出 HTTP 请求来访问 SQL Anywhere 服务器中的数据。还介绍了直接使用 Interactive SQL 创建 Web 服务的方法。Interactive SQL 以及向导驱动的过程都使得在服务器上实现数据 Web 化变得非常容易。这对于希望在内网上托管数据以及从具有如此出色“移动”支持的数据库服务器中获益的公司来说,应该非常有吸引力。对于从 MS Access 迁移的用户,通过使用本文中描述的本机 Web 服务启用其数据 Web 化,以保留数据访问页的功能,这也应该非常有用。