分享
 
 
 

VB.Net编程实现Web Service的基础

王朝c#·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

Web Service目前可是目前计算机界一个非常流行的技术了,以至于有些人把Web Service列入目前最热门的十大技术之一。的确随着互联网的广泛应用和发展,尤其是电子商务的发展,出于互联网上各种复杂的应用系统和对更高安全性的要求,Web Service的横空出世的确满足了当前这些的要求和需要,其中的原因在下文中有详细的介绍。本文的主要内容是简要介绍一下Web Service的相关知识,以及使用Visual Basic .Net实现Web Services的具体方法和典型步骤。

一.Web Service为何物,我们为什么需要它:

Web Service的主要功能就是可以实现实现跨平台的功能调用。同时由于Web Service中使用XML来进行数据交换,所以在使用Web Service时不用担心防火墙的影响。由于Web Service集成了各种功能,并提供了一个友好的界面。所以在Web Service能够实现软件的重用。

另外Web Service的调用非常简单,简而言之调用互联网上的Web Service 就如同调用本地的组件一样简单,就是通过HTTP协议来调用互联网上的组件。至于具体的调用方法,请参阅本文第五节第七段的内容。所以Web Service就是互联网上的组件调用。

二.和Web Service相关的标准、协议:

Web Service是通过一系列标准和协议来保证和程序之间的动态连接和实现其安全调用的。其中主要的标准和协议是:XML、WSDL、SOAP、HTTP、UDDI。下面就简要介绍这些标准和协议。

1. XML:Web Service之间和Web Service和应用程序之间都是采用XML进行数据交换的。Web Service由于基于了XML,,这样Web Service在具备XML带来的优势的同时,也拥有了由于XML所带来的缺点。其中XML所带来的最重要缺点就是Web Service将大量的占有CPU的资源,因为XML数据要经过多步处理才能被系统使用。所以,即使调用一个功能较小的Web Service,也会感觉速度很慢,所以网络中对运行Web Service的主机要求是很高的。

2. HTTP:应用程序是提供HTTP协议来调用Web Service的。所以HTTP在Web Service调用过程中,起着通道的作用。

3. WSDL::是Web Service描述语言的简写。它是XML格式,其作用是描述Web Service,指示应用程序和与Web Servie交互的方法。当实现了某种Web Service服务时,为了让别的程序调用,就必须告诉此Web Service的接口。如:服务名称,服务所在的机器名称,监听端口号,传递参数的类型等等。WSDL就是规定了有关Web Services描述的标准。

4. UDDI:是Universal Description, Discovery, and Integration的缩写。简单说,UDDI用于集中存放和查找WSDL描述文件,起着目录服务器的作用。

5. SOAP:是"Simple Object Access Protocol"的缩写,即:简单对象访问协议。SOAP是一种消息传递的协议,它规定了Web Services之间传递信息的方式。

三.本文章的程序设计、调试和运行的环境:

(1).微软公司视窗2003中文企业版。

(2).Visual Studio .Net 2003企业构建版,.Net FrameWork SDK 1.1版本号4322。

(3).IIS服务启动。

四.Visual Basic .Net实现Web Service:

.Net 的大的推动了Web Service的发展,而Visual Studio .Net的出现又极大的推动了Web Service的的广泛应用。在Visual Studio .Net推出之前,编写一个Web Service是一项非常复杂的工作,同样调用这个Web Service也十分麻烦。由于Visual Studio .Net对Web Service提供了较强的支持,很多细致、烦杂的工作都由Visual Studio .Net自动完成了。这样就使得上述工作变得非常简单。甚至不了解Web Service和其相关的标准、协议,也可以使用Visual Studio .Net编写Web Service,并使用这个Web Service。下面就来用Visual Basic .Net实现一个Web Service,此Web Service和数据库相关,数据库类型选用的是Sql Server。此Web Service提供了二个函数功能调用,其一名称为Binding,用以实现数据绑定,其二名称为Update,用以更新数据库中的数据。

以下就是Visual Basic .Net实现此Web Service的具体步骤:

1. 启动Visual Studio .Net。

2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。

3. 将【项目类型】设置为【Visual Basic项目】。

4. 将【模板】设置为【ASP.NET Web 服务】。

