将SQLXML 3.0用起来( Web Services, XML Views, Managed Classes ) [1]

** 将 SQLXML 3.0 用起来 ( Web Services, XML Views, Managed Classes ) **


小气的神

2002-5-25

Article Type: Overview

难度等级: 5/9

版本: 4.16

当 Web Services 不仅作为一种新技术,而且也作为一种对现有技术的整合时;它开始影响一些领域的发展,特别是 IBM , Microsoft 这样的公司都认为:企业建立 Web Services 应用时,应当先从企业内部应用开始的,然后扩展到公用的 Web Services 上。所以两家公司的产品线都毫不迟疑的向改造和支持 Web Services 方向上迈进,象 WebShpere 、 Tivoli 、 Lotus 、 Commerce Server 、 Biztalk Server 这样的产品都不断地改进和提供对 Web Services 的支持。

Web Services 的核心是 XML 技术,目前在数据库方面, IBM 、 Oracle 和 Microsoft 都增强了各自基于 XML 的数据库产品;并且都采用类似的 XML Extender 的方式来处理 XML 和关系数据库之间的交换,这使得纯 XML 数据库支持者几乎绝望。相比起来 Oracle 的 XDB 是给人印象是最深刻的。 Microsoft 在发布 SQL Server 2000 时就已经开始支持 XML 了。之后发布的 SQLXML 3.0 更是对其的一个增强。不过当发现一个存储过程可以轻易转换成一个 Web Services 的方法时,我都不知该怎么评价 SQLXML 本身了。

由于发布 SQL Server 2000 时还没有 Web Services ,另外 SQL Server 2000 中内建的对 XML 的支持并非都遵循最新的 W3C 标准,所以 SQLXML 更象是一个补丁,不过有些特性是非常突出的:

1. 对 Web Services ( SOAP )的支持。

2. 使用 HTTP 访问 SQL Server 的多种方式。

3. 定义映射文件同时支持 W3C 标准的 annotated XSD Schemas 和原来的 annotated XDR Schemas

4. SQLXML 的 dotNET 支持,允许使用 SQLXML Managed Classes 在 SQL Server 2000 上存取 XML 数据

让我们逐一看看这些特性吧:

对 Web Services 的支持

简单的说这个功能允许客户发出一个 SOAP/HTTP 请求给 SQL Server 2000 ,请求执行 SQL 2000 上的某个存储过程、自定义函数和模板,而 SQL Server 能够给客户相应的结果( Response )。步骤上也很简单,基本是两步:

1. 首先定义一个存储过程、自定义函数

存储过程: sp_getEmployees

CREATE PROCEDURE sp_getEmployees

@EmployeeID int

AS

select * from Employees where EmployeeID = @EmployeeID

GO

自定义函数: Add 和 getemployeesByID

CREATE FUNCTION [Add] ( @a int , @b int )

RETURNS int AS

BEGIN

return ( @a + @b )

END

CREATE FUNCTION [getEmployeesByID] ( @EmployeeID int )

RETURNS table

AS

RETURN ( Select * from Employees Where EmployeeID = @EmployeeID )


保险一点,我们将在 Query analyzer 中测试一下我们的存储过程和自定义函数。

exec sp_getEmployees 1

SELECT * FROM [Northwind].[dbo].getEmployeesByID

SELECT [Northwind].[dbo].Add


2. 使用 IIS Virtual Directory Management 建立 Virtual Directory 和 Virtual Name 并且进行配置。

( 建立一个 Norchwind 虚拟目录 )

( 设置该目录的虚拟名属性,新建一个名称 (Name):WebGet ,类型 (Type): soap )

( 点击 Configure 键,出现配置页,输入方法名 (method name) ,然后点击 … )

( 出现存储过程和自定义函数的列表,选择后确定。 sp 表示存储过程, udf 就是自定义函数了 )

当我们选择 SOAP 的功能时,可以有另外的一个设置窗口出现,这个 Configuration 允许我们进行一些更详细的设置,主要是 Row formatting 和 Output as 选项,这些设置将有什么产生怎样不同的影响呢?从下面我们产生的 Web Services 的 Proxy 的代码可以看得清楚一些:

XML Objects 方式可能是这样的:

public object [] sp_getEmployees( int EmployeeID) {

object [] results = this .Invoke("sp_getEmployees", new object [] {

EmployeeID});

return (( object [])(results[0]));

}


Dataset Objects 是这样的代码:

public System.Data.DataSet getEmployeesByID( int EmployeeID) {

object [] results = this .Invoke("getEmployeesByID", new object [] {

EmployeeID});

return ((System.Data.DataSet)(results[0]));

}


然后我们在 VS.NET 环境下,输入 Http://localhost/Northmind/WebGet?wsdl ( 有些奇怪的 URL ,不过它的确能工作 ) ,我们可以象其它 Web Services 一样使用了。这里省去具体的测试例子代码。

我们可以看到从一个存储过程甚至是自定义函数,都可以直接变成一个 WebServices 中的接口或方法,我想对于这个功能仍无法肯定的加以评论,不过它提供了一种方式,使得你可以使用 XML 的方式组织和访问你的数据,最重要的是这种方式支持 SOAP/HTTP 协议了。从而 Database Server 不再单纯的是一个数据层,所以应用构架上可能可以更加松散耦合,当然,单纯的使用 SQLXML 的这种技术将过于直接了,也许它目前更多的用在企业内部,无法相信你或我会把它直接放到 Internet 上。不过这是一个好的起点,这些功能可以和其他的技术或功能进行组合从而得到更高的应用,所以我认为数据库对 SOAP/HTTP 的支持是必要的,未来它可能成为评判一个 Database 的某种指标。

好吧,让我们看看下一个功能,这里我们会再看一些有关 SQLXML 的更多一些的内容,可是其中的许多是来源于 SQL 2000 发布时就有的 HTTP 访问和 XML 支持功能。

_ _

_


_

_ 特别说明: _

本文原创, CSDN 署名首发,所有文字和图片版权所有。未经授权请勿传播、转载或改编。

如果有问题或建议, 请发电子邮件给 [email protected]

Published At
Categories with Web编程
Tagged with
comments powered by Disqus