WebService目前可是目前计算机界一个非常流行的技术了以至于有些人把WebService列入目前最热门的十大技术之一的确随着互联网的广泛应用和发展尤其是电子商务的发展出于互联网上各种复杂的应用系统和对更高安全性的要求WebService的横空出世的确满足了当前这些的要求和需要其中的原因在下文中有详细的介绍本文的主要内容是简要介绍一下WebService的相关知识以及使用VisualBasicNet实现WebServices的具体方法和典型步骤
一WebService为何物我们为什么需要它
WebService的主要功能就是可以实现实现跨平台的功能调用同时由于WebService中使用XML来进行数据交换所以在使用WebService时不用担心防火墙的影响由于WebService集成了各种功能并提供了一个友好的界面所以在WebService能够实现软件的重用
另外WebService的调用非常简单简而言之调用互联网上的WebService就如同调用本地的组件一样简单就是通过HTTP协议来调用互联网上的组件至于具体的调用方法请参阅本文第五节第七段的内容所以Web Service就是互联网上的组件调用
二和Web Service相关的标准协议
Web Service是通过一系列标准和协议来保证和程序之间的动态连接和实现其安全调用的其中主要的标准和协议是XMLWSDLSOAPHTTPUDDI下面就简要介绍这些标准和协议
XMLWeb Service之间和Web Service和应用程序之间都是采用XML进行数据交换的Web Service由于基于了XML这样Web Service在具备XML带来的优势的同时也拥有了由于XML所带来的缺点其中XML所带来的最重要缺点就是Web Service将大量的占有CPU的资源因为XML数据要经过多步处理才能被系统使用所以即使调用一个功能较小的Web Service也会感觉速度很慢所以网络中对运行Web Service的主机要求是很高的
HTTP应用程序是提供HTTP协议来调用Web Service的所以HTTP在Web Service调用过程中起着通道的作用
WSDL是Web Service描述语言的简写它是XML格式其作用是描述Web Service指示应用程序和与Web Servie交互的方法当实现了某种Web Service服务时为了让别的程序调用就必须告诉此Web Service的接口如服务名称服务所在的机器名称监听端口号传递参数的类型等等WSDL就是规定了有关Web Services描述的标准
UDDI是Universal Description Discovery and Integration的缩写简单说UDDI用于集中存放和查找WSDL描述文件起着目录服务器的作用
SOAP是Simple Object Access Protocol的缩写即简单对象访问协议SOAP是一种消息传递的协议它规定了Web Services之间传递信息的方式
三本文章的程序设计调试和运行的环境
()微软公司视窗中文企业版
()Visual Studio Net 企业构建版Net FrameWork SDK 版本号
()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的具体步骤
启动Visual Studio Net
选择菜单「文件」|「新建」|「项目」后弹出「新建项目」对话框
将「项目类型」设置为「Visual Basic项目」
将「模板」设置为「ASPNET Web 服务」
在「位置」的文本框中输入//localhost/UpdateDataWebService后单击「确定」按钮这样在Visual Studio Net就会计算机Internet信息服务的默认目录中创建一个名称为UpdateDataWebService文件夹里面存放的是此项目的文件具体如图所示
图创建Web Service项目对话框
选中「解决方案资源管理器」中的Serviceasmx文件单击鼠标右键在弹出的菜单中选择「查看代码」则进入Serviceasmxvb的编辑界面
在Serviceasmx……vb的首部在导入命名空间的代码区中添加下列代码下列代码作用是导入命名空间SystemDataSqlClient
Imports SystemDataSqlClient
在Serviceasmx……vb文件的Public Class Service Inherits SystemWebServicesWebService代码后添加下列代码下列代码是在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 ( )
daCustFill( 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 )
daCustUpdate ( ds Cust )
Return ds
End Function
保存上述的修改一个简单的操作Sql Server数据库的Web Service就完成了此时单击快捷键F此Web Service就开始运行并可以对外提供服务了具体如图所示:
图:Web Service提供服务是的界面
Serviceasmxvb的代码清单如下:
Imports SystemWebServices
Imports SystemDataSqlClient
<WebService ( Namespace := ) > _
Public Class Service
Inherits SystemWebServicesWebService
<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 ( )
daCustFill ( 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 )
daCustUpdate ( ds Cust )
Return ds
End Function
#Region Web 服务设计器生成的代码
Public Sub New ( )
MyBaseNew ( )
该调用是 Web 服务设计器所必需的
InitializeComponent ( )
在 InitializeComponent ( ) 调用之后添加您自己的初始化代码
End Sub
Web 服务设计器所必需的
Private components As SystemComponentModelIContainer
注意以下过程是 Web 服务设计器所必需的
可以使用 Web 服务设计器修改此过程
不要使用代码编辑器修改它
<SystemDiagnosticsDebuggerStepThrough ( ) > Private Sub InitializeComponent ( )
components = New SystemComponentModelContainer ( )
End Sub
Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean )
CODEGEN: 此过程是 Web 服务设计器所必需的
不要使用代码编辑器修改它
If disposing Then
If Not ( components Is Nothing ) Then
componentsDispose ( )
End If
End If
MyBaseDispose ( disposing )
End Sub
#End Region
Web 服务示例
HelloWorld ( ) 示例服务返回字符串 Hello World
若要生成项目请取消注释以下行然后保存并生成项目
若要测试此 Web 服务请确保 asmx 文件为起始页
并按 F 键
<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提供服务来编写数据库应用程序的具体步骤:
启动Visual Studio Net
选择菜单【文件】|【新建】|【项目】后弹出【新建项目】对话框
将【项目类型】设置为【Visual Basic项目】
将【模板】设置为【Windows应用程序】
在【名称】文本框中输入【TestWebService】
在【位置】的文本框中输入【E:\VSNET项目】然后单击【确定】按钮这样在E:\VSNET项目中就产生了名称为TestWebService文件夹里面存放的就是TestWebService项目的所有文件
选择【解决方案资源管理器】|【引用】后单击鼠标右键在弹出的菜单中选择【添加Web 引用】在弹出的【添加Web引用】对话框中的【地址】文本框中输入后单击回车键后可得图所示界面单击图中【添加引用】按钮则在【TestWebService】项目中加入了Web引用请注意就是上面完成的Web Service对外提供服务的URL地址具体可参阅图所示:
图:在【TestWebService】添加Web Service提供的服务
从【工具箱】中的【Windows窗体组件】选项卡中往Form窗体中拖入下列组件并执行相应的操作:
一个DataGrid组件
二个Button组件分别是Button至Button并在这二个Button组件拖入Form的设计窗体后分别双击它们则系统会在Formvb文件分别产生这二个组件的Click事件对应的处理代码
按照表所示调整窗体中各组件属性的数值
组件类型
组件名称
属性
设置结果
Form
Form
Text
测试Web Service
Form
MaximizeBox
False
Form
FormBorderStyle
FixedSingle
Button
Button
Text
绑定
Button
FlatStyle
Flat
Button
Text
修改
Button
FlatStyle
Flat
表:【TestWebService】项目中组件的主要属性及其对应数值
在调整完组件属性值后再按照图所示调整组件的位置和排列顺序:
图:【TestWebService】项目中组件排列位置和顺序
把Visual Studio Net的当前窗口切换到Formvb的代码编辑窗口并用下列代码替换Formvb中的Button的Click事件对应的处理代码下列代码功能是使用Web Service中提供的Binding服务对DataGrid组件实现数据绑定:
Private Sub Button_Click ( ByVal sender As SystemObject ByVal e As SystemEventArgs ) Handles ButtonClick
Dim MyService As New localhostService ( )
DataGridDataSource = MyServiceBinding ( )
DataGridDataMember = Cust
End Sub
用下列代码替换Formvb中的Button的Click事件对应的处理代码下列代码功能是使用Web Service中提供的Update服务实现通过DataGrid来修改数据库数据:
Private Sub Button_Click ( ByVal sender As SystemObject ByVal e As SystemEventArgs ) Handles ButtonClick
Dim MyService As New localhostService ( )
Dim ds As DataSet = DataGridDataSource
Dim dsChanges As DataSet = dsGetChanges ( )
If Not ( dsChanges Is Nothing ) Then
dsMerge ( MyServiceUpdate ( dsChanges ) True )
End If
End Sub
至此 【TestWebService】项目的全部工作就完成了调用Web Service是不是很简单此时单击快捷键F运行程序后单击程序中的【绑定】按钮就会对程序中的DataGrid组件实现数据绑定单击程序中的【修改】按钮则程序会根据DataGrid中的内容来更新数据库图就是【TestWebService】的运行界面:
图:【TestWebService】的运行界面
Formvb的代码清单如下:
Public Class Form
Inherits SystemWindowsFormsForm
#Region Windows 窗体设计器生成的代码
Public Sub New ( )
MyBaseNew ( )
该调用是 Windows 窗体设计器所必需的
InitializeComponent ( )
在 InitializeComponent ( ) 调用之后添加任何初始化
End Sub
窗体重写处置以清理组件列表
Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean )
If disposing Then
If Not ( components Is Nothing ) Then
componentsDispose ( )
End If
End If
MyBaseDispose ( disposing )
End Sub
Windows 窗体设计器所必需的
Private components As SystemComponentModelIContainer
注意以下过程是 Windows 窗体设计器所必需的
可以使用 Windows 窗体设计器修改此过程
不要使用代码编辑器修改它
Friend WithEvents Button As SystemWindowsFormsButton
Friend WithEvents Button As SystemWindowsFormsButton
Friend WithEvents DataGrid As SystemWindowsFormsDataGrid
<SystemDiagnosticsDebuggerStepThrough ( ) > Private Sub InitializeComponent ( )
MeButton = New SystemWindowsFormsButton ( )
MeButton = New SystemWindowsFormsButton ( )
MeDataGrid = New SystemWindowsFormsDataGrid ( )
CType ( MeDataGrid SystemComponentModelISupportInitialize ) BeginInit ( )
MeSuspendLayout ( )
MeButtonFlatStyle = SystemWindowsFormsFlatStyleFlat
MeButtonLocation = New SystemDrawingPoint ( )
MeButtonName = Button
MeButtonSize = New SystemDrawingSize ( )
MeButtonTabIndex =
MeButtonText = 绑定
MeButtonFlatStyle = SystemWindowsFormsFlatStyleFlat
MeButtonLocation = New SystemDrawingPoint ( )
MeButtonName = Button
MeButtonSize = New SystemDrawingSize ( )
MeButtonTabIndex =
MeButtonText = 修改
MeDataGridDataMember =
MeDataGridDock = SystemWindowsFormsDockStyleTop
MeDataGridHeaderForeColor = SystemDrawingSystemColorsControlText
MeDataGridName = DataGrid
MeDataGridSize = New SystemDrawingSize ( )
MeDataGridTabIndex =
MeAutoScaleBaseSize = New SystemDrawingSize ( )
MeClientSize = New SystemDrawingSize ( )
MeControlsAddRange ( New SystemWindowsFormsControl ( ) {MeDataGrid MeButton MeButton} )
MeName = Form
MeText = 测试Web Service
CType ( MeDataGrid SystemComponentModelISupportInitialize ) EndInit ( )
MeResumeLayout ( False )
End Sub
#End Region
Private Sub Button_Click ( ByVal sender As SystemObject ByVal e As SystemEventArgs ) Handles ButtonClick
Dim MyService As New localhostService ( )
DataGridDataSource = MyServiceBinding ( )
DataGridDataMember = Cust
End Sub
Private Sub Button_Click ( ByVal sender As SystemObject ByVal e As SystemEventArgs ) Handles ButtonClick
Dim MyService As New localhostService ( )
Dim ds As DataSet = DataGridDataSource
Dim dsChanges As DataSet = dsGetChanges ( )
If Not ( dsChanges Is Nothing ) Then
dsMerge ( MyServiceUpdate ( 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在数据库方面应用所显示