资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
Web Service 的工作原理 Web Service 基本概念Web Service 也叫 XML Web Service WebService 是一种可以接收从 Internet 或者Intranet 上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是: 通过SOAP 在 Web 上提供的软件服务,使用 WSDL 文件进行说明,并通过 UDDI 进行注册。XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是 Soap 的基础。Soap:(Simple Object Access Protocol)简单对象存取协议。是 XML Web Service 的通信协议。当用户通过 UDDI 找到你的 WSDL 描述文档后,他通过可以SOAP 调用你建立的 Web 服务中的一个或多个操作。SOAP 是 XML 文档形式的调用方法的规范,它可以支持不同的底层接口,像 HTTP(S)或者 SMTP。WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。UDDI (Universal Description, Discovery, and Integration) 是一个主要针对 Web 服务供应商和使用者的新项目。在用户能够调用 Web 服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI 是一种根据描述文档来引导系统查找相应服务的机制。UDDI 利用 SOAP消息机制(标准的 XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用 XML 格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。调用原理:Web 服务有两层含义:1、是指封装成单个实体并发布到网络上的功能集合体;2、是指功能集合体被调用后所提供的服务。简单地讲,Web 服务是一个 URL资源,客户端可以通过编程方式请求得到它的服务,而不需要知道所请求的服务是怎样实现的,这一点与传统的分布式组件对象模型不同。Web 服务的体系结构是基于 Web 服务提供者、Web 服务请求者、Web 服务中介者三个角色和发布、发现、绑定三个动作构建的。简单地说,Web 服务提供者就是 Web 服务的拥有者,它耐心等待为其他服务和用户提供自己已有的功能;Web 服务请求者就是 Web 服务功能的使用者,它利用 SOAP 消息向 Web 服务提供者发送请求以获得服务(服务者和请求者之间的语言就是 soap);Web 服务中介者的作用是把一个 Web 服务请求者与合适的 Web 服务提供者联系在一起,它充当管理者的角色,一般是 UDDI。这三个角色是根据逻辑关系划分的,在实际应用中,角色之间很可能有交叉:一个 Web 服务既可以是 Web 服务提供者,也可以是 Web 服务请求者,或者二者兼而有之。显示了 Web 服务角色之间的关系:其中,“发布” 是为了让用户或其他服务知道某个 Web 服务的存在和相关信息;“查找(发现)” 是为了找到合适的 Web 服务;“绑定”则是在提供者与请求者之间建立某种联系。图 2-1 Web service 的体系结构实现一个完整的 Web 服务包括以下步骤: Web 服务提供者设计实现 Web 服务,并将调试正确后的 Web 服务通过 Web服务中介者发布,并在 UDDI 注册中心注册; (发布) Web 服务请求者向 Web 服务中介者请求特定的服务,中介者根据请求查询UDDI 注册中心,为请求者寻找满足请求的服务; (发现) Web 服务中介者向 Web 服务请求者返回满足条件的 Web 服务描述信息,该描述信息用 WSDL 写成,各种支持 Web 服务的机器都能阅读;(发现) 请求者利用从 Web 服务中介者返回的描述信息(WSDL)生成相应的 SOAP 消息,发送给 Web 服务提供者,以实现 Web 服务的调用;(绑定) Web 服务提供者按 SOAP 消息执行相应的 Web 服务,并将服务结果返回给Web 服务请求者。(绑定)Java 调用 webservice 接口方法webservice 的 发布一般都是使用 WSDL(web service descriptive language)文件的样式来发布的,在 WSDL 文件里面,包含这个 webservice 暴露在外面可供使用的接口。 1.1 Apache 提供直接通过 AXIS 调用远程的 web service我认为这种调用方式适合比较那种返回比较简单的数据的 service, 比如,天气预报,这些内容肯定可以通过一个很简单的 xml 来返回。还有就是 WebSSO,返回的就是一个字符串。这种调用方式的好处就是简单(开发简单,调用简单,只要 service 提供方不改动对外的方法接口,客户端都无需有代码带动),无需对 web service 有太深了解,只要按照套路去掉用就可以了。直接调用模式如下:package ws.client;import org.apache.axis.client.Call;import org.apache.axis.client.Service;public class LogonClientWithURL public static void main(String args) throws Exception try String urlname = http:/192.168.194.23:9080/Logon/services/Logon?wsdl ;urlname = http:/192.168.194.23:9080/Logon/services/Logon;Service s = new Service();Call call = (Call) s.createCall();call.setTimeout(new Integer(5000);call.setOperation( getSecurityToken );call.setTargetEndpointAddress(urlname);Object fn01 = john , john , null ,null ;String val = (String)call.invoke(fn01);System.out .println( getSecurityToken(correct): + val);Object fn02 = john , john2 , null ,null ; String va2 = (String)call.invoke(fn02);System.out .println( getSecurityToken(wrong): + va2); catch (Exception e) /java.io.InterruptedIOException: Read timed outSystem.out.println(e.getMessage();1.2 Apache 提供使用 WSDL2Java 把 WSDL 文件转成本地类,然后像本地类一样使用。这种方式应该可以调用所有的 webService。同时这个调用方式适合那种业务比较复杂的 Service (特别是企业应用, 不是外部所有人都能无限制访问那种 Service),比如,这个 Service 返回的 xml 内容比较复杂,同时多个客户端系统都需要访问这个 Service,在这种情况,service 提供方可能会考虑返回一个 java类。毕竟,每个客户端都要解析 xml 也够麻烦的,还不如让 service 提供方返回一个类。调用模式如下:1)使用 WSDL2Java 把 WSDL 文件转成本地类。 我这里写了 bat 文件:set Axis_Lib=.libset Java_Cmd=D:DevJDKjdk1.4.2_12binjava -Djava.ext.dirs=%Axis_Lib%set Output_Path=.srcset Package=com.ubs.ws%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% http:192.168.194.23:9080LogonservicesLogonwsdlLogon.wsdlPause运行直接生成以下 java 类Logon.java LogonService.javaLogonServiceLocator.javaLogonSoapBindingStub.java2) package test.cis.client;import test.cis.*; public class LogonClientWithStub public static void main(String args) try Logon locator = new LogonServiceLocator().getLogon();String result = locator.getSecurityToken(john , john ,null , null );System.out.println(getSecurityToken(correct): + result);result = locator.getSecurityToken(john , john2 ,null , null );System.out.println(getSecurityToken(wrong): + result); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace(); 1.3XFire 提供 使用 XFire 调用 WebService有兴趣的可以下载 XFire 的 jar 来学习一下。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号