Web Service基本知识教案.docx
- 文档编号:10592070
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:34
- 大小:293.91KB
Web Service基本知识教案.docx
《Web Service基本知识教案.docx》由会员分享,可在线阅读,更多相关《Web Service基本知识教案.docx(34页珍藏版)》请在冰豆网上搜索。
WebService基本知识教案
WebService基本知识教案1
第一章Webservice简介1
5.1.1小结13
第二章一个简单的WebService案例14
5.2.1小结19
第三章数据交换19
5.3.1小结22
第四章存取站点对象22
5.4.1小结25
WebService基本知识教案
第一章Webservice简介
现在Internet正在不断地发展着,在互联网应用刚开始的时候,我们浏览的网页只是静态的,不可交互的。
而现在随着技术的日益发展,将提供给网页浏览者一个可编程的Web站点。
这些站点将在组织、应用、服务、驱动上更加紧密的结合在一起,这些站点将通过一些应用软件直接连接到另一个Web站点,这些可编程的Web站点相比传统的web站点来说,将变得更加能重复使用,也更加智能化!
.net平台给我们提供了一种运行环境,即公用语言运行环境(CLR,CommonLanguageRuntime)。
对 CLR来说,它提供了一种内置机制来创建一个可编程的站点,、对于Web程序开发者和VB程序员来说,这将是一致、熟悉的。
这种模型是可以重复使用,也可以再扩展。
它包含了开放的Internet标准(HTTP,XML,SOAP,SDL)。
以便它能被网页浏览者访问。
ASP.NET使用.asmx文件来对WebServices的支持。
.asmx文件和.aspx文件一样都属于文本文件。
它包含在.aspx文件之中,成为ASP.NET应用程序的一部分。
下面我们将举一个简单的例子来介绍.asmx文件,我们还是从“Hello,World”这个经典的例子说起,代码如下:
--文件名:
webservice\sisam.asmx-->
<%@WebServiceLanguage="VB"Class="HelloWorld"%>
ImportsSystem.Web.Services
PublicClassHelloWorld:
InheritsWebService
PublicFunction
Return("HelloWorld")
EndFunction
EndClass
说明:
1.编码最开始必须进行WebService声明,从而定义这个文件为一个WebService。
而且,在同一行中设置好编程语言的类型。
2.然后,引入名字空间System.Web.Services。
注意,这个名字空间属于最基本的元素,必须要包含它。
3.接着,声明service中的功能模块,也就是类模块,这里的类名叫HelloWorld。
这个类来源于基类WebService,而且应该是public类型。
4.最后,定义service的可访问方法。
在表示方法的符号前面,要设置好自定义属性。
对应于C#语言,属性值就是[WebMethod];对应于VB,就是。
如果没有设置这个属性,那么这个方法就不能从service中访问。
一个局部应用可以使用任何的public类型的类,但是只有具备[WebMethod]的类才可以通过SOAP被远程地访问。
当对service的请求发生时,.asmx文件将自动地被ASP.NET运行环境所编译。
随后的请求就可以由缓冲的预编译类型对象执行。
为了测试编写好的代码,我们需用一个支持ASP.NET的Web服务器。
假设这个Web服务器的名称叫做server1,其上有一个虚拟目录test。
请跟随下面步骤开始测试:
1.将代码保存为HelloWorld.asmx
2.放到Web服务器Foo的虚拟目录Bar下
3.打开InternetExplorer5,在地址栏输入http:
//server1/test/HelloWorld.asmx
这时,我们将看到关于这个WebService的公用方法-也就是那些标记为WebMethod属性的字符,并得知调用这些方法可以使用的协议,比如SOAP或者HTTPGET。
在InternetExplorer的地址栏中输入http:
//Foo/Bar/HelloWorld.asmx?
SDL后,将产生基于服务描述语言(ServiceDescriptionLanguage:
SDL)语法的具备相同信息的XML文件。
这个SDL文件非常重要,客户端就是使用它来访问service。
我们来看一下程序运行的效果:
从客户端进行访问:
除了允许开发者使用的创建WebServices的技术以外,Microsoft的.NET框架给客户端提供了一套访问并使用WebServices的精致且高深的工具和代码。
由于WebServices是基于如简单对象访问协议SOAP(SimpleObjectAccessProtocol)和HTTP这样的开放协议标准的,从而,我们就可以使用这种客户端技术使用非ASP.NET的WebServices。
当然,这也需用高水平地合成ASP.NETWebServices和这种客户端技术。
SDK中有一个工具叫做WebServiceUtil.exe,我们可以使用它来下载一个WebServices的SDL描述语言,并创建表达这个Service的代理类。
比如,当我们输入以下命令,就可以创建一个叫做HelloWorld.cs的代理类:
WebServiceUtil/c:
proxy/pa:
http:
//someD
这个类看起来与前面创建的类非常相似。
它包含一个方法SayHelloWorld,该方法返回一个字符串。
将这个代理类编译到一个应用程序中,然后调用这个代理类的方法,结果就是:
通过HTTP,这个代理类包装SOAP请求,然后接收SOAP编码响应,最后汇集成为一个字符串。
从客户端来看,代码是很简单的,返回的结果也很简单,就是一个字符串"HelloWorld"。
同样为了对照方便,我们列出了使用VB、C#以及JScript三种语言编写的代码:
C#
HelloWorldmyHelloWorld=newHelloWorld();
StringsReturn=myHelloWorld.SayHelloWorld();
VB
DimmyHelloWorldAsNewHelloWorld()
DimsReturnAsString=myHelloWorld.SayHelloWorld()
JScript
varmyHelloWorld:
HelloWorld=newHelloWorld();
varsReturn:
String=myHelloWorld.SayHelloWorld();
通过上面的例程,你可能对WebServices有了初步的印象。
下面,我们将介绍WebServices中涉及到的各种数据类型,也就是WebServices方法的输入/输出参数类型。
因为WebServices的执行是建立在XML架构之上的,所以它能够支持丰富的数据类型。
下表列出了使用SOAP协议时WebServices支持的数据类型:
类型
描述
基础类型
也即标准基础类型,包括:
String、Int32、Byte、Boolean、Int16、Int64、Single、Double、Decimal、DateTime(类似XML中的timeInstant)、DateTime(类似XML中的date)、DateTime(类似XML中的time)以及XmlQualifiedName(类似XML中的QName)。
枚举类型
枚举类型。
例如:
."publicenumcolor{red=1,blue=2}"
基础,枚举数组
上面提到的类型数组。
例如:
string[]和int[]
类和结构
带有公用域或属性的类和结构,公用域和属性是串行结构的
类和结构体数组
上述类型的数组
DataSet
ADO.NETDataSet类型。
DataSets能在类和结构体作为字段来使用。
DataSet数组
上述类型的数组
XmlNode
XmlNode是XML文档片断的内存表示,就好像一个轻量级的XML文档对象模型。
比如说,""就可以存储在一个XmlNode类型变量中。
我们可以将XmlNodes作为参数传递,以SOAP兼容方式附加到传递给WebServices的XML文档上。
返回值也是同样原理。
XmlNode也可看成是类或结构中的字段。
XmlNode数组
上述类型的数组
当通过SOAP或者HTTPGET/POST调用WebServices时,返回值可以是上述提到的任何一种数据类型。
参数的数据类型
使用SOAP协议时,"通过值"以及"通过引用"这两种输入/输出参数形式都可被支持。
如果是"通过引用"的参数类型,就会产生两种方式的数据发送效果:
到服务器的以及返回到客户端的。
但是,当通过HTTPGET/POST传递输入参数给WebServices时,就只支持有限的数据类型了,而且还必须是"通过值"形式的参数。
这些类型如下:
类型
描述
基础类型(有限的)
支持大多数标准基础类型,包括:
Int32、String、Int16、Int64、Boolean、Single、Double、Decimal、DateTime、TimeSpan、UInt16、UInt32、UInt64和Currency。
从客户端来看,所有这些类型都转变为string。
枚举类型
比如:
"publicenumcolor{red=1,blue=2}"。
基础类型数组,枚举类型数组
上述类型的数组,比如string[]和int[]
现在我们将举一个例子,来说明上面我们介绍的数据类型:
这个例子利用WebServiceUtil.exe建立的SOAP代理来使用上面列出的数据类型。
注意:
因为在.asmx文件中定义了多于一个的公用类,所以,我们必须要指定哪一个作为WebService类,这可以通过设置WebService标识的Class属性来实现,代码如下:
<%@WebServiceLanguage="C#"Class="DataTypes"%>
源文件webservice\datatype.asmx的内容如下:
<%@WebServiceLanguage="VB"Class="DataTypes"%>
ImportsSystem
ImportsSystem.Web.Services
PublicEnumMode
EOn=1
EOff=2
EndEnum
PublicClassOrder
PublicOrderIDAsInteger
PublicPriceAsDouble
EndClass
PublicClassDataTypes
‘SayHello方法显示从service中返回的一个字符串信息。
PublicFunction
Return"HelloWorld!
"
EndFunction
‘SayHelloName方法返回一个字符串,并接受一个字符串参数。
PublicFunction
Return"Hello"&Name
EndFunction
‘GetIntArray方法显示了如何返回一个整数数组。
PublicFunction
DimIAsInteger
DimA(5)AsInteger
ForI=0to4
A(I)=I*10
Next
ReturnA
EndFunction
‘GetMode方法返回一个枚举数值。
PublicFunction
ReturnMode.EOff
EndFunction
‘GetOrder方法返回一个类。
PublicFunction
DimMyOrderAsNewOrder
MyOrder.Price=34.5
MyOrder.OrderID=323232
ReturnMyOrder
EndFunction
‘GetOrders方法返回定单对象数组。
PublicFunction
DimMyOrder
(2)AsOrder
MyOrder(0)=NewOrder()
MyOrder(0).Price=34.5
MyOrder(0).OrderID=323232
MyOrder
(1)=NewOrder()
MyOrder
(1).Price=99.4
MyOrder
(1).OrderID=645645
ReturnMyOrder
EndFunction
EndClass
程序运行的效果如下:
当我们单击invoke的时候,将显示:
对于使用客户端应用程序而言,使用WebServiceUtil代理生成工具配置这些数据类型是透明的。
请看关于WebService的一个客户端例程:
客户端访问的文件:
clint.aspx,内容如下:
<%@ImportNamespace="DataTypesService"%>
div
{
font:
8ptverdana;
background-color:
cccccc;
border-color:
black;
border-width:
1;
border-style:
solid;
padding:
10,10,10,10;
}
PublicSubPage_Load(SenderAsObject,EAsEventArgs)
DimDAsDataTypes=NewDataTypes()
Message1.InnerHtml=D.SayHello()
Message1.InnerHtml=Message1.InnerHtml&D.SayHelloName("Bob")
Message3.InnerHtml=Message3.InnerHtml&D.GetMode()
DimMyIntArrayAsInteger()=D.GetIntArray()
DimMyStringAsString="ContentsoftheArray:
"
ForI=0ToMyIntArray.Length-1
MyString=MyString&MyIntArray(I)&"
"
Next
Message2.InnerHtml=Message2.InnerHtml&MyString
DimMyOrderAsOrder=D.GetOrder()
Message4.InnerHtml=Message4.InnerHtml&"
OrderID:
"&MyOrder.OrderID
Message4.InnerHtml=Message4.InnerHtml&"
Price:
"&MyOrder.Price
DimMyOrdersAsOrder()=D.GetOrders()
Message5.InnerHtml=Message5.InnerHtml&"
OrderID:
"&MyOrders(0).OrderID
Message5.InnerHtml=Message5.InnerHtml&"
Price:
"&MyOrders(0).Price
EndSub
10ptverdana">UsingDataTypeswithWebServices