1、Web Service基本知识教案Web Service基本知识教案 1第一章 Web service简介 15.1.1 小结 13第二章 一个简单的Web Service案例 145.2.1 小结 19第三章 数据交换 195.3.1 小结 22第四章 存取站点对象 225.4.1 小结 25 Web Service基本知识教案第一章 Web service简介现在Internet正在不断地发展着,在互联网应用刚开始的时候,我们浏览的网页只是静态的,不可交互的。而现在随着技术的日益发展,将提供给网页浏览者一个可编程的Web 站点。这些站点将在组织、应用、服务、驱动上更加紧密的结合在一起,这些
2、站点将通过一些应用软件直接连接到另一个Web 站点,这些可编程的Web 站点相比传统的web站点来说,将变得更加能重复使用,也更加智能化!.net平台给我们提供了一种运行环境,即公用语言运行环境(CLR,Common Language Runtime)。对CLR来说,它提供了一种内置机制来创建一个可编程的站点,、对于Web 程序开发者和VB 程序员来说,这将是一致、熟悉的。这种模型是可以重复使用,也可以再扩展。 它包含了开放的Internet标准(HTTP, XML, SOAP, SDL)。以便它能被网页浏览者访问。ASP.NET 使用.asmx 文件来对Web Services的支持。.as
3、mx 文件和.aspx文件一样都属于文本文件。它包含在.aspx文件之中,成为ASP.NET应用程序的一部分。下面我们将举一个简单的例子来介绍.asmx文件,我们还是从“Hello,World”这个经典的例子说起,代码如下: Imports System.Web.Services Public Class HelloWorld :Inherits WebService Public Function SayHelloWorld( ) As String Return(Hello World) End Function End Class说明:1编码最开始必须进行WebService声明,从而定
4、义这个文件为一个Web Service。而且,在同一行中设置好编程语言的类型。 2然后,引入名字空间System.Web.Services。注意,这个名字空间属于最基本的元素,必须要包含它。 3接着,声明service中的功能模块,也就是类模块,这里的类名叫HelloWorld。这个类来源于基类WebService,而且应该是public类型。4最后,定义service的可访问方法。在表示方法的符号前面,要设置好自定义属性。对应于C#语言,属性值就是WebMethod;对应于VB,就是。如果没有设置这个属性,那么这个方法就不能从service中访问。一个局部应用可以使用任何的public类型的
5、类,但是只有具备WebMethod的类才可以通过SOAP被远程地访问。当对service的请求发生时,.asmx文件将自动地被ASP.NET运行环境所编译。随后的请求就可以由缓冲的预编译类型对象执行。为了测试编写好的代码,我们需用一个支持ASP.NET的Web服务器。假设这个Web服务器的名称叫做server1,其上有一个虚拟目录test。请跟随下面步骤开始测试:1将代码保存为HelloWorld.asmx 2放到Web服务器Foo的虚拟目录Bar下 3打开Internet Explorer5,在地址栏输入http:/server1/test/HelloWorld.asmx 这时,我们将看到关
6、于这个Web Service的公用方法也就是那些标记为WebMethod属性的字符,并得知调用这些方法可以使用的协议,比如SOAP或者HTTP GET。在Internet Explorer的地址栏中输入http:/Foo/Bar/HelloWorld.asmx?SDL后,将产生基于服务描述语言(Service Description Language :SDL)语法的具备相同信息的XML文件。这个SDL文件非常重要,客户端就是使用它来访问service。我们来看一下程序运行的效果:从客户端进行访问:除了允许开发者使用的创建Web Services的技术以外,Microsoft的.NET框架给客
7、户端提供了一套访问并使用Web Services的精致且高深的工具和代码。由于Web Services是基于如简单对象访问协议SOAP(Simple Object Access Protocol)和HTTP这样的开放协议标准的,从而,我们就可以使用这种客户端技术使用非ASP.NET的Web Services。当然,这也需用高水平地合成ASP.NET Web Services和这种客户端技术。SDK中有一个工具叫做WebServiceUtil.exe,我们可以使用它来下载一个Web Services的SDL描述语言,并创建表达这个Service的代理类。比如,当我们输入以下命令,就可以创建一个叫
8、做HelloWorld.cs的代理类:WebServiceUtil /c:proxy /pa:http:/someD这个类看起来与前面创建的类非常相似。它包含一个方法SayHelloWorld,该方法返回一个字符串。将这个代理类编译到一个应用程序中,然后调用这个代理类的方法,结果就是:通过HTTP,这个代理类包装SOAP请求,然后接收SOAP编码响应,最后汇集成为一个字符串。从客户端来看,代码是很简单的,返回的结果也很简单,就是一个字符串Hello World。同样为了对照方便,我们列出了使用VB、C#以及JScript三种语言编写的代码: C#HelloWorld myHelloWorld
9、= new HelloWorld();String sReturn = myHelloWorld.SayHelloWorld();VBDim myHelloWorld As New HelloWorld()Dim sReturn As String = myHelloWorld.SayHelloWorld()JScriptvar myHelloWorld:HelloWorld = new HelloWorld();var sReturn:String = myHelloWorld.SayHelloWorld();通过上面的例程,你可能对Web Services有了初步的印象。下面,我们将介绍W
10、eb Services中涉及到的各种数据类型,也就是Web Services方法的输入/输出参数类型。因为Web Services的执行是建立在XML架构之上的,所以它能够支持丰富的数据类型。下表列出了使用SOAP协议时Web Services支持的数据类型:类型描述基础类型也即标准基础类型,包括: String、Int32、Byte、Boolean、Int16、Int64、Single、Double、Decimal、DateTime(类似XML中的timeInstant)、 DateTime(类似XML中的date)、DateTime(类似XML中的time)以及XmlQualifiedNa
11、me(类似XML中的QName)。枚举类型枚举类型。例如:. public enum color red=1, blue=2 基础,枚举数组上面提到的类型数组。例如:string 和 int类和结构带有公用域或属性的类和结构,公用域和属性是串行结构的类和结构体数组上述类型的数组DataSetADO.NET DataSet 类型。DataSets能在类和结构体作为字段来使用。DataSet数组上述类型的数组XmlNodeXmlNode是XML文档片断的内存表示,就好像一个轻量级的XML文档对象模型。比如说, 就可以存储在一个XmlNode类型变量中。我们可以将XmlNodes作为参数传递,以SO
12、AP兼容方式附加到传递给Web Services的XML文档上。返回值也是同样原理。XmlNode也可看成是类或结构中的字段。XmlNode数组上述类型的数组 当通过SOAP或者HTTP GET/POST调用Web Services时,返回值可以是上述提到的任何一种数据类型。参数的数据类型使用SOAP协议时,通过值以及通过引用这两种输入/输出参数形式都可被支持。如果是通过引用的参数类型,就会产生两种方式的数据发送效果:到服务器的以及返回到客户端的。但是,当通过HTTP GET/POST传递输入参数给Web Services时,就只支持有限的数据类型了,而且还必须是通过值形式的参数。这些类型如下
13、: 类型描述基础类型 (有限的)支持大多数标准基础类型,包括: Int32、String、Int16、Int64、Boolean、Single、Double、Decimal、DateTime、TimeSpan、UInt16、UInt32、UInt64和Currency。从客户端来看,所有这些类型都转变为string。枚举类型比如: public enum color red=1, blue=2 。基础类型数组,枚举类型数组上述类型的数组,比如 string和int 现在我们将举一个例子,来说明上面我们介绍的数据类型: 这个例子利用WebServiceUtil.exe建立的SOAP代理来使用上面
14、列出的数据类型。注意:因为在.asmx文件中定义了多于一个的公用类,所以,我们必须要指定哪一个作为WebService类,这可以通过设置WebService标识的Class属性来实现,代码如下: 源文件webservicedatatype.asmx的内容如下:Imports SystemImports System.Web.ServicesPublic Enum Mode EOn = 1 EOff = 2End EnumPublic Class Order Public OrderID As Integer Public Price As DoubleEnd ClassPublic Class
15、 DataTypesSayHello方法显示从service中返回的一个字符串信息。 Public Function SayHello() As String Return Hello World! End FunctionSayHelloName方法返回一个字符串,并接受一个字符串参数。 Public Function SayHelloName(Name As String) As String Return Hello & Name End FunctionGetIntArray方法显示了如何返回一个整数数组。 Public Function GetIntArray() As Intege
16、r() Dim I As Integer Dim A(5) As Integer For I = 0 to 4 A(I) = I*10 Next Return A End FunctionGetMode方法返回一个枚举数值。 Public Function GetMode() As Mode Return Mode.EOff End FunctionGetOrder方法返回一个类。 Public Function GetOrder() As Order Dim MyOrder As New Order MyOrder.Price=34.5 MyOrder.OrderID = 323232 Re
17、turn MyOrder End FunctionGetOrders方法返回定单对象数组。 Public Function GetOrders() As Order() Dim MyOrder(2) As Order MyOrder(0) = New Order() MyOrder(0).Price=34.5 MyOrder(0).OrderID = 323232 MyOrder(1) = New Order() MyOrder(1).Price=99.4 MyOrder(1).OrderID = 645645 Return MyOrder End FunctionEnd Class程序运行的
18、效果如下: 当我们单击invoke的时候,将显示: 对于使用客户端应用程序而言,使用WebServiceUtil代理生成工具配置这些数据类型是透明的。请看关于Web Service的一个客户端例程:客户端访问的文件:clint.aspx,内容如下: div font: 8pt verdana; background-color:cccccc; border-color:black; border-width:1; border-style:solid; padding:10,10,10,10; Public Sub Page_Load(Sender As Object, E As EventA
19、rgs) Dim D As DataTypes = New DataTypes() Message1.InnerHtml = D.SayHello() Message1.InnerHtml = Message1.InnerHtml & D.SayHelloName(Bob) Message3.InnerHtml = Message3.InnerHtml & D.GetMode() Dim MyIntArray As Integer() = D.GetIntArray() Dim MyString As String = Contents of the Array: For I = 0 To M
20、yIntArray.Length - 1 MyString = MyString & MyIntArray(I) & Next Message2.InnerHtml = Message2.InnerHtml & MyString Dim MyOrder As Order = D.GetOrder() Message4.InnerHtml = Message4.InnerHtml & OrderID: & MyOrder.OrderID Message4.InnerHtml = Message4.InnerHtml & Price: & MyOrder.Price Dim MyOrders As
21、 Order() = D.GetOrders() Message5.InnerHtml = Message5.InnerHtml & OrderID: & MyOrders(0).OrderID Message5.InnerHtml = Message5.InnerHtml & Price: & MyOrders(0).Price End SubUsing DataTypes with Web Services Methods that return a Primitive (String): Methods that return an Array of Primitives (Intege
22、rs): Method that returns an Enum: Method that returns a Class/Struct: Method that returns an array of Classes/Structs: 在客户端程序中,我们使用来引入DataTypesService这个我们自定义的名字空间。然后在程序中只是调用了DataTypesService中的方法。现在我们来看如何生成名字空间:1 Datatype.vb中的内容:Imports System.Xml.SerializationImports System.Web.Services.ProtocolsImp
23、orts System.Web.ServicesNamespace DataTypesService Public Class DataType Inherits System.Web.Services.Protocols.SoapClientProtocolPublic Sub New()MyBase.New Me.Url=http:/localhost/QuickStart/aspplus/samples/services/DataTypes/VB/DataTypes.asmx End Sub Public Function SayHello() As String Dim results
24、() As Object = Me.Invoke(SayHello, New Object(0) ) Return CType(results(0),String) End Function Public Function BeginSayHello(ByVal callback As System.AsyncCallback, ByVal asyncState As Object) As System.IAsyncResult Return Me.BeginInvoke(SayHello, New Object(0) , callback, asyncState) End Function
25、Public Function EndSayHello(ByVal asyncResult As System.IAsyncResult) As String Dim results() As Object = Me.EndInvoke(asyncResult) Return CType(results(0),String) End Function Public Function SayHelloName(ByVal name As String) As String Dim results() As Object = Me.Invoke(SayHelloName, New Object()
26、 name) Return CType(results(0),String) End Function Public Function BeginSayHelloName(ByVal name As String, ByVal callback As System.AsyncCallback, ByVal asyncState As Object) As System.IAsyncResult Return Me.BeginInvoke(SayHelloName, New Object() name, callback, asyncState) End Function Public Function EndSayHelloName(ByVal asyncResult As System.IAsyncResult) As String Dim results() As Object = Me.EndInvoke(asyncResult) Return CType(results(0),String) End Function Public Function GetIntArray() As Integer() Dim results() As Object = Me.Invoke(GetIntArray, New Object(0) ) Return CType(r
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1