1.WebService概述 Web Service Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。Web Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。 Web Service技术,能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。 Web Service的三要素:SOAP、WSDL、UDDI,soap用来描述传递信息的格式, WSDL 用来描述如何访问具体的接口,uddi用来管理,分发,查询Web Service。 应用场景Web Service 可以适用于应用程序集成、软件重用、跨防火墙通信等需求。不同的业务要求不同。具体如下: l 适合使用Web Service情形 公开接口 调用webservice服务端 l 不适合使用Web Service情形 单机程序间通信 同构程序间通信 什么时候应用WebService? 1. 同一家公司的新旧应用之间 2. 不同公司的应用之间 分析业务需求:天猫网与顺丰物流系统如何交互? 3. 一些提供数据的内容聚合应用:天气预报、股票行情 |
优缺点优点: 采用XML,支持跨平台远程调用;基于http的soap协议,可以跨越防火墙;支持面向对象开发;有利于软件和数据重用,实现松耦合。 缺点: 由于soap是基于xml传输,本身使用xml传输会传输一些无关内容从而影响效率,随着soap协议的完善,soap协议增加了许多内容,这样就导致了使用soap去完成简单的数据传输而携带的信息更多效率再受影响; Web Service作为web跨平台访问的标准技术,很多公司都限定要求使用WebService,但如果是简单的接口可以直接使用http传输自定义数据格式,开发更快捷。 服务网址http://www.webxml.com.cn/在这个网址上有一些常用的公开的Web Service的服务可以使用。 术语1)WSDLWeb Service描述语言WSDL(Seb Service DefinitionLanguage)就是用机器能阅读的方式提供的一个正式描述文档而基于XML(标准通用标记语言下的一个子集)的语言,用于描述WebService及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。 2)SOAPSOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML(标准通用标记语言下的一个子集)编码信息的轻量级协议。它有三个主要方面:XML-envelope为描述信息内容和如何处理内容定义了框架,将程序对象编码成为XML对象的规则,执行远程过程调用(RPC)的约定。SOAP可以运行在任何其他传输协议上。 3)SEISEI(Web Service EndPoint Interface)是Web Service服务器端用来处理请求的接口。 4)UDDIUDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。 5)Jax-wsJAX-WS(Java APIfor XML Web Services)规范是一组XML WebServices的JAVA API;也即JDK内置的Web Service实现,用来开发和发布Web Service服务。 6)CXFApache的用于开发webservice服务器端和客户端的框架。 实现Web Service的框架有:Axis,Axis2,Xfire,CXF以及JAXWS-ri(JAX Web Service参考实现)。 使用JDK开发WebService 开发服务端1)jdk要求Jdk在1.6之后内置的jax-ws可以直接、便捷发布Web Service,对jdk的版本要求为Jdk1.6.0_21+。 2)实现服务编写服务端代码;需要注意的是服务类只需要添加@WebService注解即可。 3)启动服务在完成服务代码后启动发布Web Service服务,则调用Endpoint.publish发布服务。 4)查看wsdl地址为:http://localhost:9080/ws/hello?wsdl 一般情况wsdl的都为上述服务器端代码发布的地址后面加“?wsdl”。 5)总结发布一个简单Web Service服务,并提供对外的wsdl文档的话;那么只需要执行如下几步即可。 1、编写服务器端类,并添加@WebService注解; 2、调用Endpoint.publish启动并发布服务。 开发客户端1)wsimportwsimport是JDK自带的工具,在JDK的bin文件夹中;主要功能是根据服务端生成的WSDL文件生成客户端代码。生成java客户端代码常使用的命令参数说明: 参数 | | | | | | | | | | | 指定jaxws/jaxb绑定文件或额外的schemas | | |
2)生成客户端代码利用wsimport生成客户端代码: wsimport -keep -p cn.itcast.ws.client.hello http://localhost:9080/ws/hello?wsdl |
生成代码后,在包中包含了class文件,可以自行删除。 3)总结1、使用wsimport根据wsdl文件生成服务端代码; 利用生成的服务器端代码调用服务。 使用Ecplise的TCP/IP工具监听请求 Soap是什么SOAP简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。用来描述传递信息的格式,有请求消息和响应消息,一般由http+xml片段构成。 一条SOAP消息就是一个普通的XML文档,包含下列元素: l 必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息 l 可选的 Header 元素,包含头部信息 l 必需的 Body 元素,包含所有的调用和响应信息 l 可选的 Fault 元素,提供有关在处理此消息所发生错误的信息 TCP/IP Monitor设置路径为:Window-->Preferences-->Run/Debug-->TCP/IPMonitor 请求消息体参考: POST /ws/helloHTTP/1.1 Accept:text/xml, multipart/related Content-Type: text/xml; charset=utf-8 SOAPAction:"http://hello.ws.itcast.cn/HelloWebService/sayHelloRequest" User-Agent:JAX-WS RI 2.2.4-b01 Host:localhost:9080 Connection:keep-alive Content-Length:201 <?xmlversion="1.0" ?> <S:Envelopexmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:sayHelloxmlns:ns2="http://hello.ws.itcast.cn/"> <name>Eric</name> </ns2:sayHello> </S:Body> </S:Envelope> 响应消息体参考: HTTP/1.1 200 OK Transfer-encoding:chunked Content-type: text/xml; charset=utf-8 <?xmlversion="1.0" ?> <S:Envelopexmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:sayHelloResponsexmlns:ns2="http://hello.ws.itcast.cn/"> <helloResult>Hello Eric</helloResult> </ns2:sayHelloResponse> </S:Body> </S:Envelope> WebService请求深入分析(WSDL) WSDL是什么WSDL直译为Web Service定义语言;它描述了WebService服务器端与客户端交互、请求和响应数据的格式和方式。wsdl通过XML形式说明服务在什么地方、提供什么方法。 结构WSDL文档的阅读方式是从下往上阅读。WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。抽象部分;以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而变的元素。这就定义了一系列服务,截然不同的应用都可以实现。具体部分;如数据的序列化则归入底部分,因为它包含具体的定义。
元素Wsdl文档中包含的基本元素有: Type(消息类型):数据类型定义的容器,它使用某种类型系统(如 XSD)。 Message(消息):通信数据的抽象类型化定义,它由一个或者多个 part 组成。使用Types所定义的类型来定义整个消息的数据结构(入参和出参)。 Part:消息参数 Operation(操作):对服务所支持的操作进行抽象描述,对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对(方法)。 PortType(端口类型):特定端口类型的具体协议和数据格式规范。 Binding:特定端口类型的具体协议和数据格式规范。 Port:定义为绑定和网络地址组合的单个服务端点。 Service:相关服务访问点的集合,包括其关联的接口、操作、消息等。
|