2023年8月1日发(作者:)
WebService学习总结(⼀)——WebService的相关概念⼀、序⾔ ⼤家或多或少都听过 WebService(Web服务),有⼀段时间很多计算机期刊、书籍和⽹站都⼤肆的提及和宣传WebService技术,其中不乏很多吹嘘和做⼴告的成 分。但是不得不承认的是WebService真的是⼀门新兴和有前途的技术,那么WebService到底是什么?何时应该⽤? 当前的应⽤程序开发逐步的呈现了两种迥然不同的倾向:⼀种是基于浏览器的瘦客户端应⽤程序,⼀种是基于浏览器的富客户端应⽤程序(RIA),当然后⼀种技术相对来说更加的时髦⼀些(如现在很流⾏的Html5技术),这⾥主要讲前者。 基于浏览器的瘦客户端应⽤程序并不是 因为瘦客户能够提供更好的⽤户界⾯,⽽是因为它能够避免花在桌⾯应⽤程序发布上的⾼成本。发布桌⾯应⽤程序成本很⾼,⼀半是因为应⽤程序安装和配置的问 题,另⼀半是因为客户和服务器之间通信的问题。传统的Windows富客户应⽤程序使⽤DCOM来与服务器进⾏通信和调⽤远程对象。配置好DCOM使其在 ⼀个⼤型的⽹络中正常⼯作将是⼀个极富挑战性的⼯作,同时也是许多IT⼯程师的噩梦。事实上,许多IT⼯程师宁愿忍受浏览器所带来的功能限制,也不愿在局 域⽹上去运⾏⼀个DCOM。关于客户端与服务器的通信问题,⼀个完美的解决⽅法是使⽤HTTP协议来通信。这是因为任何运⾏Web浏览器的机器都在使⽤ HTTP协议。同时,当前许多防⽕墙也配置为只允许HTTP连接。许多商⽤程序还⾯临另⼀个问题,那就是与其他程序的互操作性。如果所有的应⽤程序都是使 ⽤COM或.NET语⾔写的,并且都运⾏在Windows平台上,那就天下太平了。然⽽,事实上⼤多数商业数据仍然在⼤型主机上以⾮关系⽂件(VSAM) 的形式存放,并由COBOL语⾔编写的⼤型机程序访问。⽽且,⽬前还有很多商⽤程序继续在使⽤C++、Java、Visual Basic和其他各种各样 的语⾔编写。现在,除了最简单的程序之外,所有的应⽤程序都需要与运⾏在其他异构平台上的应⽤程序集成并进⾏数据交换。这样的任务通常都是由特殊的⽅法, 如⽂件传输和分析,消息队列,还有仅适⽤于某些情况的的API,如IBM的⾼级程序到程序交流(APPC)等来完成的。在以前,没有⼀个应⽤程序通信标 准,是独⽴于平台、组建模型和编程语⾔的。只有通过Web Service,客户端和服务器才能够⾃由的⽤HTTP进⾏通信,不论两个程序的平台和编程语⾔是什么。⼆、WebService到底是什么
⼀⾔以蔽之:WebService是⼀种跨编程语⾔和跨操作系统平台的远程调⽤技术。 所谓跨编程语⾔和跨操作平台,就是说服务端程序采⽤java编写,客户端程序则可以采⽤其他编程语⾔编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运⾏。 所谓远程调⽤,就是⼀台计算机a上 的⼀个程序可以调⽤到另外⼀台计算机b上的⼀个对象的⽅法,譬如,银联提供给商场的pos刷卡系统,商场的POS机转账调⽤的转账⽅法的代码其实是跑在银 ⾏服务器上。再⽐如,amazon,天⽓预报系统,淘宝⽹,校内⽹,百度等把⾃⼰的系统服务以webservice服务的形式暴露出来,让第三⽅⽹站和程 序可以调⽤这些服务功能,这样扩展了⾃⼰系统的市场占有率,往⼤的概念上吹,就是所谓的SOA应⽤。 其实可以从多个⾓度来理解 WebService,从表⾯上看,WebService就是⼀个应⽤程序向外界暴露出⼀个能通过Web进⾏调⽤的API,也就是说能⽤编程的⽅法通过 Web来调⽤这个应⽤程序。我们把调⽤这个WebService的应⽤程序叫做客户端,⽽把提供这个WebService的应⽤程序叫做服务端。从深层次 看,WebService是建⽴可互操作的分布式应⽤程序的新平台,是⼀个平台,是⼀套标准。它定义了应⽤程序如何在Web上实现互操作性,你可以⽤任何 你喜欢的语⾔,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进⾏查询和访问。
WebService平台需要⼀套协议来实现分布式应⽤程序的创建。任何平台都有它的数据表⽰⽅法和类型系统。要实现互操作性,WebService平台 必须提供⼀套标准的类型系统,⽤于沟通不同平台、编程语⾔和组件模型中的不同类型系统。Web service平台必须提供⼀种标准来描述 Web service,让客户可以得到⾜够的信息来调⽤这个Web service。最后,我们还必须有⼀种⽅法来对这个Web service进⾏远 程调⽤,这种⽅法实际是⼀种远程过程调⽤协议(RPC)。为了达到互操作性,这种RPC协议还必须与平台和编程语⾔⽆关。三、WebService平台技术
XML+XSD,SOAP和WSDL就是构成WebService平台的三⼤技术。3.1、XML+XSD WebService采⽤HTTP协议传输数据,采⽤XML格式封装数据(即XML中说明调⽤远程服务对象的哪个⽅法,传递的参数是什么,以及服务对象的 返回结果是什么)。XML是WebService平台中表⽰数据的格式。除了易于建⽴和易于分析外,XML主要的优点在于它既是平台⽆关的,⼜是⼚商⽆关 的。⽆关性是⽐技术优越性更重要的:软件⼚商是不会选择⼀个由竞争对⼿所发明的技术的。
XML解决了数据表⽰的问题,但它没有定义⼀套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,64位?这 些细节对实现互操作性很重要。XML Schema(XSD)就是专门解决这个问题的⼀套标准。它定义了⼀套标准的数据类型,并给出了⼀种语⾔来扩展这套数据类型。WebService平台就 是⽤XSD来作为其数据类型系统的。当你⽤某种语⾔(如或C#)来构造⼀个Web service时,为了符合WebService标准,所 有你使⽤的数据类型都必须被转换为XSD类型。你⽤的⼯具可能已经⾃动帮你完成了这个转换,但你很可能会根据你的需要修改⼀下转换过程。3.2、SOAP
WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采⽤XML格式封装,并增加了⼀些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC⽅法来调⽤Web Service。
SOAP协议 = HTTP协议 + XML数据格式
SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码⽅式。打个⽐ 喻:HTTP就是普通公路,XML就是中间的绿⾊隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的⾼速公路。3.3、WSDL 好⽐我们去商店买东西,⾸先要知道商店⾥有什么东西可买,然后再来购买,商家的做法就是张贴⼴告海报。 WebService也⼀样,WebService客户端要调⽤⼀个WebService服务,⾸先要有知道这个服务的地址在哪,以及这个服务⾥有什么⽅ 法可以调⽤,所以,WebService务器端⾸先要通过⼀个WSDL⽂件来说明⾃⼰家⾥有啥服务可以对外调⽤,服务是什么(服务中有哪些⽅法,⽅法接受 的参数是什么,返回值是什么),服务的⽹络地址⽤哪个url地址表⽰,服务通过什么⽅式来调⽤。 WSDL(Web Services Description Language)就是这样⼀个基于XML的语⾔,⽤于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都 能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,⼜是⼈可阅读的,这将是⼀个很⼤的好处。⼀些最新的开发⼯具既能根据你的 Web service⽣成WSDL⽂档,⼜能导⼊WSDL⽂档,⽣成调⽤相应WebService的代理类代码。 WSDL ⽂件保存在Web服务器上,通过⼀个url地址就可以访问到它。客户端要调⽤⼀个WebService服务之前,要知道该服务的WSDL⽂件的地址。 WebService服务提供商可以通过两种⽅式来暴露它的WSDL⽂件地址:1.注册到UDDI服务器,以便被⼈查找;2.直接告诉给客户端调⽤者。四、WebService开发 WebService开发可以分为服务器端开发和客户端开发两个⽅⾯4.1、服务端开发 把公司内部系统的业务⽅法发布成WebService服务,供远程合作单位和个⼈调⽤。(借助⼀些WebService框架可以很轻松地把⾃⼰的业务对象发布成WebService服务,Java⽅⾯的典型WebService框架包括:axis,xfire,cxf 等,java ee服务器通常也⽀持发布WebService服务,例如JBoss。)4.2、客户端开发
调⽤别⼈发布的WebService服务,⼤多数⼈从事的开发都属于这个⽅⾯,例如,调⽤天⽓预报WebService服务。(使⽤⼚ 商的WSDL2Java之类的⼯具⽣成静态调⽤的代理类代码;使⽤⼚商提供的客户端编程API类;使⽤SUN公司早期标准的jax-rpc开发包;使⽤ SUN公司最新标准的jax-ws开发包。当然SUN已被ORACLE收购)4.3、WebService 的⼯作调⽤原理
对客户端⽽⾔,我们给这各类WebService客户端API传递wsdl⽂件的url地址,这些API就会创建出底层的代理类,我调⽤ 这些代理,就可以访问到webservice服务。代理类把客户端的⽅法调⽤变成soap格式的请求数据再通过HTTP协议发出去,并把接收到的soap 数据变成返回值返回。对服务端⽽⾔,各类WebService框架的本质就是⼀个⼤⼤的Servlet,当远程调⽤客户端给它通过http协议发送过来 soap格式的请求数据时,它分析这个数据,就知道要调⽤哪个java类的哪个⽅法,于是去查找或创建这个对象,并调⽤其⽅法,再把⽅法返回的结果包装成 soap格式的数据,通过http响应消息回给客户端。五、适⽤场合1、跨防⽕墙通信 如果应⽤程序有成千上万的⽤户,⽽且分布在世界各地,那么客户端和服务器之间的通信将是⼀个棘⼿的问题。因为客户端和服务器之间通常会有防⽕墙或者代理服 务器。在这种情况下,使⽤DCOM就不是那么简单,通常也不便于把客户端程序发布到数量如此庞⼤的每⼀个⽤户⼿中。传统的做法是,选择⽤浏览器作为客户 端,写下⼀⼤堆ASP页⾯,把应⽤程序的中间层暴露给最终⽤户。这样做的结果是开发难度⼤,程序很难维护。如果中间层组件换成WebService的话, 就可以从⽤户界⾯直接调⽤中间层组件。从⼤多数⼈的经验来看,在⼀个⽤户界⾯和中间层有较多交互的应⽤程序中,使⽤WebService这种结构,可以节 省花在⽤户界⾯编程上20%的开发时间。2、应⽤程序集成 企业级的应⽤程序开发者都知道,企业⾥经常都要把⽤不同语⾔写成的、在不同平台上运⾏的各种程序集成起来,⽽这种集成将花费很⼤的开发⼒量。应⽤程序经常 需要从运⾏在IBM主机上的程序中获取数据;或者把数据发送到主机或UNIX应⽤程序中去。即使在同⼀个平台上,不同软件⼚商⽣产的各种软件也常常需要集 成起来。通过WebService,可以很容易的集成不同结构的应⽤程序。3、B2B集成 ⽤WebService集成应⽤程序,可以使公司内部的商务处理更加⾃动化。但当交易跨越供应商和客户、突破公司的界限时会怎么样呢?跨公司的商务交易集成通常叫做B2B集成。WebService是B2B集成成功的关键。通过WebService,公司可以把关键的商务应⽤“暴露”给指定的供应商和客户。例如,把电⼦下单系统和电⼦发票系统“暴露”出来,客户就可以以电⼦的⽅式发送订单,供应商则可以以电⼦的⽅式发送原料采购发票。当然,这并不是⼀个 新的概念,EDI(电⼦⽂档交换)早就是这样了。但是,WebService的实现要⽐EDI简单得多,⽽且WebService运⾏在Internet 上,在世界任何地⽅都可轻易实现,其运⾏成本就相对较低。不过,WebService并不像EDI那样,是⽂档交换或B2B集成的完整解决⽅案。 WebService只是B2B集成的⼀个关键部分,还需要许多其它的部分才能实现集成。 ⽤WebService来实现B2B集成的最⼤好处在于可以轻易实现互操作性。只要把商务逻辑“暴露”出来,成为WebService,就可以让任何指定 的合作伙伴调⽤这些商务逻辑,⽽不管他们的系统在什么平台上运⾏,使⽤什么开发语⾔。这样就⼤⼤减少了花在B2B集成上的时间和成本,让许多原本⽆法承受 EDI的中⼩企业也能实现B2B集成。4、软件和数据重⽤
软件重⽤是⼀个很⼤的主题,重⽤的形式很多,重⽤的程度有⼤有⼩。最基本的形式是源代码模块或者类⼀级的重⽤,⼀种形式是⼆进制形式的组件重⽤。采⽤ WebService应⽤程序可以⽤标准的⽅法把功能和数据“暴露”出来,供其它应⽤程序使⽤,达到业务级重⽤。六、不适⽤场合1、单机应⽤程序
⽬前,企业和个⼈还使⽤着很多桌⾯应⽤程序。其中⼀些只需要与本机上的其它程序通信。在这种情况下,最好就不要⽤WebService,只要⽤本地的 API就可以了。COM⾮常适合于在这种情况下⼯作,因为它既⼩⼜快。运⾏在同⼀台服务器上的服务器软件也是这样。最好直接⽤COM或其它本地的API来 进⾏应⽤程序间的调⽤。当然WebService也能⽤在这些场合,但那样不仅消耗太⼤,⽽且不会带来任何好处。2、局域⽹的同构应⽤程序
在许多应⽤中,所有的程序都是⽤VB或VC开发的,都在Windows平台下使⽤COM,都运⾏在同⼀个局域⽹上。例如,有两个服务器应⽤程序需要相互通 信,或者有⼀个Win32或WinForm的客户程序要连接局域⽹上另⼀个服务器的程序。在这些程序⾥,使⽤DCOM会⽐SOAP/HTTP有效得多。与 此相类似,如果⼀个.NET程序要连接到局域⽹上的另⼀个.NET程序,应该使⽤.NETremoting。有趣的是,在.NETremoting 中,也可以指定使⽤SOAP/HTTP来进⾏WebService调⽤。不过最好还是直接通过TCP进⾏RPC调⽤,那样会有效得多。 转载⽹上的⼀篇讲得⽐较好的⽂章,具体链接地址忘记了,原作者要是要是看到还望提醒⼀声,我好加上去。
2023年8月1日发(作者:)
WebService学习总结(⼀)——WebService的相关概念⼀、序⾔ ⼤家或多或少都听过 WebService(Web服务),有⼀段时间很多计算机期刊、书籍和⽹站都⼤肆的提及和宣传WebService技术,其中不乏很多吹嘘和做⼴告的成 分。但是不得不承认的是WebService真的是⼀门新兴和有前途的技术,那么WebService到底是什么?何时应该⽤? 当前的应⽤程序开发逐步的呈现了两种迥然不同的倾向:⼀种是基于浏览器的瘦客户端应⽤程序,⼀种是基于浏览器的富客户端应⽤程序(RIA),当然后⼀种技术相对来说更加的时髦⼀些(如现在很流⾏的Html5技术),这⾥主要讲前者。 基于浏览器的瘦客户端应⽤程序并不是 因为瘦客户能够提供更好的⽤户界⾯,⽽是因为它能够避免花在桌⾯应⽤程序发布上的⾼成本。发布桌⾯应⽤程序成本很⾼,⼀半是因为应⽤程序安装和配置的问 题,另⼀半是因为客户和服务器之间通信的问题。传统的Windows富客户应⽤程序使⽤DCOM来与服务器进⾏通信和调⽤远程对象。配置好DCOM使其在 ⼀个⼤型的⽹络中正常⼯作将是⼀个极富挑战性的⼯作,同时也是许多IT⼯程师的噩梦。事实上,许多IT⼯程师宁愿忍受浏览器所带来的功能限制,也不愿在局 域⽹上去运⾏⼀个DCOM。关于客户端与服务器的通信问题,⼀个完美的解决⽅法是使⽤HTTP协议来通信。这是因为任何运⾏Web浏览器的机器都在使⽤ HTTP协议。同时,当前许多防⽕墙也配置为只允许HTTP连接。许多商⽤程序还⾯临另⼀个问题,那就是与其他程序的互操作性。如果所有的应⽤程序都是使 ⽤COM或.NET语⾔写的,并且都运⾏在Windows平台上,那就天下太平了。然⽽,事实上⼤多数商业数据仍然在⼤型主机上以⾮关系⽂件(VSAM) 的形式存放,并由COBOL语⾔编写的⼤型机程序访问。⽽且,⽬前还有很多商⽤程序继续在使⽤C++、Java、Visual Basic和其他各种各样 的语⾔编写。现在,除了最简单的程序之外,所有的应⽤程序都需要与运⾏在其他异构平台上的应⽤程序集成并进⾏数据交换。这样的任务通常都是由特殊的⽅法, 如⽂件传输和分析,消息队列,还有仅适⽤于某些情况的的API,如IBM的⾼级程序到程序交流(APPC)等来完成的。在以前,没有⼀个应⽤程序通信标 准,是独⽴于平台、组建模型和编程语⾔的。只有通过Web Service,客户端和服务器才能够⾃由的⽤HTTP进⾏通信,不论两个程序的平台和编程语⾔是什么。⼆、WebService到底是什么
⼀⾔以蔽之:WebService是⼀种跨编程语⾔和跨操作系统平台的远程调⽤技术。 所谓跨编程语⾔和跨操作平台,就是说服务端程序采⽤java编写,客户端程序则可以采⽤其他编程语⾔编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运⾏。 所谓远程调⽤,就是⼀台计算机a上 的⼀个程序可以调⽤到另外⼀台计算机b上的⼀个对象的⽅法,譬如,银联提供给商场的pos刷卡系统,商场的POS机转账调⽤的转账⽅法的代码其实是跑在银 ⾏服务器上。再⽐如,amazon,天⽓预报系统,淘宝⽹,校内⽹,百度等把⾃⼰的系统服务以webservice服务的形式暴露出来,让第三⽅⽹站和程 序可以调⽤这些服务功能,这样扩展了⾃⼰系统的市场占有率,往⼤的概念上吹,就是所谓的SOA应⽤。 其实可以从多个⾓度来理解 WebService,从表⾯上看,WebService就是⼀个应⽤程序向外界暴露出⼀个能通过Web进⾏调⽤的API,也就是说能⽤编程的⽅法通过 Web来调⽤这个应⽤程序。我们把调⽤这个WebService的应⽤程序叫做客户端,⽽把提供这个WebService的应⽤程序叫做服务端。从深层次 看,WebService是建⽴可互操作的分布式应⽤程序的新平台,是⼀个平台,是⼀套标准。它定义了应⽤程序如何在Web上实现互操作性,你可以⽤任何 你喜欢的语⾔,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进⾏查询和访问。
WebService平台需要⼀套协议来实现分布式应⽤程序的创建。任何平台都有它的数据表⽰⽅法和类型系统。要实现互操作性,WebService平台 必须提供⼀套标准的类型系统,⽤于沟通不同平台、编程语⾔和组件模型中的不同类型系统。Web service平台必须提供⼀种标准来描述 Web service,让客户可以得到⾜够的信息来调⽤这个Web service。最后,我们还必须有⼀种⽅法来对这个Web service进⾏远 程调⽤,这种⽅法实际是⼀种远程过程调⽤协议(RPC)。为了达到互操作性,这种RPC协议还必须与平台和编程语⾔⽆关。三、WebService平台技术
XML+XSD,SOAP和WSDL就是构成WebService平台的三⼤技术。3.1、XML+XSD WebService采⽤HTTP协议传输数据,采⽤XML格式封装数据(即XML中说明调⽤远程服务对象的哪个⽅法,传递的参数是什么,以及服务对象的 返回结果是什么)。XML是WebService平台中表⽰数据的格式。除了易于建⽴和易于分析外,XML主要的优点在于它既是平台⽆关的,⼜是⼚商⽆关 的。⽆关性是⽐技术优越性更重要的:软件⼚商是不会选择⼀个由竞争对⼿所发明的技术的。
XML解决了数据表⽰的问题,但它没有定义⼀套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,64位?这 些细节对实现互操作性很重要。XML Schema(XSD)就是专门解决这个问题的⼀套标准。它定义了⼀套标准的数据类型,并给出了⼀种语⾔来扩展这套数据类型。WebService平台就 是⽤XSD来作为其数据类型系统的。当你⽤某种语⾔(如或C#)来构造⼀个Web service时,为了符合WebService标准,所 有你使⽤的数据类型都必须被转换为XSD类型。你⽤的⼯具可能已经⾃动帮你完成了这个转换,但你很可能会根据你的需要修改⼀下转换过程。3.2、SOAP
WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采⽤XML格式封装,并增加了⼀些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC⽅法来调⽤Web Service。
SOAP协议 = HTTP协议 + XML数据格式
SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码⽅式。打个⽐ 喻:HTTP就是普通公路,XML就是中间的绿⾊隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的⾼速公路。3.3、WSDL 好⽐我们去商店买东西,⾸先要知道商店⾥有什么东西可买,然后再来购买,商家的做法就是张贴⼴告海报。 WebService也⼀样,WebService客户端要调⽤⼀个WebService服务,⾸先要有知道这个服务的地址在哪,以及这个服务⾥有什么⽅ 法可以调⽤,所以,WebService务器端⾸先要通过⼀个WSDL⽂件来说明⾃⼰家⾥有啥服务可以对外调⽤,服务是什么(服务中有哪些⽅法,⽅法接受 的参数是什么,返回值是什么),服务的⽹络地址⽤哪个url地址表⽰,服务通过什么⽅式来调⽤。 WSDL(Web Services Description Language)就是这样⼀个基于XML的语⾔,⽤于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都 能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,⼜是⼈可阅读的,这将是⼀个很⼤的好处。⼀些最新的开发⼯具既能根据你的 Web service⽣成WSDL⽂档,⼜能导⼊WSDL⽂档,⽣成调⽤相应WebService的代理类代码。 WSDL ⽂件保存在Web服务器上,通过⼀个url地址就可以访问到它。客户端要调⽤⼀个WebService服务之前,要知道该服务的WSDL⽂件的地址。 WebService服务提供商可以通过两种⽅式来暴露它的WSDL⽂件地址:1.注册到UDDI服务器,以便被⼈查找;2.直接告诉给客户端调⽤者。四、WebService开发 WebService开发可以分为服务器端开发和客户端开发两个⽅⾯4.1、服务端开发 把公司内部系统的业务⽅法发布成WebService服务,供远程合作单位和个⼈调⽤。(借助⼀些WebService框架可以很轻松地把⾃⼰的业务对象发布成WebService服务,Java⽅⾯的典型WebService框架包括:axis,xfire,cxf 等,java ee服务器通常也⽀持发布WebService服务,例如JBoss。)4.2、客户端开发
调⽤别⼈发布的WebService服务,⼤多数⼈从事的开发都属于这个⽅⾯,例如,调⽤天⽓预报WebService服务。(使⽤⼚ 商的WSDL2Java之类的⼯具⽣成静态调⽤的代理类代码;使⽤⼚商提供的客户端编程API类;使⽤SUN公司早期标准的jax-rpc开发包;使⽤ SUN公司最新标准的jax-ws开发包。当然SUN已被ORACLE收购)4.3、WebService 的⼯作调⽤原理
对客户端⽽⾔,我们给这各类WebService客户端API传递wsdl⽂件的url地址,这些API就会创建出底层的代理类,我调⽤ 这些代理,就可以访问到webservice服务。代理类把客户端的⽅法调⽤变成soap格式的请求数据再通过HTTP协议发出去,并把接收到的soap 数据变成返回值返回。对服务端⽽⾔,各类WebService框架的本质就是⼀个⼤⼤的Servlet,当远程调⽤客户端给它通过http协议发送过来 soap格式的请求数据时,它分析这个数据,就知道要调⽤哪个java类的哪个⽅法,于是去查找或创建这个对象,并调⽤其⽅法,再把⽅法返回的结果包装成 soap格式的数据,通过http响应消息回给客户端。五、适⽤场合1、跨防⽕墙通信 如果应⽤程序有成千上万的⽤户,⽽且分布在世界各地,那么客户端和服务器之间的通信将是⼀个棘⼿的问题。因为客户端和服务器之间通常会有防⽕墙或者代理服 务器。在这种情况下,使⽤DCOM就不是那么简单,通常也不便于把客户端程序发布到数量如此庞⼤的每⼀个⽤户⼿中。传统的做法是,选择⽤浏览器作为客户 端,写下⼀⼤堆ASP页⾯,把应⽤程序的中间层暴露给最终⽤户。这样做的结果是开发难度⼤,程序很难维护。如果中间层组件换成WebService的话, 就可以从⽤户界⾯直接调⽤中间层组件。从⼤多数⼈的经验来看,在⼀个⽤户界⾯和中间层有较多交互的应⽤程序中,使⽤WebService这种结构,可以节 省花在⽤户界⾯编程上20%的开发时间。2、应⽤程序集成 企业级的应⽤程序开发者都知道,企业⾥经常都要把⽤不同语⾔写成的、在不同平台上运⾏的各种程序集成起来,⽽这种集成将花费很⼤的开发⼒量。应⽤程序经常 需要从运⾏在IBM主机上的程序中获取数据;或者把数据发送到主机或UNIX应⽤程序中去。即使在同⼀个平台上,不同软件⼚商⽣产的各种软件也常常需要集 成起来。通过WebService,可以很容易的集成不同结构的应⽤程序。3、B2B集成 ⽤WebService集成应⽤程序,可以使公司内部的商务处理更加⾃动化。但当交易跨越供应商和客户、突破公司的界限时会怎么样呢?跨公司的商务交易集成通常叫做B2B集成。WebService是B2B集成成功的关键。通过WebService,公司可以把关键的商务应⽤“暴露”给指定的供应商和客户。例如,把电⼦下单系统和电⼦发票系统“暴露”出来,客户就可以以电⼦的⽅式发送订单,供应商则可以以电⼦的⽅式发送原料采购发票。当然,这并不是⼀个 新的概念,EDI(电⼦⽂档交换)早就是这样了。但是,WebService的实现要⽐EDI简单得多,⽽且WebService运⾏在Internet 上,在世界任何地⽅都可轻易实现,其运⾏成本就相对较低。不过,WebService并不像EDI那样,是⽂档交换或B2B集成的完整解决⽅案。 WebService只是B2B集成的⼀个关键部分,还需要许多其它的部分才能实现集成。 ⽤WebService来实现B2B集成的最⼤好处在于可以轻易实现互操作性。只要把商务逻辑“暴露”出来,成为WebService,就可以让任何指定 的合作伙伴调⽤这些商务逻辑,⽽不管他们的系统在什么平台上运⾏,使⽤什么开发语⾔。这样就⼤⼤减少了花在B2B集成上的时间和成本,让许多原本⽆法承受 EDI的中⼩企业也能实现B2B集成。4、软件和数据重⽤
软件重⽤是⼀个很⼤的主题,重⽤的形式很多,重⽤的程度有⼤有⼩。最基本的形式是源代码模块或者类⼀级的重⽤,⼀种形式是⼆进制形式的组件重⽤。采⽤ WebService应⽤程序可以⽤标准的⽅法把功能和数据“暴露”出来,供其它应⽤程序使⽤,达到业务级重⽤。六、不适⽤场合1、单机应⽤程序
⽬前,企业和个⼈还使⽤着很多桌⾯应⽤程序。其中⼀些只需要与本机上的其它程序通信。在这种情况下,最好就不要⽤WebService,只要⽤本地的 API就可以了。COM⾮常适合于在这种情况下⼯作,因为它既⼩⼜快。运⾏在同⼀台服务器上的服务器软件也是这样。最好直接⽤COM或其它本地的API来 进⾏应⽤程序间的调⽤。当然WebService也能⽤在这些场合,但那样不仅消耗太⼤,⽽且不会带来任何好处。2、局域⽹的同构应⽤程序
在许多应⽤中,所有的程序都是⽤VB或VC开发的,都在Windows平台下使⽤COM,都运⾏在同⼀个局域⽹上。例如,有两个服务器应⽤程序需要相互通 信,或者有⼀个Win32或WinForm的客户程序要连接局域⽹上另⼀个服务器的程序。在这些程序⾥,使⽤DCOM会⽐SOAP/HTTP有效得多。与 此相类似,如果⼀个.NET程序要连接到局域⽹上的另⼀个.NET程序,应该使⽤.NETremoting。有趣的是,在.NETremoting 中,也可以指定使⽤SOAP/HTTP来进⾏WebService调⽤。不过最好还是直接通过TCP进⾏RPC调⽤,那样会有效得多。 转载⽹上的⼀篇讲得⽐较好的⽂章,具体链接地址忘记了,原作者要是要是看到还望提醒⼀声,我好加上去。
发布评论