还剩17页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
j__a 调用webservi__的各种方法总结 现在webservi__加xml技术已经逐渐成熟,但要真正要用起来还需时日!! 由于毕业设计缘故,我看了很多关于webservi__方面的知识,今天和大家一起来研究研究webservi__的各种使用方法
一、利用jdkweb服务api实现,这里使用基于 SOAPmessage 的 Web 服务
1.首先建立一个Webservi__sEndPoint packageHello; @WebServi__ publicclassHello{@WebMethod publicStringhelloStringname{ returnHello+name+\n; } publicstaticvoid__inString[]args{ //createandpublishanendpoint Hellohello=newHello; Endpointendpoint=Endpoint.publishhttp://localhost:8080/hellohello; } }
2.使用 apt 编译 Hello.j__a例apt-d[存放编译后的文件目录]Hello.j__a会生成 jaws目录
3.使用j__aHello.Hello运行,然后将浏览器指向http://localhost:8080/hellowsdl就会出现下列显示
4.使用wsimport 生成客户端 使用如下wsimport-p.-keep http://localhost:8080/hellowsdl 这时,会在当前目录中生成如下文件
5.客户端程序 1classHelloClient{ 2publicstaticvoid__inStringargs[]{ 3HelloServi__servi__=newHelloServi__; 4HellohelloProxy=servi__.getHelloPort; 5Stringhello=helloProxy.hello你好; 7} 8}9 以上方法还稍显繁琐,还有更加简单的方法
二、使用xfire,我这里使用的是myeclipse集成的xfire进行测试的 利用xfire__WebServi__,可以有三种方法 1一种是从j__abean 中生成; 2 一种是从wsdl文件中生成; 3 还有一种是自己建立webservi__ 步骤如下 用myeclipse建立webservi__工程,目录结构如下 首先建立webservi__接口, 代码如下 6 publicStringexampleStringmessage;7 8} 接着实现这个借口 6 publicStringexampleStringmessage{7 returnmessage;8 }9 10} 修改servi__.xml 文件,加入以下代码 把整个项目部署到tomcat服务器中 ,打开浏览器,输入http://localhost:____/HelloWorld/servi__s/HelloWorldServi__wsdl可以看到如下 然后再展开HelloWorldServi__后面的wsdl可以看到客户端实现如下 http://localhost:____/HelloWorld/servi__s/HelloWorldServi__;2021 try22 { 23 这里再说点题外话,有时候我们知道一个wsdl地址,比如想用j__a客户端引用.net 做得webservi__,使用myeclipse引用,但是却出现无法通过验证的错误,这时我们可以直接在类中引用,步骤如下 1publicstaticvoid__inString[]argsthrows__lformedURLEx__ptionEx__ption{2 //TODOAuto-generatedmethodstub3 Servi__s=newO__ectServi__Factory.createIHelloWorldServi__.class;4 XFireProxyFactoryxf=newXFireProxyFactoryXFireFactory.newInstan__.getXFire;5 6 7//远程调用.net__的webservi__8Clientc=newClientnewURL;9 O__ect[]o=c.invoke__CheckOnlinenewString[]{531086641591284436};10 11//调用.net本机__的webservi__12Clientc1=newClientnewURLhttp://localhost/zj/Servi__.a__xwsdl;13O__ect[]o1=c
1.invokeHelloWorldnewString[]{};14 15}
三、使用axis
1.4调用webservi__方法 前提条件下载axis
1.4包和tomcat服务器 ,并将axis文件夹__到tomcat服务器的webapp文件夹中 这里我就说一下最简单的方法 首先建立一个任意的j__a类(例如HelloWorld.j__a),__到axis文件夹下将其扩展名改为jws,然后重新启动tomcat,在浏览器中输入http://localhost:____/axis/HelloWorld.jwswsdl,就会得到一个wsdl文件,其客户端调用方法如下 17 StringwsdlUrl=http://localhost:____/axis/HelloWorld.jwswsdl;18 StringnameSpa__Uri=http://localhost:____/axis/HelloWorld.jws;19 Stringservi__Name=HelloWorldServi__;20 StringportName=HelloWorld;21 27 }2829}30
四、使用axis2__webservi__(这里首先感谢李宁老师) 使用axis2 需要先下载 同理,也需要将axis2__到webapp目录中在axis2中部署webservi__有两种方法, 第一种是pojo方式,这种方式比较简单,但是有一些限制,例如部署的类不能加上包名 第二种方式是利用xml发布webservi__,这种方法比较灵活,不需要限制类的声明 下面分别说明使用方法
1.pojo方式在Axis2中不需要进行任何的配置,就可以直接将一个简单的POJO发布成WebServi__其中POJO中所有的public方法将被发布成WebServi__方法先实现一个pojo类 1publicclassHelloWorld{2 publicStringgetNameStringname3 {4 return你好 +name;5 } 6 publicintaddintaintb7 {8 returna+b;9 } 10}11 由于这两个方法都是public类型,所以都会发布成webservi__编译HelloWorld类后,将HelloWorld.class文件放到%tomcat%\webapps\axis2\WEB-INF\pojo目录中(如果没有pojo目录,则建立该目录),然后打开浏览器进行测试输入一下url http://localhost:8080/axis2/servi__s/listServi__s会列出所有webservi__这是其中的两个webservi__列表,接着,在客户端进行测试首先可以写一个封装类,减少编码,代码如下;13 privateQNameopAddEntry; 14 publicStringWSUrl;15 publicRPCServi__ClientsetOptionthrowsAxisFault16 {17 RPCServi__Clientservi__Client=newRPCServi__Client;18 Optionsoptions=servi__Client.getOptions;19 EndpointReferen__targetEPR=newEndpointReferen__WSUrl;20 options.setTotargetEPR;21 returnservi__Client;22 }23 24 publicQNamegetQnameStringOption{25 26 returnnewQNameQUrlOption;27 }28//返回String29 publicStringgetStrStringOptionthrowsAxisFault30 {31 RPCServi__Clientservi__Client=this.setOption; 32 33 opAddEntry=this.getQnameOption;34 35 Stringstr=Stringservi__Client.invokeBlockingopAddEntry 36 newO__ect[]{}newClass[]{String.class}
[0];37 returnstr;38 }39// 返回一维String数组40 publicString[]getArrayStringOptionthrowsAxisFault41 {42 RPCServi__Clientservi__Client=this.setOption; 43 44 opAddEntry=this.getQnameOption;45 46 String[]strArray=String[]servi__Client.invokeBlockingopAddEntry 47 newO__ect[]{}newClass[]{String[].class}
[0];48 returnstrArray;49 }50 //从WebServi__中返回一个对象的实例51 publicO__ectgetO__ectStringOptionO__ectothrowsAxisFault52 { 53 RPCServi__Clientservi__Client=this.setOption; 54 QNameqname=this.getQnameOption;55 O__ecto__ect=servi__Client.invokeBlockingqnamenewO__ect[]{}newClass[]{o.getClass}
[0];56 returno__ect;57 }58 59///////////////////////////////////////// 读者可以自己封装数据类型,如intbytefloat等数据类型60}61客户端调用方法http://localhost:____/axis2/servi__s/HelloWorld;HelloWorldhello=HelloWorldws.getO__ectgetNameHelloWorld.class; 使用servi__.xml发布webservi__,这种方式和直接放在pojo目录中的POJO类不同要想将MyServi__类发布成WebServi__,需要一个servi__s.xml文件,这个文件需要放在META-INF目录中,该文件的内容如下 servi__name=HelloWorld description HelloWorldwebservi__ /description parametername=Servi__Class servi__.HelloWorld /parameter messageRe__ivers messageRe__ivermep=其中servi__元素用于发布WebServi__,一个servi__元素只能发布一个WebServi__类,name属性表示WebServi__名,如下面的URL可以获得这个WebServi__的WSDL内容http://localhost:8080/axis2/servi__s/myServi__wsdl除此之外,还有直接可以在其中制定webservi__操作方法可以这样些servi__.xml文件1servi__name=HelloWorld2 description3 HelloWorldservi__4 /description5 parametername=Servi__Class6 servi__.HelloWorld 如果要发布多个webservi__,可以在文件两段加上servi__Groupservi__/servi__...servi__/servi__/servi__Group发布 **************************************************************************Web Servi____实用指南 Web Servi__平台是一套标准,它定义了应用程序如何在Web上实现交互性操作你可以用你喜欢的任何语言,在任__台上编写Web Servi__,只要我们可以通过Web Servi__标准对这些服务进行查询和访问即可 本文选用VB.NET平台,向你讲述Web Servi____的方法与技巧
一、Web Servi__平台的组成技术
1.什么是Web Servi__ 从表面上看,Web Servi__是一个应用程序,一个能够通过Web进行调用的APIApplication Programming Inte_____,应用编程接口即是说,你能够用编程的方法,通过Web调用,来实现某个功能的应用程序 从深层次上看,Web Servi__是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络通常为Web中被描述、发布、查找以及通过Web来调用 Web Servi__是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Servi__能与其他兼容的组件进行交互操作它可以使用标准的Internet协议,将功能体现在Internet和企业内部网上
2.Web Servi__平台的组成技术 通常情况下,Web Servi__由以下3个主要技术部分组成 1XML和XSD XML Extensible __rkup Language,可扩展的标记语言是Web Servi__平台中表示数据的基本格式XML解决了数据表示的问题,但它没有定义标准的数据类型,更没有定义怎样去扩展数据类型例如,整形数到底代表什么?16位,32位,还是64位?这些细节对实现交互操作都是很重要的W3C万维网联盟制定的XML Sche__XSD即是专门解决这个问题的一套标准它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型Web Servi__平台就是用XSD作为其数据类型系统的当你用某种编程语言如VB.NET或C#来编写一个Web Servi__应用程序时,为了符合Web Servi__标准,所有你使用的数据类型都必须被转换为XSD类型 2SOAP Web Servi__应用程序编写好以后,我们需要去调用它,SOAP______ O__ect Ac__ss Protocol,简单对象访问协议提供了标准的RPC远程过程调用方法来调用Web Servi__SOAP规范定义了SOAP消息的格式,以及怎样通过HTTP协议来使用SOAPSOAP基于XML和XSD 3WSDL WSDLWeb Servi__ Description Language,Web服务说明语言是一个基于XML的语言,用于描述Web Servi__及其函数、参数和返回值因为其基于XML,所以WSDL既是机器可阅读的,又是__者可阅读的一些最新的__工具既能根据你的Web Servi__生成WSDL文档,又能导入WSDL文档,生成调用相应的Web Servi__代码
3.Web Servi__工作流程 Web Servi__的工作流程如图1所示 在使用Web Servi__时,包括3个阶段的通信,在图1中,列出了3个阶段的通信流程第1阶段的通信被称为发现阶段Discover,其主要作用是确定在服务器上有哪些服务 经过发现阶段我们一般可以确定服务器一共提供了哪些服务在使用这些服务之前我们还必须知道这些服务支持什么样的界面所以Web Servi__第2阶段的通信就是发送请求获得Web Servi__描述语言WSDL 第3阶段的通信主要是向Web Servi__服务器发送信息服务请求,并等待服务器的应答
二、.NET中关于Web Servi__的技术要素 利用.NET中专为Web Servi____的类接口,我们可以轻松地创建一个Web Servi__程序下面介绍一些主要的技术要素
1.Web Servi__ 处理指令 Web Servi__处理指令为ASP.NET环境提供了必要的信息,如实现XML Web Servi__s功能的类以下是.a__x文件中Web Servi__处理指令的示例 <%@ WebServi__ Language=vb Codebehind=Servi__
1.a__x.vb Class=WebServi__
1.Servi__1 %> 其中,Language属性指示__XML Web Servi__s所使用的编程语言可以使用任何与.NET兼容的语言如VB.NET或C#来创建XML Web Servi__s与.a__x页关联的支持代码文件由Codebehind属性来指示Class属性指示支持代码文件中用来实现XML Web Servi__s功能的类 2007-4-2617:50回复
58.
33.
96.* 注意要在.NET的“解决方案资源管理器”中查看.a__x文件的内容,请用右键单击.a__x文件,然后单击“打开方式”命令在“打开方式”对话框中,选择“源代码 [文本] 编辑器”选项,然后单击“打开”按钮即可
2.System.Web.Servi__s.WebServi__类 System.Web.Servi__s.WebServi__类定义了XML Web Servi__s的可选基类,并提供了直接访问常见ASP.NET对象如应用程序和会话状态的对象的权限默认情况下,使用Visual Studio.NET以托管代码的形式创建的XML Web Servi__s继承此类XML Web Servi__s可继承此类以获得访问ASP.NET固有对象如Request和Session的权限 如果XML Web Servi__s没有继承此类,也可System.Web.HttpContext.Current访问ASP.NET固有对象实现XML Web Servi__s的类必须是公共的,且必须有一个公共的默认构造函数不带参数的构造函数这样,ASP.NET就能够创建XML Web Servi__s类的实例以处理传入的XML Web Servi__s请求
3.WebServi__属性 每个XML Web Servi__s都需要唯一的命名空间,它可使客户端应用程序区分出可能使用相同方法名称的XML Web Servi__s在Visual Studio .NET中创建的XML Web Servi__s 的默认命名空间是“http://tempuri.org”尽管命名空间类似于典型的URL统一资源标识符,但在Web浏览器中是不能查看的,它只是一个唯一标识符WebServi__属性主要包括以下几种属性 1Description属性 此属性的值包含描述性消息,此消息将在XML Web Servi__s的说明文件例如服务说明和服务帮助页生成后显示给XML Web Servi__s的____ 2Name属性 此属性的值包含XML Web Servi__s的名称默认情况下,该值是实现XML Web Servi__s的类的名称Name属性标识XML Web Servi__s的XML限定名称的本地部分Name属性也用于在服务帮助页上显示XML Web Servi__s的名称 3Namespa__属性 此属性的值包含XML Web Servi__s的默认命名空间XML命名空间提供了在XML文档中创建名称的方法,该名称可由URL标识使用XML命名空间,可以唯一标识XML文档中的元素或属性因而,在XML Web Servi__s的服务说明中,Namespa__被用作与XML Web Servi__s直接相关的XML元素的默认命名空间如果不指定命名空间,就使用默认命名空间“http://tempuri.org” 以下示例代码说明了WebServi__属性的用法 <WebServi__Namespa__:=http://MyServer/MyWebServi__s/ _ Description:=此处可以放一些描述性文字 Name:=MyF__oritesServi__> _ Public Class Servi__1 Inherits System.Web.Servi__s.WebServi__ 实现代码 End Class
4.WebMethod属性 以托管代码创建XML Web Servi__s时,通过在Public方法声明之前放置WebMethod属性可以指定在XML Web Servi__s中可用的方法Private方法不能充当XML Web Servi__s的入口点,尽管它们可以采用相同的类并且XML Web Servi__s代码可以调用它们WebMethod属性必须应用到可用作XML Web Servi__s一部分的每种公共方法中 WebMethod属性包含配置XML Web Servi__s行为的几个属性例如,可以使用此属性在相关服务帮助页提供一个简短说明WebMethod属性提供以下属性 1BufferResponse属性 当此属性设置为True默认设置时,ASP.NET将响应向下发送到客户端之前先缓存整个响应缓存是一种非常有效的方法,可以通过减少辅助进程和Internet信息服务IIS进程之间的通信来提高性能当设置为False时,ASP.NET会将响应缓存在16KB的区块中通常,只有在不想一次将响应的全部内容都缓存在内存中时,才将此属性设置为False例如,正在写一个多项流出数据库的__除非另行指定,否则默认值为True 2007-4-2617:50回复
58.
33.
96.*3楼 2CacheDuration属性 此属性的值指定ASP.NET缓存每个唯一参数设置结果所需的秒数除非另行指定,否则默认值为0,此设置将禁用结果缓存 3Description属性 此属性的值提供了对XML Web Servi__s方法的说明,显示于服务帮助页中除非另行指定,否则默认值为空字符串 4EnableSession属性 当此属性设置为False默认设置时,ASP.NET将无法访问XML Web Servi__s方法的会话状态当设置为True时,XML Web Servi__s可以直接从HttpContext.Current.Session访问会话状态__;在继承了WebServi__基类的情况下,也可以使用WebServi__.Session属性进行访问 5MessageName属性 此属性的值使XML Web Servi__s能够使用别名来唯一标识重载的方法除非另行指定,否则默认值为方法名当为MessageName指定值后,结果SOAP消息会反映出此名称而不是实际的方法名 6TransactionOption属性 此属性的值指定XML Web Servi__s方法是否可以作为事务的根对象虽然可以将TransactionOption属性设置为TransactionOption枚举类型的任意值,但是XML Web Servi__s方法仅有两种可能行为它不参与事务Disabled、NotSupported和Supported,或是创建新事务Required和RequiresNew除非另行指定,否则默认值为TransactionOption.Disabled要使用此属性,需要向System.EnterpriseServi__s.dll添加一个引用此命名空间包含的方法和属性,提供了可在COM+服务中找到的分布式事务模型System.EnterpriseServi__s.ContextUtil类允许你使用SetAbort或SetComplete方法设置该事务 以下示例代码说明了WebMethod属性的用法 Public Class Servi__1 Inherits System.Web.Servi__s.WebServi__ <WebMethodBufferResponse:=False _ CacheDuration:=60 _ Description:=一些描述性的文字 MessageName:=RetrieveData> _ Public Function GetBi__hunkOfDataAs DataSet 实现代码 End Function End Class
5.XML Web Servi__s发现 XML Web Servi__s发现是对XML Web Servi__s说明进行定位和询问的过程,是访问XML Web Servi__s的基本步骤通过发现进程,XML Web Servi__s客户端能够在设计阶段了解某个XML Web Servi__s是否存在,它的功能如何,以及如何正确与它进行交互操作 然而,实现XML Web Servi__s的Web站点不需要支持该发现进程,而是由另一个站点负责说明服务如XML Web Servi__s目录另外,可能没有一个公开的方法可用来查找服务,例如在创建专用服务时XML Web Servi__s发现主要包括以下内容 1静态发现.disco 可以通过发布.disco文件一个XML文档,包含指向其他发现文档、XSD方案和服务说明的链接来启用XML Web Servi__s的程序发现使用ASP.NET自动创建的XML Web Servi__s能够提供生成的发现文档例如,要访问名为Servi__
1.a__x本地计算机中WebServi__1项目的一部分的XML Web Servi__s发现文档,可使用以下URL http://localhost/WebServi__1/Servi__
1.a__xDISCO 以下示例显示了发现文档的结构 <xml version=
1.0> <disco:discovery xmlns:disco=http://sche__s.xmlsoap.org/disco xmlns:wsdl=http://sche__s.xmlsoap.org/disco/wsdl> <wsdl:contractRef ref=http://MyWebServer/UserName.a__xWSDL/> </disco:discovery> 注意发现文档是一个元素容器,通常包含提供XML Web Servi__s发现信息的资源链接URL如果URL是相对的,则假定它们是相对于发现文档的位置 2动态发现.vsdisco 动态发现是ASP.NET通过__Web服务器上的文件夹层次结构执行迭代搜索以查找可用的XML Web Servi__s的过程动态发现.vsdisco文件是基于XML的文件,可以包含0或多个节点每个节点包含一个path属性,path属性包含指向子文件夹动态发现进程不应搜索的子文件夹的相对路径以下是.vsdisco示例文件 <xml version=
1.0 encoding=utf-8> <dynamicDiscovery xmlns=urn:sche__s-dynamicdiscovery:disco.2003-10-17> <exclude path=_vti_cnf/> <exclude path=_vti_pvt/> <exclude path=_vti_log/> <exclude path=_vti_script/> <exclude path=_vti____/> <exclude path=Web Referen__s/> </dynamicDiscovery> 当启用了动态发现的Web服务器请求.vsdisco文件时,对于已通过动态发现进程进行定位的每个Web Servi__,都会返回一个包含Web Servi__发现信息的发现文档 默认情况下,web.config中禁用了动态发现要控制哪些XML Web Servi__s客户端可以发现服务,应该在__Web服务器上只使用动态发现当向生产Web服务器部署XML Web Servi__s时,应为那些希望客户端能够发现的XML Web Servi__s创建并发布一个静态发现文件.disco
三、创建Web Servi__程序的详细步骤 对.NET来讲,Web Servi__其实就是一个服务器的类这个类的一种方法以一种特殊的方式标记以让.NET可以知道在服务上公布哪些方法读者可以通过以下简单的程序来进一步了解.NET中关于Web Servi__的内部机制
1.创建步骤 在Visual Studio.NET中创建一个基于ASP.NET Web服务的工程定义工程名为DemoServi__ 完成这一步后,会创建一个新的Web站点,以及该站点的一个新网页Servi__
1.a__x该页面表示一个服务,而一个Web Servi__工程可以包含许多个不同的服务同时生成的还有Global.asax和Web.config两个文件,这两个文件用来配置Web环境 在“解决方案资源管理器”中右键单击Servi__
1.a__x,选择“查看代码”命令,这时我们可以看到Web Servi__中放置了一个“Hello World”的示例方法如图2所示 下文中我们将以这个示例为基础,对其进行扩充 直接运行该工程,运行结果如图3所示 __上图中的“HelloWord”链接,会打开另外一个运行方法页面单击“调用”按钮,从新打开的窗口中我们可以看到从服务器返回的SOAP响应 <xml version=
1.0encoding=utf-8> <string xmlns=http://tempuri.org/> Hello World</string> 代码说明 在Web Servi__中,每个.a__x页面后面都有一个类这个类就是HelloWorld方法所在的,从图2的显示代码 Public Class Servi__1 Inherits System.Web.Servi__s.WebServi__ 我们可以发现,该类继承于System.Web.Servi__s.WebServi__此类用于给出用户在Internet Explorer中单击的页面并调用HelloWorld方法WebMethod属性标记用来表示方法是作用于Web Servi__类的
2.添加更多的方法 现在让我们为DemoServi__构建一些新的方法用以说明Web Servi__的实际工作 打开Servi__
1.a__x的代码编辑器,在HelloWorld方法中编写以下代码 <WebMethod> Public Function NewTestByVal number As DoubleAs Double Return __th.Sqrtnumber End Function 说明此方法用以求一个数的平方根 编译后再次运行该程序运行结果如图4所示 单击“NewTest”链接如图5所示 在“number”框中填入数字“121”,单击“调用”按钮,SOAP响应信息如下所示
58.
33.
96.* <xml version=
1.0encoding=utf-8> <double xmlns=http://tempuri.org/>11</double> 通过上面的演示我们不难发现,构建一个简单的Web Servi__并不复杂下面我们将通过一个具体的实例来进一步介绍如何构建Web Servi__
四、实例解析——用Web Servi__比较两个数的大小 通过前面的介绍我们已经知道了如何创建Web Servi__的服务端本例的重点在于如何访问Web Servi__,即用户端如何与Web Servi__互动访问
1.实例详解 创建Web Servi__ 工程名为“The__x”由于创建的方法与步骤上文中已有介绍实例中直接给出核心代码 <WebMethod>Public Function __xNumByVal number1 As IntegerByVal number2 As IntegerAs Integer Dim number3 As Integer If number1 - number2 < 0 Then number3 = number1 Else number3 = number2 __xNum = number3 End Function 运行此程序结果如图6所示 分别在number
1、number2框中填入两个数,例如,
87、98,单击“调用”按钮,得到如下结果 <xml version=
1.0encoding=utf-8> <int xmlns=http://tempuri.org/>98</int> 完成以上步骤后,我们的Web Servi__即构建成功
2.Web Servi__访问 通常情况下,访问Web Servi__有两个方式,即Windows应用程序访问和Web程序调用访问 创建一个Windows应用程序,并命名为“The__x”,设计程序界面如图7所示 现在,让我们来建立“Web引用”这是最重要也是最关键的一步在“解决方案资源管理器”中,右键单击工程名The__x,选择“添加Web引用”命令在地址栏中输入访问Web Servie的URL http://localhost/the__x/servi__
1.a__x 如果“Web引用”建立正确,在“解决方案资源管理器”的“引用”中会自动生成一个Web Referen__s文件夹该文件夹下面有一个地球仪图标,图标后面就是Web Servi__服务器名称双击命令按钮,输入以下代码 Private Sub Button1_ClickByVal sender As System.O__ect ByVal e As System.EventArgsHandles Button
1.Click Dim __xnum As String Dim The__x As New localhost.Servi__1 Dim number1 As Integer = ValTextBox
1.Text Dim number2 As Integer = ValTextBox
2.Text __xnum = The__x.__xNumnumber1 number2 Label
3.Text = 最大的一个数是 __xnum End Sub 编译并运行程序运行结果如图8所示 Windows应用程序在调用Web Servi__程序时,必须在本地保留WSDL的文件备份,以用来描述调用的Web Servi__程序通过WSDL文件所提供的信息,Visual Studio.NET的IDE可以验证传到Web Servi__程序的参数类型是否正确,以及返回给Windows应用程序的数据类型是否匹配
3.Web程序调用访问 Web应用程序天生就具有访问Web Servi__程序的功能因为这两种程序都是依靠Internet来进行通信的下面,我们介绍Web程序如何访问Web Servi__的 创建一个Web应用程序工程,并命名为WebThe__x单击Web Form,将PageLayout属性设为“gridlayout”按图9所示设计程序界面 增加Web引用,方法与Windows应用程序访问方式一样然后双击“进行比较”按钮,输入以下代码 Private Sub Button1_ClickByVal sender As System.O__ect ByVal e As System.EventArgs Handles Button
1.Click Dim __xnum As String Dim The__x As New localhost.Servi__1 Dim number1 As Integer = ValTextBox
1.Text Dim number2 As Integer = ValTextBox
2.Text __xnum = The__x.__xNumnumber1 number2 Label
3.Text = __xnum End Sub 编译并运行程序在两个框中填入两个数
45、54,__“进行比较”按钮即可得到相应的结果 通过对两种Web Servi__访问方式的介绍我们不难发现实现这两种方式的方法与步骤基本是一样的核心内容就在于“增加Web引用”只有正确建立客户端与服务端的链接,才能顺利的进行数取交换这也是构建Web Servi__程序的重中之重
五、实例解析——创建文件夹查看器 通过上面的实例介绍,我们基本了解了一个Web Servi__程序的创建步骤及访问方法现在,我们将通过一个相对比较复杂的Web Servi__程序来进一步介绍Web Servi__服务器的构建方法 本实例达到的目的构建一个文件夹查看器,列出指定目录中的所有子文件夹 我们首先给出实例代码,然后再进行详细分析 创建一个新的ASP.NET Web服务工程,并命名为PictureServi__ 在服务根目录,即C:\inetpub\___root\PictureServi__文件夹下新建一个“pictures”文件夹,并在该文件夹下新建两个子文件夹分别命名为myPicture、youPicture 在Servi__
1.a__x代码编辑器中输入以下代码 Imports System.Web.Servi__s Imports System.IO 自动生成代码 Public ReadOnly Property PictureFolerPath As String Get Dim a__xPath As String picturePath As String a__xPath = Server.__pPathContext.Request.ServerVariables.Itemscript_name Dim n As Integer For n = a__xPath.Length - 1 To n Step -1 If a__xPath.Charsn = \c Then Dim serverPath As String = a__xPath.Substring0 n picturePath = serverPath \pictures Exit For End If Next Return picturePath End Get End Property Public ReadOnly Property PictureFolder As DirectoryInfo Get Return New DirectoryInfoPictureFolerPath End Get End Property Public Function GetPictureFolders As String Dim pictureFolder As DirectoryInfo = Me.PictureFolder Dim pictureSubFolders As DirectoryInfo = pictureFolder.GetDirectories Dim folderNamepictureSubFolders.Length - 1 As String Dim pictureSubFolder As DirectoryInfo index As Integer For Each pictureSubFolder In pictureSubFolders folderNameindex = pictureSubFolder.Name index += 1 Next Return folderName End Function End Class 运行程序,结果如下 <xml version=
1.0 encoding=utf-8 > - <ArrayOfString mlns:xsd=http://___.w
3.org/2001/XMLSche__ xmlns:xsi=http://___.w
3.org/2001/XMLSche__-instan__ xmlns=http://tempuri.org/> <string>myPicture</string> <string>youPicture</string> </ArrayOfString> 下面我们来分析上述代码 要列举出指定文件夹下的所有子文件夹,首先就要得到该文件的完整路径本例中我们首先创建了一个PictureFolderPath属性,用来得到支持整个服务的Servi__.a__x文件的完整路径C:\inetpub\___root\PictureServi__\Servcie
1.a__x程序中我们使用以下代码来实现这点2007-4-2617:50回复
58.
33.
96.*7楼 Dim a__xPath As String picturePath As String a__xPath = Server.__pPathContext.Request.ServerVariables.Itemscript_name 但是,这不是我们的目的,我们最终目的是得到“Pictures”文件的完整路径由于我们在创建Pictures文件夹时将其与Servi__
1.a__x文件放在同一个文件下,所以我们只需将C:\inetpub\___root\PictureServi__\Servcie
1.a__x中Servi__
1.a__x替换为Pictures就行了 代码段 Dim n As Integer For n = a__xPath.Length - 1 To n Step -1 If a__xPath.Charsn = \c Then Dim serverPath As String = a__xPath.Substring0 n picturePath = serverPath \pictures Exit For End If Next Return picturePath 就是用来实现这个功能 上述两段代码运行之后,我们已经得到了期望的结果,即Pictures文件夹的完整路径为C:\inetpub\___root\PictureServi__\Servcie
1.a__x 现在,我们再回头看看代码的开始部分在这个程序中我们引入了一个新的名称空间System.IO我们将利用其类结口System.IO.DirectoryInfo获得文件夹的信息下面这段代码中我们构建了一个新的属性PicttureFolder来返回PictureFolderPath指定文件夹的信息 Public ReadOnly Property PictureFolder As DirectoryInfo Get Return New DirectoryInfoPictureFolerPath End Get End Property 完成上述代码之后,我们已经获得了指定文件夹的相关信息最后就是创建一个Web Servi__方法,来返回结果 Public Function GetPictureFolders As String Dim pictureFolder As DirectoryInfo = Me.PictureFolder Dim pictureSubFolders As DirectoryInfo = pictureFolder.GetDirectories Dim folderNamepictureSubFolders.Length - 1 As String Dim pictureSubFolder As DirectoryInfo index As Integer For Each pictureSubFolder In pictureSubFolders folderNameindex = pictureSubFolder.Name index += 1 Next Return folderName End Function 通过对实例的分析,我们可以看出一个复杂的Web Servi__程序包含的内容极其广泛本文只是着眼于Web Servi__程序表面的一些东西其实质的技术点还有待读者自已去发掘 结束*****************************************************************************************************。