5. 在【位置】的文本框中输入"http://localhost/UpdateDataWebService"后,单击【确定】按钮,这样在Visual Studio .Net就会计算机Internet信息服务的默认目录中创建一个名称为"UpdateDataWebService"文件夹,里面存放的是此项目的文件。具体如图01所示:

图01:创建Web Service项目对话框

6. 选中【解决方案资源管理器】中的"Service1.asmx"文件,单击鼠标右键,在弹出的菜单中选择【查看代码】,则进入Service1.asmx.vb的编辑界面。

7. 在Service1.asmx..vb的首部,在导入命名空间的代码区中添加下列代码,下列代码作用是导入命名空间System.Data.SqlClient:

Imports System.Data.SqlClient

8. 在Service1.asmx..vb文件的"Public Class Service1 Inherits System.Web.Services.WebService"代码后,添加下列代码,下列代码是在Web Service中定义二个功能调用:

<WebMethod ( ) > Public Function Binding ( ) As DataSet

Dim con As New SqlConnection ( "Server = localhost ; uid = sa ; pwd = ; database = northwind" )

Dim daCust As New SqlDataAdapter ( "Select * From Customers" , con )

Dim ds As New DataSet ( )

daCust.Fill( ds , "Cust" )

Return ds

End Function

<WebMethod ( ) > Public Function Update ( ByVal ds As DataSet ) As DataSet

Dim con As New SqlConnection ( "Server = localhost ; uid = sa ; pwd = ; database = northwind " )

Dim daCust As New SqlDataAdapter ( "Select * From Customers" , con )

Dim cbCust As New SqlCommandBuilder ( daCust )

daCust.Update ( ds , "Cust" )

Return ds

End Function

9. 保存上述的修改,一个简单的操作Sql Server数据库的Web Service就完成了,此时单击快捷键F5,此Web Service就开始运行,并可以对外提供服务了。具体如图02所示:

图02:Web Service提供服务是的界面

Service1.asmx.vb的代码清单如下:

Imports System.Web.Services

Imports System.Data.SqlClient

<WebService ( Namespace := "http://tempuri.org/" ) > _

Public Class Service1

Inherits System.Web.Services.WebService

<WebMethod ( ) > Public Function Binding ( ) As DataSet

'Modify this Connection string to use your SQL Server and log on.

Dim con As New SqlConnection ( "Server=localhost;uid=sa;pwd=;database=northwind" )

Dim daCust As New SqlDataAdapter ( "Select * From Customers" , con )

Dim ds As New DataSet ( )

daCust.Fill ( ds , "Cust" )

Return ds

End Function

<WebMethod ( ) > Public Function Update ( ByVal ds As DataSet ) As DataSet

Dim con As New SqlConnection ( "Server=localhost;uid=sa;pwd=;database=northwind" )

Dim daCust As New SqlDataAdapter ( "Select * From Customers" , con )

Dim cbCust As New SqlCommandBuilder ( daCust )

daCust.Update ( ds , "Cust" )

Return ds

End Function

#Region " Web 服务设计器生成的代码 "

Public Sub New ( )

MyBase.New ( )

'该调用是 Web 服务设计器所必需的。

InitializeComponent ( )

'在 InitializeComponent ( ) 调用之后添加您自己的初始化代码

End Sub

'Web 服务设计器所必需的

Private components As System.ComponentModel.IContainer

'注意:以下过程是 Web 服务设计器所必需的

'可以使用 Web 服务设计器修改此过程。

'不要使用代码编辑器修改它。

<System.Diagnostics.DebuggerStepThrough ( ) > Private Sub InitializeComponent ( )

components = New System.ComponentModel.Container ( )

End Sub

Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean )

'CODEGEN: 此过程是 Web 服务设计器所必需的

'不要使用代码编辑器修改它。

If disposing Then

If Not ( components Is Nothing ) Then

components.Dispose ( )

End If

End If

MyBase.Dispose ( disposing )

End Sub

#End Region

' Web 服务示例

' HelloWorld ( ) 示例服务返回字符串 Hello World。

' 若要生成项目,请取消注释以下行,然后保存并生成项目。

' 若要测试此 Web 服务,请确保 .asmx 文件为起始页

' 并按 F5 键。

'

'<WebMethod ( ) > Public Function HelloWorld ( ) As String

' HelloWorld = "Hello World"

' End Function

End Class

下面就来介绍Visual Basic .Net中使用这个Web Service提供的服务来更新数据库的实现方法。

