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

类别:.NET开发 点击:0 评论:0 推荐:

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

 


小气的神

2002-5-25

 

Article Type: Overview 

难度等级:5/9       

版本:4.16

 

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

       Web Services的核心是XML技术,目前在数据库方面,IBMOracleMicrosoft都增强了各自基于XML的数据库产品;并且都采用类似的XML Extender的方式来处理XML和关系数据库之间的交换,这使得纯XML数据库支持者几乎绝望。相比起来OracleXDB是给人印象是最深刻的。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 ClassesSQL 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 formattingOutput as选项,这些设置将有什么产生怎样不同的影响呢?从下面我们产生的Web ServicesProxy的代码可以看得清楚一些:

 

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]

 

本文地址:http://com.8s8s.com/it/it45986.htm