Part1: 缘起
在上次的讨论中,我们跟随大师Don Box从C++游历到 COM,再从COM游历到CLR。一路而来,我们似乎领会到越来越多组件话编成的味道。这不禁让我勾起了些许联想。组件——Component,这个被业界已经喧嚣叫嚷了太多年的概念。从C++中的源代码复用,到Win32下OLE、COM的到来,到CORBA……
走在二十一世纪的初期,时下的编成语言早已不是昔日类似C甚至Assembly那样孱弱的组件特性了。不错,肯定有许多人会为C甚至Assembly申辩。但凭心而论,现代的高级语言早已经不再是Eric S. Raymond所推崇备至的像C语言那样的薄薄的一层。他们和那浩繁巨大的API库为我们干了太多的事情,我们需要操心底层的越来越少,但我们所拥有的控制却并非少了。
在这蛮荒之时,走向组件化最重要的就是规避差异!
这些差异从何而来?
从CPU来!从OS来!从编程语言来!从语义来!
为什么一个语言写的代码不能轻易的成为一个可重用的组件?这里困难主要来自CPU和OS,数据类型在不同的CPU上有不同的存储格式!语言的运行时环境或者代码本身依赖于OS提供的专属API,于是自然你的代码被绑定在了特定的CPU & OS 组合的平台上。用C、C++等等原生高级语言(这类语言主要特征是:直接和OS打交道,如手动管理内存,借助平台特性进行线程管理,直接编译成特定平台的机器代码,平台间移植困难重重)编写的应用大多头符合上述两个特征。这也正是上个世纪90年代Win32风靡时,人人追捧微软那8万多API的缘由。在那个年代,一个操作系统的API确实占据举足轻重的地位。正如史蒂夫·鲍尔默在微软PDC大会上那样急切的期盼:“开发者!开发者!开发者!开发者!”。正是因为太多的Windows应用才真正撑起了Win32、MFC满天飞时的那个微软帝国!在这当中OS API扮演了很重要的角色。这也是那个原生语言时代的必然。
逃离OS!几乎是所有反微软的共同心声。程序语言的进步使这成为了可能。基于虚拟机的编程语言,在OS和编程语言之间增加了一层间接性——虚拟机(VM)!如果让VM及至的简化,那就是当年原生语言下的语言运行时(RunTime)!VM的出现就是为了规避来自CPU和OS的差异。这样一个新的间接层的出现,使得代码在跨越这些平台复用成为了可能!然而VM的出现甚至能解决各种编程语言之间的差异(这种差异更多的表现再类型系统上)!这两者最典型的代表分别是:JVM和CLR。一个支持跨平台,但到来今天,在JVM上面跑的语言岂止JAVA啊!beanshell、groovy、python、ruby如雨后春笋在JVM这个大观园里百花齐放!而CLR早已不是像微软一厢情愿的那样只在Windows下开花结果,Linux/Unix下猴子(Mono)搅扰了微软的黄粱美梦。由此也可窥见一二的是:即便厂商各自的策略不同,但规避差异的潮流会让它们渐渐趋同的。
值得多提的,是规避各种编程语言的差异所带来的一些麻烦。上面我说,CLR规避了各种编程语言之间的差异。但事实上它的能力是有限的!它基于它内部的CTS(公共类型系统),各种编程语言特有的类型是不能在语言之间交互的。也就是说,横梗在各种语言之间的最大困难就是:复杂类型的映射!
无论是IL(中间语言)还是byte-code它们描述特定语言类型的能力都不是最好的!而这个时候,历史的机遇走在了XML的当口。它的出现,如山洪般迅猛势足!或者在我看来用下面这个论点来解释其获得广泛巨大成功的原因:具备很好的描述性!XML从HTML而来,摆脱了狭隘桎梏般的几个标签,把描述权还归给开发者,XML的出现注定使它成为一种元语言!或者这样讲,XML作为一种语言本身来讲的话,它孱弱乏力。但作为一种元语言,它则变作了一个强有力的内核和引擎!使用XML来描述复杂的类型系统成为一种很必然的选择走上了IT历史的舞台!
在这些为之努力的人当中,不得不说的还是Don Box.。他早期在微软的辛勤工作,为SOAP规范的制定做出了卓越的贡献!SOAP就是在XML Schema出现之前使用XML描述复杂类型系统映射的一次具有开创意义的尝试。然而也正是因为SOAP自身早于XML Schema出现,也给现今的XML Web Service的使用带来了更多的复杂和混乱。在SOAP之后,在XML自身的DTD的演化下,XML Schema规范发布。这是一个非常重要的关于类型在XML中如何建模的规范!它的出现也是Web Service应运而生的必要前提!
除了规避差异,使组件可重用之外,我们也更希望一直快捷的使用方式,而不是烦笨的拷贝分发。通过Web进行链接那正是我们想要的!所以在这个时代,我们可以说:“链接就是API!!!”。在Web上,我们现成可用的就是如TCP,SMTP,HTTP等等协议。
于是,历史走到这个端口,一切都呼之欲出:HTTP、XML、XML Schema、SOAP!
Part2: 历史的明线
WSDL——Web 服务描述语言。这个用XML进行描述的一个规范!在那些支持协议上终于让组件编程能够跨越了CPU、OS、Programming Language之间的鸿沟,使便捷的组件交互成为了可能。
在上一部份中,我们从组件编程的角度谈了谈Web Service的发展之路!现在我们换一个角度来看Web Service。
RPC——远程过程调用,这是一个有相当年龄的词汇!早在面向对象语言大行其道之前,它早已如雷贯耳。在70年代那些基于COBOL构建的大型商业应用中,过程语言的RPC早已应用自如。等到了面向对象语言成为主流的今天,远程方法调用(RMI)依然在分布式编程领域占着很重要的位置!Web Service的出现大有该朝换代之势。从保守的眼光来看,Web Service不过是一个新的远程方法调用技术。然而我们应当发现消息与调用,方法(过程)与操作之间那微妙的差别。从更具颠覆意义的层次看,Web Service决不是单纯的远程方法调用。正基于这个原因,在Web Service中分为两大派系:架构流派和方法流派。
无疑,Don Box肯定是站在方法流派这边的。这和他早期的经历是密不可分的。早期在C++和COM的职业经历使Don Box在制定SOAP规范时就是为了解决在C++和COM中出现的许多问题,它依然保持着很浓烈的远程方法调用的味道!在SOAP1.1规范中的第5节和第7节更是使这种风格在整个规范中打上了深深的烙印。(SOAP规范的第5节描述了一套用于编码数据类型的XML(包括对多态类型的编码)。第7节则描述了如何将方法调用的响应模拟成XML结构。在使用Web Service时,当使用第5节和第7节一起用于模拟方法调用时,这种类型的SOAP通常被称为Rpc/Encoded SOAP)
两种流派的斗争也使得后来的互操作性话题变得那么异常艰难!回想CORBA因标准下各种实现不兼容而被弃用之前事,Web Service的处境也并非毫无隐患。Rpc/Encoded SOAP在Web Service的互操作性中就扮演着这样一样讨人厌的角色。
分享到:
相关推荐
理解Web Service的基本原理,熟悉PB11的API和工具,以及遵循良好的编程和设计原则,将有助于提升开发效率和应用质量。 总结,PB11提供了强大的Web Service开发功能,让开发者能够轻松地构建和整合分布式系统。通过...
XFire是Java平台上的Web Service框架,而Axis则提供1.x和2.x两个版本,用于生成和部署Web Service。此外,Web Service的相关技术还包括AJAX(Asynchronous JavaScript and XML)用于增强用户体验,JMS(Java Message...
1. **创建Web Service项目**:在VFP中,可以使用Class Library来构建Web Service。首先创建一个新的Class Library,然后在其中定义服务类,这个类将包含Web Service的所有方法。 2. **定义服务接口**:在服务类中,...
Web Service Proxy Wizard 是一个工具,它为Visual Studio 6.0的开发者提供了一种方法,可以将Web服务封装成一个代理组件(.dll),这个组件可以在设计时通过早期绑定(Early Binding)像其他COM组件一样使用。...
《实战Delphi6.Kylix2.SOAP.Web Service程序设计篇》是由知名技术专家李维编著的一本专业书籍,主要面向的是希望深入理解和应用Delphi6、Kylix2、SOAP以及Web Service技术的开发者。这本书详细介绍了如何利用这些...
通过熟悉掌握的PBNVO对象,pb11开发者可以高效构建Web Service。在企业资源、Web服务以及客户端的交互中,pb11不仅作为服务提供者,还能作为服务消费者,与.NET、Java等其他环境下的Web服务无缝对接。 ### PB11建立...
为了实现业务逻辑和处理Web Service响应,你需要创建一个或多个Java类文件。在NetBeans中,这可以通过右击源包,选择“New”>“Java Class”来完成。在这个类中,你将编写代码来调用Web Service并处理返回的结果。 ...
- **任务划分**:团队合作时,需要将工作分解成多个任务,每个成员负责一部分。 - **理解项目构架和解决方案结构**:了解项目的基本结构和组织方式,包括各层(如表示层、业务逻辑层、数据访问层)的职责。 - **...
在附件中,"Ñ╬XFile╡oºGwebService--╕g┤·╕╒ok2010-04-14.doc"可能是关于使用XFile开发Web服务的详细文档,而"AXIS2--╡oºGService--╕g┤·╕╒okíXÑ[║δ.docx"则是关于Axis2的指南。这两份文档可以...
Web服务是一种基于网络的、标准化的机制,允许不同的应用程序之间进行...通过研究这个简单的实例,你可以快速上手并进一步探索更复杂的Web服务架构和应用场景,比如RESTful API设计、服务治理和服务网格等高级主题。
Web Service入门学习笔记 ...然而,实际开发中,你还需要掌握更多的高级特性,如错误处理、事务管理、性能优化以及与其他技术(如EJB、JMS)的集成。持续学习和实践是成为Web Service专家的关键。
4. 熟悉跨平台的Web Service开发,利用Kylix 2进行Linux环境下的服务实现。 5. 探索如何在实际项目中应用和调试Web Service,提高应用程序的互操作性。 通过实践书中的源码,开发者可以提升自己在Delphi 6和Kylix 2...
1. **XML Web Service**:介绍Web服务的基本概念,包括其作为分布式应用程序解决方案的优势。 2. **XML Web Service 体系结构**:探讨Web服务的底层架构,解释如何通过HTTP协议和XML数据交换来实现跨平台通信。 3....
本书《*** MVC 4 and the Web API: Building a REST Service from Start to Finish》专注于如何利用*** MVC 4框架结合Web API构建世界级的REST服务。该书深入详细地介绍了如何使用*** MVC 4和Web API构建先进的REST...
【Eclipse下基于Axis2的Web Service平台搭建与使用】涉及多个IT领域的知识点,以下是详细的说明: 1. **Web Service**:Web Service是一种基于网络的、分布式的模块化组件,它提供了一种标准的方式,使得不同的应用...
在准备这样的考试时,考生需要深入理解XML的结构和解析,熟悉SOAP消息的构建,掌握WSDL的阅读和理解,了解UDDI的工作原理,以及精通C#语言在.NET框架中创建和使用Web服务的方法。通过练习题目和阅读相关资料,可以...
接下来,我们需要构建一个网络请求来调用C#的.NET Web Service。在安卓中,通常使用HTTP客户端库如HttpURLConnection或OkHttp来发起网络请求。一旦扫描到二维码,应用会将解析出的数据(可能是URL、文本信息等)封装...
内容概要:本文档提供了基于XFire和Spring框架集成来搭建Web Service的基本指南。具体包含了创建服务接口和服务实现类(Echo 和 EchoImpl),并在Spring的应用上下文中配置XFire Exporter进行Web服务发布以及相应的...