简介
Microsoft® SQL Server™ 2005 提供了一个标准机制,用于使用 SOAP 通过 HTTP 访问数据库引擎。通过使用此机制,可将 SOAP/HTTP 请求发送到 SQL Server 以执行以下内容:
◆Transact-SQL 批处理语句,带参数或不带参数。
◆存储过程,扩展存储过程以及用户定义的标量值函数。
在 SQL Server 2005 之前,可用于连接 SQL Server 的唯一机制就是通过名为 Tabular Data Stream (TDS) 的自定义二进制协议。利用 SOAP/HTTP 访问,我们提供了一种开放的且具有相关文档的协议,可以作为后备手段,以连接到 SQL Server。提供 SOAP/HTTP 访问,可以使更多类型的客户端访问 SQL Server,其中包括“无痕迹安装”客户端,因为已不再需要在客户端设备上安装 Microsoft 数据访问组件 (MDAC) 栈以尝试连接到 SQL Server。它方便了与各种平台上的 .NET、SOAP 工具包、Perl 以及更多功能的互操作。由于 SOAP/HTTP 访问机制基于各种应用广泛的技术(如 XML 和 HTTP),它能内在地促进异构环境中与 SQL Server 的互操作性及对 SQL Server 的访问。任何能够分析 XML 和提交 HTTP 请求的设备现在都能够访问 SQL Server。
很多企业都采用异构的环境,其中运行于 UNIX 和 Linux 平台上的应用程序可能需要连接到 SQL Server。在以前,此类用户唯一可用的解决方案就是使用 JDBC 或 ODBC 驱动程序。SOAP/HTTP 访问现在提供另一个低成本的后备方法。对于 DBA 使用 Perl 编写了运行于 UNIX 上的脚本以管理 SQL Server 资源的场景,这非常有用。在开发使用智能集成开发环境 (IDE)(其中内置了 SOAP/HTTP 支持,如 Microsoft Visual Studio® .NET 或 Jbuilder 就属于此类 IDE)开发客户端应用程序时,这也十分有用。这些 IDE 将生成特定的代理代码,这些代理代码对 SQL Server 通信进行抽象,并提供客户端应用程序可以使用的对象。使用 SOAP/HTTP 还实现了随时随地对 SQL Server 的访问,而这使得开发用于移动设备或偶尔连接的设备的应用程序更为容易。一旦建立了连接,并且服务器已开始处理请求,则可以使用 TDS 所基于的客户端上的现有机制(如使用 SqlClient、ODBC 和 OLEDB)对此进行监视。
要求
SQL Server 2005 本机 Web 服务要求使用 Microsoft Windows Server™ 2003 作为操作系统,因为它们依赖于此版本提供的内核模式 http 驱动程序 http.sys。由于 SQL Server 利用内核模式 http.sys 驱动程序,所以不必安装 IIS 以在 SQL Server 外公开 Web 服务,这就简化了管理。
应该根据应用程序要求决定是否安装 IIS。
例如,特定的应用程序可能从使用显式中间层而受益。在这种情况下,IIS 将很有用。
HTTP 终结点
为了将 SQL Server 设置为可以本机侦听 HTTP SOAP 请求的 Web 服务,需要创建 HTTP 终结点并定义该终结点公开的方法。当创建 HTTP 终结点时,必须使用唯一的 URL 进行创建,将使用此 URL 侦听传入的 HTTP 请求。例如,如果您使用 URL“http://servername/sql”创建一个终结点,发送到 http://servername/sql 的 SOAP 请求将由 http.sys. 拾取,然后将此 SOAP 请求路由到承载与该 URL 关联的终结点的 SQL Server 实例。请求将从此处传递到 SQL Server 内的 SOAP 处理层。
SQL Server 实例可以具有多个终结点,每个终结点都可以将任意数量的存储过程(通过使用 Transact-SQL 或 CLR 实现)公开为终结点上的 WebMethod,且可以通过 SOAP 远程过程调用 (RPC) 而调用。WebMethod 可以具有与所公开的实际存储过程不同的名称。WebMethod 名称就是在 WSDL 中作为操作名称向用户显示的名称。
注意 务必指出,终结点中的 WebMethod 子句是特定于 SQL Server 2005 的,与 ASMX WebMethod 属性无关。
用户可以对终结点执行 AdHoc Transact-SQL 语句。这可以通过使用数据定义语言 (DDL) 中的一个可选子句在终结点上允许进行批处理而实现。允许进行批处理将隐式地将名为“sqlbatch”的 WebMethod 公开给用户。在接下来的各节中将进一步对这些概念进行说明。
创建 HTTP 终结点
HTTP 终结点是使用 Transact-SQL DDL 创建和管理的。创建 HTTP 终结点是允许 HTTP/SOAP 访问 SQL Server 2005 的第一步。每个终结点都具有名称和一个选项集合,这些选项一起定义终结点的行为。
为了演示如何使用“创建 HTTP 终结点”的内容,让我们看看 Hello World 示例,以了解如何通过 SQL Server Web 服务调用存储过程。
首先,使用以下 T-SQL 在主数据库中创建名为“hello world”的存储过程。此存储过程只是显示输入参数中提供的字符串。
|
然后,使用以下 T-SQL 创建 HTTP 终结点,此终结点将允许将此存储过程作为一个 WebMethod 进行访问:
|
所有终结点均存储在主数据库中,在元数据视图 master.sys.http_endpoints 中。除非进行定义,否则终结点不会具有任何 SOAP 方法。在上例中,我们将存储过程 master.dbo.hello_world 作为“hello_world”WebMethod 公开;该 WebMethod 可以使用任何名称,如可以命名为“http://tempuri.org”命名空间下的“testproc1”。如果将 WSDL 子句的值指定为 DEFAULT,将使终结点使用默认格式对请求 WSDL 生成的 WSDL 进行响应。通过在上面的语句中设置 WSDL=NONE,可以取消 WSDL 生成。在接下来的部分中,我们将对 WSDL 生成的细节进行讨论。