WebService小结
前言
之前对于WebService都是简单的知道,但是没有一个比较系统的了解。最近将其进行了下整理,对每种框架都做了些实例。
正题
一、概念
先来看张WebService的总图,我会根据图进行讲解:
WebService不是框架,更不是一种技术,而是一种跨平台,跨语言的规范。
它是为了解决这一的需求场景:不同平台、不同语言所编写的应用之间如何相互调用。
WebService集中解决:远程调用,跨平台调用,跨语言调用。
实际用途
1.同一个公司的新旧系统整合
Linux上的java应用,去调用widows平台的Delphi应用
2.不同公司的业务整合
业务的整合就要带来不同公司的系统整合。
不同公司的系统可能存在平台不同,语言不同的问题
3.内容聚合
一个应用需要提高天气预报、股票行情、黄金行情、编程语言行情……
这个内容聚合的应用,需要调用大量不同平台、不同语言编写的应用方法
二、技术基础
1.XML和XSD
XML(Extensible Markup Language,可扩展标记语言),是Web Service平台中表示数据的基本格式。除了易于建立和易于分析外,XML主要的优点在于它既与平台无关,又与厂商无关。
XSD(XML Schemas Definition,XML结构定义),Web Service平台是用XSD来作为数据类型系统的。当你用某种语言如VB. NET或C# 来构造一个WebService时,为了符合Web Service标准,所有你使用的数据类型都必须被转换为XSD类型。
2.WSDL(Web Service Definition Language,WebService定义语言)
WebService接口:
1.types(标准的Schema)
2.2n的message
3.portType-n个operation
WebService实现:
1.binding元素——N个更详细的operation
2.service——指定WebService的服务器地址
实例:
通俗地说,WSDL文档描述了WebService如下3个方面:
—WHAT:该WebService包含“什么”操作。
—HOW:该WebService的操作应该“怎样”调用?
—WHERE:该WebService的服务地址。
3.SOAP(Simple Object Access Protocol,简单对象访问协议)
SOAP依赖于XML文档来构建,一条SOAP消息其实就是一份特定的XML文档.
Envelop
根元素
Header
Header是可选的,由程序员控制添加。
Body
Body元素总是默认的。Body元素里可有两种情况:
——当WebService交互正确时,Body元素里的内容由WSDL控制。
——当WebService交互出错时,Body元素内容将是Fault子元素。
4.UDDI(Universal Description, Discoveryand Integration,通用描述、发现与集成服务)
UDDI不像WSDL和SOAP一样被我们所熟知,但是它也是不可缺少的。
UDDI是定义如何查找Web服务(及其WSDL文件),程序开发人员通过UDDI机制查找分布在互联网上的WebService,但是由于一般情况下,wsdl都位于公司的企业内部网中,所以使用者都知道WebService的位置,所以相对起来我们对于其稍显陌生。
三、发展历史
WebService框架主要是经历了Axis1和Axis2然后转向了XFire和CXF,用的比较多的还是Axis和CXF,由于在网上很容易就会搜索到相关的实例讲解,所以我会在下篇对他们做一个对比,从客户端和服务端两方面来对Axis和CXF进行比较。
小结:
其实WebService很简单,就是在服务端将接口发布成wsdl文件,然后客户端根据相应的url调用该wsdl文件即可。传输的介质是我们的XML,使用的语言是WSDL,遵循的协议是SOAP,并且需要通过UDDI进行注册和搜索。
webservice
一、什么是webservice
1、什么是远程调用技术
远程调用技术定义:是系统和系统之间的调用
2、webservice的原理
l Webservice是使用Http发送SOAP协议的数据的一种远程调用技术
l Webservice要开发服务端
l Webservice要开发客户端
l Webservice客户端开发需要阅读服务端的使用说明书(WSDL)
二、webservice入门程序
1、需求
l 服务端:发布一个天气查询服务,接收客户端城市名,返回天气数据给客户端
l 客户端:发送城市名称给服务端,接收服务端的返回天气数据,打印
2、环境
l JDK:1.7
l Eclipse:mars
3、实现
开发步骤:
l 第一步:创建SEI(ServiceEndpoint Interface)接口,本质上就是Java接口
l 第二步:创建SEI实现类,在实现类上加入@WebService
l 第三步:发布服务,Endpoint发布服务,publish方法,两个参数:1.服务地址;2.服务实现类
l 第四步:测试服务是否发布成功,通过阅读使用说明书,确定客户端调用的接口、方法、参数和返回值存在,证明服务发布成功。
Ø WSDL地址:服务地址+”?wsdl”
Ø WSDL阅读方式:从下往上
开发步骤
l 第一步:wsimport命令生成客户端代码
wsimport -s . http://127.0.0.1:12345/weather?wsdl
l 第二步:根据使用说明书,使用客户端代码调用服务端
Ø 第一步:创建服务视图,视图是从service标签的name属性获取
Ø 第二步:获取服务实现类,实现类从portType的name属性获取
Ø 第三步:获取查询方法,从portType的operation标签获取
三、webservice的优缺点
优点:
l 发送方式采用http的post发送,http的默认端口是80,防火墙默认不拦截80,所以跨防火墙
l 采用XML格式封装数据,XML是跨平台的,所以webservice也可以跨平台。
l Webservice支持面向对象
缺点:
l 采用XML格式封装数据,所以在传输过程中,要传输额外的标签,随着SOAP协议的不断完善,标签越来越大,导致webservice性能下降
四、webservice应用场景
1、软件集成和复用
2、适用场景
l 发布一个服务(对内/对外),不考虑客户端类型,不考虑性能,建议使用webservice
l 服务端已经确定使用webservice,客户端不能选择,必须使用webservice
3、不适用场景
l 考虑性能时不建议使用webservice
l 同构程序下不建议使用webservice,比如java 用RMI,不需要翻译成XML的数据