将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](1) SELECT [Northwind].[dbo].[Add](1,3) |
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署名首发,所有文字和图片版权所有。未经授权请勿传播、转载或改编。
如果有问题或建议,请发电子邮件给new2001@msn.com