五.在Visual Basic .Net调用Web Service提供的服务:

当Web Service已经处于对外提供服务状态,Visual Basic .Net就可以通过HTTP"调用"来使用这些服务了。当然前提是要了解Web Service对外提供服务所对应的URL,当了解到Web Service对应的URL后,Visual Basic .Net就像是使用本地的类库一样使用Web Service中提供的各种功能。所以有些人说,Web Service从实质上说,就是通过HTTP调用远程组件的一种方式。在Visual Basic .Net具体实现加入Web Service可参阅下面步骤中的第七步。

在下面介绍的这个数据库应用程序是通过使用上面的Web Service中提供的"Binding"服务,对程序中DataGrid组件实现数据绑定,提供使用Web Service中提供的"Update"服务,通过程序中的DataGrid来修改数据库。下面就是Visual Basic .Net中使用Web Service提供服务来编写数据库应用程序的具体步骤,:

1. 启动Visual Studio .Net。

2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。

3. 将【项目类型】设置为【Visual Basic项目】。

4. 将【模板】设置为【Windows应用程序】。

5. 在【名称】文本框中输入【TestWebService】。

6. 在【位置】的文本框中输入【E:\VS.NET项目】,然后单击【确定】按钮,这样在"E:\VS.NET项目"中就产生了名称为"TestWebService"文件夹,里面存放的就是TestWebService项目的所有文件。

7. 选择【解决方案资源管理器】|【引用】后,单击鼠标右键,在弹出的菜单中选择【添加Web 引用】,在弹出的【添加Web引用】对话框中的【地址】文本框中输入"http://localhost/ UpdateDataWebService /Service1.asmx "后,单击回车键后,可得图03所示界面。单击图03中【添加引用】按钮,则在【TestWebService】项目中加入了Web引用。请注意"http://localhost/ UpdateDataWebService /Service1.asmx "就是上面完成的Web Service对外提供服务的URL地址,具体可参阅图02所示:

图03:在【TestWebService】添加Web Service提供的服务

8. 从【工具箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件,并执行相应的操作:

一个DataGrid组件。

二个Button组件,,分别是Button1至Button2,并在这二个Button组件拖入Form1的设计窗体后,分别双击它们,则系统会在Form1.vb文件分别产生这二个组件的Click事件对应的处理代码。

9. 按照表01所示调整窗体中各组件属性的数值:

组件类型

组件名称

属性

设置结果

Form

Form1

Text

测试Web Service

Form1

MaximizeBox

False

Form1

FormBorderStyle

FixedSingle

Button

Button1

Text

绑定

Button1

FlatStyle

Flat

Button2

Text

修改

Button2

FlatStyle

Flat

表01:【TestWebService】项目中组件的主要属性及其对应数值

在调整完组件属性值后,再按照图04所示调整组件的位置和排列顺序:

图04:【TestWebService】项目中组件排列位置和顺序

10. 把Visual Studio .Net的当前窗口切换到Form1.vb的代码编辑窗口,并用下列代码替换Form1.vb中的Button1的Click事件对应的处理代码,下列代码功能是使用Web Service中提供的"Binding"服务对DataGrid组件实现数据绑定:

Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click

Dim MyService As New localhost.Service1 ( )

DataGrid1.DataSource = MyService.Binding ( )

DataGrid1.DataMember = "Cust"

End Sub

11. 用下列代码替换Form1.vb中的Button2的Click事件对应的处理代码,下列代码功能是使用Web Service中提供的"Update"服务实现通过DataGrid来修改数据库数据:

Private Sub Button2_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button2.Click

Dim MyService As New localhost.Service1 ( )

Dim ds As DataSet = DataGrid1.DataSource

Dim dsChanges As DataSet = ds.GetChanges ( )

If Not ( dsChanges Is Nothing ) Then

ds.Merge ( MyService.Update ( dsChanges ) , True )

End If

End Sub

12. 至此, 【TestWebService】项目的全部工作就完成了,调用Web Service是不是很简单。此时单击快捷键F5运行程序后。单击程序中的【绑定】按钮就会对程序中的DataGrid组件实现数据绑定,单击程序中的【修改】按钮,则程序会根据DataGrid中的内容来更新数据库,图05就是【TestWebService】的运行界面:

图05:【TestWebService】的运行界面

13. Form1.vb的代码清单如下:

Public Class Form1

Inherits System.Windows.Forms.Form

