Web Service基本知识教案.docx

上传人:b****7 文档编号:10592070 上传时间:2023-02-21 格式:DOCX 页数:34 大小:293.91KB
下载 相关 举报
Web Service基本知识教案.docx_第1页
第1页 / 共34页
Web Service基本知识教案.docx_第2页
第2页 / 共34页
Web Service基本知识教案.docx_第3页
第3页 / 共34页
Web Service基本知识教案.docx_第4页
第4页 / 共34页
Web Service基本知识教案.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

Web Service基本知识教案.docx

《Web Service基本知识教案.docx》由会员分享,可在线阅读,更多相关《Web Service基本知识教案.docx(34页珍藏版)》请在冰豆网上搜索。

Web Service基本知识教案.docx

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

PublicFunctionSayHelloWorld()AsString

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中返回的一个字符串信息。

PublicFunctionSayHello()AsString

Return"HelloWorld!

"

EndFunction

‘SayHelloName方法返回一个字符串,并接受一个字符串参数。

PublicFunctionSayHelloName(NameAsString)AsString

Return"Hello"&Name

EndFunction

‘GetIntArray方法显示了如何返回一个整数数组。

PublicFunctionGetIntArray()AsInteger()

DimIAsInteger

DimA(5)AsInteger

ForI=0to4

A(I)=I*10

Next

ReturnA

EndFunction

‘GetMode方法返回一个枚举数值。

PublicFunctionGetMode()AsMode

ReturnMode.EOff

EndFunction

‘GetOrder方法返回一个类。

PublicFunctionGetOrder()AsOrder

DimMyOrderAsNewOrder

MyOrder.Price=34.5

MyOrder.OrderID=323232

ReturnMyOrder

EndFunction

‘GetOrders方法返回定单对象数组。

PublicFunctionGetOrders()AsOrder()

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"%>

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

MethodsthatreturnaPrimitive(String):

MethodsthatreturnanArrayofPrimitives(Integers):

MethodthatreturnsanEnum:

MethodthatreturnsaClass/Struct:

MethodthatreturnsanarrayofClasses/Structs:

在客户端程序中,我们使用<%@ImportNamespace="DataTypesService"%>来引入DataTypesService这个我们自定义的名字空间。

然后在程序中只是调用了DataTypesService中的方法。

现在我们来看如何生成名字空间:

1.Datatype.vb中的内容:

ImportsSystem.Xml.Serialization

ImportsSystem.Web.Services.Protocols

ImportsSystem.Web.Services

NamespaceDataTypesService

PublicClassDataType

InheritsSystem.Web.Services.Protocols.SoapClientProtocol

PublicSubNew()

MyBase.NewMe.Url="http:

//localhost/QuickStart/aspplus/samples/services/DataTypes/VB/DataTypes.asmx"EndSub

PublicFunction

//tempuri.org/SayHello")>SayHello()AsString

Dimresults()AsObject=Me.Invoke("SayHello",NewObject(0){})

ReturnCType(results(0),String)

EndFunction

PublicFunctionBeginSayHello(ByValcallbackAsSystem.AsyncCallback,ByValasyncStateAsObject)AsSystem.IAsyncResult

ReturnMe.BeginInvoke("SayHello",NewObject(0){},callback,asyncState)

EndFunction

PublicFunctionEndSayHello(ByValasyncResultAsSystem.IAsyncResult)AsString

Dimresults()AsObject=Me.EndInvoke(asyncResult)

ReturnCType(results(0),String)

EndFunction

PublicFunction

//tempuri.org/SayHelloName")>SayHelloName(ByVal

=true)>nameAsString)AsString

Dimresults()AsObject=Me.Invoke("SayHelloName",NewObject(){name})

ReturnCType(results(0),String)

EndFunction

PublicFunctionBeginSayHelloName(ByValnameAsString,ByValcallbackAsSystem.AsyncCallback,ByValasyncStateAsObject)AsSystem.IAsyncResult

ReturnMe.BeginInvoke("SayHelloName",NewObject(){name},callback,asyncState)

EndFunction

PublicFunctionEndSayHelloName(ByValasyncResultAsSystem.IAsyncResult)AsString

Dimresults()AsObject=Me.EndInvoke(asyncResult)

ReturnCType(results(0),String)

EndFunction

PublicFunction

//tempuri.org/GetIntArray"),_

System.Xml.Serialization.XmlArrayAttribute(IsNullable:

=true,ArrayType:

=System.Xml.Serialization.XmlArrayType.Soap),_

System.Xml.Serialization.XmlArrayItemAttribute("int",IsNullable:

=false)>GetIntArray()AsInteger()

Dimresults()AsObject=Me.Invoke("GetIntArray",NewObject(0){})

ReturnCType(r

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1