|
|
| 通过Web服务向客户端传送ADO.NET DataSet-ADO.NET |
|
来源:Dotnet频道 |
作者:采集 |
时间:2008-3-31 |
|
本篇文章将说明如何从服务器上向客户端传送ADO.NET DataSet,服务器将通过一个Web服务传送DataSet(因此服务器需要安装有IIS),我们能够通过IE、Opera或Netscape Navigator等标准的互联网浏览器查看DataSet。另外,我们还会创建一个简单的Windows SmartClient,以演示如何接收DataSet,并在data grids等标准的Windows组件中使用它。 Web服务是什么? Web服务能够轻易地解决当今困扰许多编程人员的根本性问题:即如何将信息由“这里”传送到“那里”。经过多年的发展,已经出现了多种在系统间传输数据的不同方式(包括FTP、ODBC、映射驱动器、DCOM等),但这些方法在解决易用性、开放性和可扩展性等问题方面都不如Web服务。Web服务的编写非常容易,它基于XML标准,可以以与IIS同样的方式进行扩展(通过在现有的硬件上添加更多的处理器或在服务器“农场”中添加服务器)。象COM对象那样,Web服务使我们能够创建逻辑块,供我们自己或别人使用。 多平台 尽管是由微软支持的,但Web服务决不是微软一家的技术。Web服务的一个优点是,它可以被其他的编程人员使用,而无需考虑他们所使用的平台(Mac、Unix, Linux, PocketPC等),所有的数据都是通过XML被发送到调用的系统的。在这种方式下,我们仍然可以选择使用VB.NET、C#、VB6等编程语言,而我们的商业伙伴可能使用的是PERL、PHP或Java与我们的系统相连。但在本篇文章中,我们将使用VB.NET编程语言。 在代码中标识Web服务 在VB.NET中将一个类标识为Web服务非常地简单,只要在类的定义前添加标识符即可。由于不要求对主代码进行任何变化,因此向开发Web服务的过渡相当地简单。 通过Web服务发送DataSet 使用Web服务发送ADO.NET数据与发送简单类型(例如字符串和整型)的数据一样简单。我们的数据可以来自数据库、XML文件或使用ADO.NET的高级数据构建命令在内存中构建的数据,在本篇文章中包括有各种情况的例子。读者需要清楚的是,每种方法都遵循着下面的基本模式: Public Function theFunctionName() as DataSet dim ds as DataSet … Return ds End Function 从Access 2002中提取数据的例子: Public Function ListPhoneNumbers_Access() As DataSet Dim myConnection As OleDbConnection Dim myDataAdapter As OleDbDataAdapter Dim myDataSet As DataSet myConnection = New OleDbConnection _ ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=" + _ Server.MapPath("/") + "\PhoneNumbers\PhoneNumbers.mdb") myDataAdapter = New _ OleDbDataAdapter("SELECT * FROM PhoneNumbers", myConnection) myDataSet = New DataSet() myDataAdapter.Fill(myDataSet, "PhoneNumbers") Return myDataSet End Function 从XML中提取DataSet的例子: Public Function ListPhoneNumbers_XML() As DataSet Dim ds As New DataSet() ds.ReadXml((Server.MapPath("/") + _ "\PhoneNumbers\PhoneNumbers.xml"), XmlReadMode.InferSchema) Return ds End Function 通过编程方式提供DataSet: Public Function ListPhoneNumbers_Default() As DataSet Dim ds As DataSet = New DataSet() Dim dt As DataTable = ds.Tables.Add("PhoneNumbers") Dim newRow As DataRow dt.Columns.Add("name") dt.Columns.Add("home") dt.Columns.Add("mobile") dt.Columns.Add("netWorth") newRow = dt.NewRow newRow("name") = "Jeff Laughlin" newRow("home") = "555-111-2222" newRow("mobile") = "555-111-3333" newRow("netWorth") = "Negligible" dt.Rows.Add(newRow) newRow = dt.NewRow newRow("name") = "Bill Gates" newRow("home") = "555-222-2222" newRow("mobile") = "555-222-3333" newRow("netWorth") = "33.6 Billion" dt.Rows.Add(newRow) newRow = dt.NewRow newRow("name") = "Steve Balmer" newRow("home") = "555-333-2222" newRow("mobile") = "555-333-3333" newRow("netWorth") = "15.1 Billion" dt.Rows.Add(newRow) Return ds End Function Web服务的部署 与传统的网站相似,尽管不是不会遇到任何问题,部署Web服务是相当简单的。 如果Web服务是通过Visual Studio.NET的集成环境开发的,则在本机上部署的问题都已经自动地解决了。如果想将自己的移植到其他的计算机上,可以选择使用Visual Studio.NET内置的向导工具重新部署自己的Web服务或者将Web服务的站点拷贝到其他计算机的一个文件夹中。如果选择了拷贝站点的方法,则我们还需要使用IIS MMC接口执行一个额外的步骤。我们需要将该文件夹标识为Virtual Directory Application,以便适当的配置能够得到ASP.NET处理器的处理。如果忘了将该文件夹指定为虚拟的目录应用,当在浏览器中加载URL时,就会得到下面的错误信息: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS。(这是一个在应用层次之外使用注册为allowDefinition='MachineToApplication'部件的错误,它可能是由没有在IIS中将虚拟目录配置为应用而引起的。) Web服务的测试 Visual Studio.NET提供了一个只使用浏览器的非常简单的Web服务测试方法,在浏览器的地址栏输入ASMX文件的地址,连接到Web服务,并对代码进行测试。 http://localhost/PhoneNumbers/PhoneNumbers.asmx |
|
|
|
|
|
|
|