摘要:获得有关如何设置 SQL Server 以便在异类环境中进行 Web 服务访问的详细讨论,并且了解更多有关 SQL Server 中 Web
服务的主要方案的信息。
下载相关的 WebServicePerlScript.exe 代码示例。
简介
在 SQL Server 中,我们向数据库引擎中添加了对本机 XML Web 服务的支持。这一功能是围绕众所周知的标准(如 SOAP 1.2
、WSDL 1.1 和 HTTP)设计的。将解决方案建立在这些标准之上,可以在大多数企业都拥有的异类环境中支持互操作性和服务扩张。
添加到 SQL Server 中的新的基础结构大大有利于直接向服务器外部公开 Web 服务,这是因为将本机 SOAP 堆栈内置到数据库
引擎中消除了使用中间层进程(如 IIS)达到这一目标的需要。它还使 SQL Server 能够作为组件参与面向服务的体系结构,
因为服务在这些新的体系结构中提供了黏合剂。本机 XML Web 服务使您既可以将存储过程作为 Web 服务公开,而且可以针对
数据库服务器执行特殊的 T-SQL 语句。实际上,我们已经基于 SOAP 创建了一种新的访问 SQL Server 的机制;SOAP 提供了
与当前的 Tabular Data Stream (TDS) 专用二进制协议几乎相同的功能。
我们首先详细考察如何设置 SQL Server 以便在异类环境中进行 Web 服务访问。我们将查看如何使用 Perl 脚本进行数据库
管理,并且简要考察一下其他可以使用本机 Web 服务的方案。
异类访问
请考虑这样一个环境,在这里,运行在非 Microsoft 操作系统上的应用程序需要连接到 SQL Server。对于此类应用程序,
我们的建议是使用 SQL Server 授权 (SQL-Auth) 连接到 SQL Server Web 服务。让我们考察一下该机制是如何工作的。
要公开 Web 服务,用户需要做的第一件事情是创建一个终结点。请观察如下所示的用于创建终结点的数据定义语言 (DDL)
语句。它将一个名为“GetCustomerInfo”的存储过程公开为 Web 服务。
注 尽管术语 WEBMETHOD 在概念上与 ASP.NET 中的 [WebMethod] 相同,但它在其他方面与 ASP.NET 无关。
CREATE ENDPOINT sql_auth_endpoint
STATE = STARTED AS HTTP( SITE = '*', PATH = '/sql/sql_auth',
AUTHENTICATION = (BASIC), PORTS=(SSL) )
FOR SOAP(
WEBMETHOD'GetCustomerInfo'
(
name='AdventureWorks.dbo.GetCustomerInfo',
schema=STANDARD ) ,
LOGIN_TYPE = MIXED,
WSDL = DEFAULT,
DATABASE = 'AdventureWorks',
BATCHES=ENABLED,
NAMESPACE = 'http://Adventure-Works/Customers/' )
为了保持 SQL Server 中的“设计安全”主题,我们在任何情况下都不允许对 SQL Server 进行 ANONYMOUS 访问。这意味
着所有连接都需要使用受支持的身份验证方案之一在 HTTP 传输级别进行身份验证。BASIC 是最常见和使用最广泛的身份验
证模型之一,因为它受到大多数客户端的支持。但是,它也是最不安全的选择,因为它要求以明文发送密码。为了避免该问题,
我们要求每当选择 BASIC 作为身份验证类型时,都要为 SSL 启用终结点。要启用 SSL,必须执行以下命令:
httpcfg set ssl /i IP:Port /h Hash /g Guid
其中,Hash 是证书哈希,Guid 是一个标识注册该证书的实体的全局唯一标识符 (GUID) 字符串。用户可以通过在 Certificate