以前在找工做的时候,有面试官问到WebService,当时没有接触过,正好如今作的项目中有用到WebService,因此就趁着业余时间来学习了。html
先来看看百度百科对WebService的解释: java
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可以使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操做的应用程序。web
Web Service技术, 能使得运行在不一样机器上的不一样应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 不管它们所使用的语言、 平台或内部协议是什么, 均可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 能够执行具体的业务功能。Web Service也很容易部署, 由于它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减小了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。面试
简单说, WebService就是一些站点开放一些服务出来, 也能够是你本身开发的Service, 也就是一些方法, 经过URL,指定某一个方法名,发出请求,站点里的这个服务(方法),接到你的请求,根据传过来的参数,作一些处理, 而后把处理后的结果以XML形式返回来给你,你的程序就解析这些XML数据,而后显示出来或作其它操做.
举个例子: 不少大的站点提供有天气预报的WebService,只要你发出请求过来,它就返回天气预报的数据,而后你把结果显示在本身的程序上.编程
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。SOAP协议 = HTTP协议 + XML数据格式网络
WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数状况下由软件自动生成和使用。它是WebService客户端和服务器端都 能理解的标准格式。由于是基于XML的,因此WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的 Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。框架
UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户可以调用Web服务以前,必须肯定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各类不一样类型的数据,而且发送到注册中心或者由注册中心来返回须要的数据。分布式
WebService开发能够分为服务器端开发和客户端开发两个方面
把公司内部系统的业务方法发布成WebService服务,供远程合做单位和我的调用。(借助一些WebService框架能够很轻松地把本身的业务对象发布成WebService服务,Java方面的典型WebService框架包括:axis,xfire,cxf 等,java ee服务器一般也支持发布WebService服务,例如JBoss。)
调用别人发布的WebService服务,大多数人从事的开发都属于这个方面,例如,调用天气预报WebService服务。(使用厂 商的WSDL2Java之类的工具生成静态调用的代理类代码;使用厂商提供的客户端编程API类;使用SUN公司早期标准的jax-rpc开发包;使用 SUN公司最新标准的jax-ws开发包。固然SUN已被ORACLE收购)
对客户端而言,咱们给这各种WebService客户端API传递wsdl文件的url地址,这些API就会建立出底层的代理类,我调用 这些代理,就能够访问到webservice服务。代理类把客户端的方法调用变成soap格式的请求数据再经过HTTP协议发出去,并把接收到的soap 数据变成返回值返回。对服务端而言,各种WebService框架的本质就是一个大大的Servlet,当远程调用客户端给它经过http协议发送过来 soap格式的请求数据时,它分析这个数据,就知道要调用哪一个java类的哪一个方法,因而去查找或建立这个对象,并调用其方法,再把方法返回的结果包装成 soap格式的数据,经过http响应消息回给客户端。
若是应用程序有成千上万的用户,并且分布在世界各地,那么客户端和服务器之间的通讯将是一个棘手的问题。由于客户端和服务器之间一般会有防火墙或者代理服 务器。在这种状况下,使用DCOM就不是那么简单,一般也不便于把客户端程序发布到数量如此庞大的每个用户手中。传统的作法是,选择用浏览器做为客户 端,写下一大堆ASP页面,把应用程序的中间层暴露给最终用户。这样作的结果是开发难度大,程序很难维护。若是中间层组件换成WebService的话, 就能够从用户界面直接调用中间层组件。从大多数人的经验来看,在一个用户界面和中间层有较多交互的应用程序中,使用WebService这种结构,能够节 省花在用户界面编程上20%的开发时间。
企业级的应用程序开发者都知道,企业里常常都要把用不一样语言写成的、在不一样平台上运行的各类程序集成起来,而这种集成将花费很大的开发力量。应用程序常常 须要从运行在IBM主机上的程序中获取数据;或者把数据发送到主机或UNIX应用程序中去。即便在同一个平台上,不一样软件厂商生产的各类软件也经常须要集 成起来。经过WebService,能够很容易的集成不一样结构的应用程序。
用WebService集成应用程序,可使公司内部的商务处理更加自动化。但当交易跨越供应商和客户、突破公司的界限时会怎么样呢?跨公司的商务交易集成一般叫作B2B集成。WebService是B2B集成成功的关键。经过WebService,公司能够把关键的商务应用“暴露”给指定的供应商和客户。例如,把电子下单系统和电子发票系统“暴露”出来,客户就能够以电子的方式发送订单,供应商则能够以电子的方式发送原料采购发票。固然,这并非一个 新的概念,EDI(电子文档交换)早就是这样了。可是,WebService的实现要比EDI简单得多,并且WebService运行在Internet 上,在世界任何地方均可轻易实现,其运行成本就相对较低。不过,WebService并不像EDI那样,是文档交换或B2B集成的完整解决方案。 WebService只是B2B集成的一个关键部分,还须要许多其它的部分才能实现集成。
用WebService来实现B2B集成的最大好处在于能够轻易实现互操做性。只要把商务逻辑“暴露”出来,成为WebService,就可让任何指定 的合做伙伴调用这些商务逻辑,而无论他们的系统在什么平台上运行,使用什么开发语言。这样就大大减小了花在B2B集成上的时间和成本,让许多本来没法承受 EDI的中小企业也能实现B2B集成。
软件重用是一个很大的主题,重用的形式不少,重用的程度有大有小。最基本的形式是源代码模块或者类一级的重用,一种形式是二进制形式的组件重用。采用 WebService应用程序能够用标准的方法把功能和数据“暴露”出来,供其它应用程序使用,达到业务级重用。
目前,企业和我的还使用着不少桌面应用程序。其中一些只须要与本机上的其它程序通讯。在这种状况下,最好就不要用WebService,只要用本地的 API就能够了。COM很是适合于在这种状况下工做,由于它既小又快。运行在同一台服务器上的服务器软件也是这样。最好直接用COM或其它本地的API来 进行应用程序间的调用。固然WebService也能用在这些场合,但那样不只消耗太大,并且不会带来任何好处。
在许多应用中,全部的程序都是用VB或VC开发的,都在Windows平台下使用COM,都运行在同一个局域网上。例如,有两个服务器应用程序须要相互通 信,或者有一个Win32或WinForm的客户程序要链接局域网上另外一个服务器的程序。在这些程序里,使用DCOM会比SOAP/HTTP有效得多。与 此相相似,若是一个.NET程序要链接到局域网上的另外一个.NET程序,应该使用.NETremoting。有趣的是,在.NETremoting 中,也能够指定使用SOAP/HTTP来进行WebService调用。不过最好仍是直接经过TCP进行RPC调用,那样会有效得多。
声明:部份内容来源于互联网和这个博客http://blog.csdn.net/wooshn/article/details/8069087,感谢原做者的提供!