#Region " Windows 窗体设计器生成的代码 "

Public Sub New ( )

MyBase.New ( )

'该调用是 Windows 窗体设计器所必需的。

InitializeComponent ( )

'在 InitializeComponent ( ) 调用之后添加任何初始化

End Sub

'窗体重写处置以清理组件列表。

Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean )

If disposing Then

If Not ( components Is Nothing ) Then

components.Dispose ( )

End If

End If

MyBase.Dispose ( disposing )

End Sub

'Windows 窗体设计器所必需的

Private components As System.ComponentModel.IContainer

'注意:以下过程是 Windows 窗体设计器所必需的

'可以使用 Windows 窗体设计器修改此过程。

'不要使用代码编辑器修改它。

Friend WithEvents Button1 As System.Windows.Forms.Button

Friend WithEvents Button2 As System.Windows.Forms.Button

Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid

<System.Diagnostics.DebuggerStepThrough ( ) > Private Sub InitializeComponent ( )

Me.Button1 = New System.Windows.Forms.Button ( )

Me.Button2 = New System.Windows.Forms.Button ( )

Me.DataGrid1 = New System.Windows.Forms.DataGrid ( )

CType ( Me.DataGrid1 , System.ComponentModel.ISupportInitialize ) .BeginInit ( )

Me.SuspendLayout ( )

Me.Button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat

Me.Button1.Location = New System.Drawing.Point ( 56 , 216 )

Me.Button1.Name = "Button1"

Me.Button1.Size = New System.Drawing.Size ( 75 , 32 )

Me.Button1.TabIndex = 0

Me.Button1.Text = "绑定"

Me.Button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat

Me.Button2.Location = New System.Drawing.Point ( 168 , 216 )

Me.Button2.Name = "Button2"

Me.Button2.Size = New System.Drawing.Size ( 75 , 32 )

Me.Button2.TabIndex = 1

Me.Button2.Text = "修改"

Me.DataGrid1.DataMember = ""

Me.DataGrid1.Dock = System.Windows.Forms.DockStyle.Top

Me.DataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText

Me.DataGrid1.Name = "DataGrid1"

Me.DataGrid1.Size = New System.Drawing.Size ( 292 , 192 )

Me.DataGrid1.TabIndex = 2

Me.AutoScaleBaseSize = New System.Drawing.Size ( 6 , 14 )

Me.ClientSize = New System.Drawing.Size ( 292 , 273 )

Me.Controls.AddRange ( New System.Windows.Forms.Control ( ) {Me.DataGrid1 , Me.Button2 , Me.Button1} )

Me.Name = "Form1"

Me.Text = "测试Web Service"

CType ( Me.DataGrid1 , System.ComponentModel.ISupportInitialize ) .EndInit ( )

Me.ResumeLayout ( False )

End Sub

#End Region

Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click

Dim MyService As New localhost.Service1 ( )

DataGrid1.DataSource = MyService.Binding ( )

DataGrid1.DataMember = "Cust"

End Sub

Private Sub Button2_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button2.Click

Dim MyService As New localhost.Service1 ( )

Dim ds As DataSet = DataGrid1.DataSource

Dim dsChanges As DataSet = ds.GetChanges ( )

If Not ( dsChanges Is Nothing ) Then

ds.Merge ( MyService.Update ( dsChanges ) , True )

End If

End Sub

End Class

五.总结:

本文介绍了Web Service在目前大行其道的原因,并结合二个示例介绍Visual Basic .Net在Web Service的实现和调用上的强大功能,正如本文前面所说,Visual Studio .Net的出现使得web Service的这项原先繁杂的工作变得异常的简单,因为Visual Basic .Net已经替代我们作了这些描述性的、基础的底层工作,以至于你不需要了解为什么,只需要知道你要实现什么就可以编写、调用Web Service了。 在实现Web Service在数据库方面应用所显示

Web Service虽然以其强大功能和其优越性正在受到越来越多人的青睐,但也不可以回避它的缺点,譬如其速度慢就使得我几乎无法忍受。等等这样的原因也决定了Web Service并不适用于所有的环境。如单机运行程序和局域网上的同构应用程序等就尽量不采用Web Service方式。本文只是展示了Visual Studio .Net在Web Service上的初步用途,至于更复杂的使用、调用方法只能在后续的文章中介绍了,感兴趣的朋友,我们下一文再见!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有