用Web Services来整合.NET和J2EE
互用性(Interoperability)问题说起来容易但通常实现起来却比较困难。尽管Web service曾承诺要提供最佳的解决方案来衔接基于.NET和J2EE的应用程序,但其过程却并不简单。我们发现在使用SOAPBuilders和Web Services Interoperability Demo (WSID) 时还需要考虑许多问题。近期发布的Web Services Interoperability Organization (WS-I)对此也提供了很多有价值的深层见解。
本文包括了从这个demo的开发过程、参与SOAPBuilders互用性测试,以及WS-I于近期发布的有关互用性的规范中获得的经验总结(想了解更多关于WS-I的资料,可以查阅工具条中的“谈谈WS-I”)。以下,我们就开始研究在哪些范围可以通过使用Web services来实现互用性以减少你目前以及未来在.NET和J2EE上的投资。我们提供的结论将有助于你决定是否应该同时对这两种平台进行投资,以及基于Web service互用性的局限性是否会使你只选择其中的一个平台。
互用性问题出现于计算机行业发展的早期阶段。当时软件的开发是为了适应某一特定的硬件应运而生的,近期则是为了适应采用特定硬件配置的特定操作系统。然而,操作系统是会经常更换的,而且经常会采用新的硬件或对硬件进行升级。因此,尽管计算机应用程序使用了基于操作系统的编译或解释语言,但仍然受到操作系统改变的冲击。这的确是事实,尽管有一些高级语言(有时被称为第三或第四代语言,比如Visual Basic、C#和Java)的幕后想法是使程序员在一种更高级别的抽象层中来开发程序。
在计算机应用的早期阶段,人们没有太多地考虑接口连接或整合程序的问题。这种状况一直持续到计算机体现出了重要的商业用途 -- 使部分或所有商业操作实现自动化,一些有关投资保护(investment protection)、整合以及互用性等实际问题才随之产生。商业要求无论投资何种软件,他们都可以持续使用这些程序,而不管硬件、操作系统和开发技术是否发生变化。这就使得软件在完全不同的硬件和操作系统之间的兼容性成为企业最大的、花费最高的问题,因为它直接影响到生产力(productivity)、停工期(downtime )、机会的把握和其他一些失效方面的问题。
.NET和J2EE的互用性问题之所以非常重要,是因为大多数企业都在使用其中之一或同时使用这两种平台来开发程序。.NET和J2EE分别代表了解决本质上相同的问题的不同方法:开发、部署和管理定制商业程序。定制商业程序的重要性在于商务本身有着不同的运作,如果不能使其具有独特之处则会影响管理存货(inventory)、处理定单或提供财政服务(financial services )这些问题。实际上,企业之间的相互竞争经常是很激烈的;比如,Wal-Mart曾吹捧自己著名的进销存系统(inventory management system),说它可以近实时地巩固来自于其所有店铺的购买力,而且能够使用这些信息从供应商处得到较低进价。
了解.NET和J2EE的区别
在一个完美世界里,用于自定义应用程序的主要开发平台之间是完全兼容的,为某一平台编写的程序能够完全适用于其他平台。然而,我们离完美的世界还差得很远。目前的软件行业还相当不成熟,甚至可以说还没有完全标准化。
和电子行业及其他行业不同,计算机行业一直在为建立一套标准而努力。就在不久以前,DVD Forum成功地发布了一套用于DVD-ROM软件和硬件的标准。所有DVD播放器均可播放任何DVD碟,所有DVD硬件制造商以及DVD碟制造商都将依照相同的编码标准。而在软件行业中,各主要开发商均实行各自不兼容的软件系统。他们鼓吹各自的产品对开发人员如何有用,以此期望开发人员使用他们的产品来开发项目,因为一旦程序开发进入生产(production)阶段,一般就不会更换使用其他产品了。软件开发商们不是要建立一种所有人共同参与的市场,而是为了在这个复杂的开发市场中占有一席之地。
Microsoft.NET的最初想法是希望进行接近操作系统平台的定制开发,当然,这是指使用Windows(目前是 XP、ME和2000)。Visual Basic和C#是.NET平台上最重要的开发语言,并且它们不能在其他平台上运作。而基于Java的J#和.NET平台也是互不兼容的。Microsoft声称有许多开发商在开发与.NET common language runtime (CLR)相合作的语言,但直到今天,我们看到CLR还只是一个Windows“版”的技术。这就说明存在一个重要的互用性问题,因为每种编程语言(根据定义来划分)都有其各自特定的数据类型和数据结构。
仅凭一个简单的HTTP连接是无法实现互用性的,因为程序是在操作系统之上的编程语言抽象层中进行开发的。.NET和J2EE平台上的开发编程语言有着本质上的区别(.NET比较私有化而J2EE则更开放)。另一个重要的区别是对.NET来说,开发环境和操作系统是由同一开发商所提供的。.NET和J2EE针对分布式应用程序有着不同的、不相兼容的二进制通讯协议(binary communication protocols):它们分别是.NET remoting和Remote Method Invocation/Internet Inter-Orb Protocol (IIOP)。
当然和VB、C#、甚至J#相比,Java有着不同的数据类型和数据结构。通常解决互用性的首要问题就是处理数据类型和结构的不兼容型,这也是在测试Web services互用性过程中的一个重要挑战。
尽管Java运行于Windows平台,但J2EE应用程序却能够在任何平台上进行开发,并以通常被称为“松散耦合”(loosely coupled)的方式和任何操作系统相连。换言之,J2EE尽量避免了使用操作系统特有的(operating-system-specific)特性和功能,比如直接内存管理(direct memory management);或是平台特有的(platform-specific)通信机制,比如Microsoft Remote Procedure Call (RPC)。
.NET开发环境能够充分利用操作系统的“紧密耦合”(tightly coupled)或“本地”(native)实现的优势,并能随意使用Microsoft特定的功能和操作系统服务。总体来说.NET更容易使用,它比J2EE更好地结合了Windows本身的特性;但J2EE程序的优势在于可以运行于其他操作系统之中。
在编程语言行为(programming language behavior)、本地分布式计算协议、数据类型和结构,以及从操作系统服务中分离(isolation)等方面的不同都会对互用性产生影响。除非所有人都使用相同的编程语言、操作系统和应用程序,否则你还是需要了解各种复杂的互用性问题,以及哪种方案更值得去研究。
权衡Web Services解决方案
用来解决互用性问题的Web services规范已经出台了,其中包括解决.NET和J2EE的互用性方案以及Simple Object Access Protocol (SOAP)、Web Services Description Language (WSDL)、Universal Description、Discovery和Integration (UDDI)等协议。了解它们真正能解决什么问题以及如何通过使用它们来解决问题是相当重要的。
SOAP规范定义了从HTTP到TCP/IP数据传送的消息格式,WSDL规范定义了如何描述一个Web service,而UDDI则定义了如何注册(register)和发现(discover)Web service描述。SOAP和WSDL是位于World Wide Web Consortium (W3C)底层的标准。W3C还负责定制HTML和XML领域的各种规范。
另外,W3C还为Web Services Architecture Working Group提供赞助,该组织负责开发一个用于包含基本规范的Web service参考架构(reference architecture)。Web service规范和实现它们的底层平台是完全独立开的,这和HTTP与HTML之间的情况相似,同时它们能在.NET和J2EE平台上运行的很好。
Web Services Architecture Working Group还制定了一些扩展规范(extended specification),比如在安全性、协调(orchestration)和事务处理方面的规范。用来实现这些规范的产品并不是很多,因此在这里我就不详细地介绍了,除非说到一些更为复杂的互用性问题,因为你必须了解Web service交互的每个部分是否支持其他规范,以及它们支持哪些规范。但从到目前为止的经验来看,即使是最基本的Web service规范也试图向互用性挑战,这是因为Web service技术存在于一个高级的抽象层中,它包括两种主要的交互方式(interaction style),每种都有其各自考虑的范围。
访问机制
一般来说,开发人员会使用两种机制来访问一个远程程序(就是从位于一个不同地址空间(address space)的程序中调用另一个应用程序):RPC,它主要包括定义和使用外部程序调用接口;以及文件或队列(queue)操作,其中程序通过对文件或队列的读写来实现数据共享。
SOAP是被指定且考虑了这两种途径而编写的(协议)。在Web service领域里,它们被称为面向RPC(RPC-oriented) 和面向文档(document-oriented)的交互方式。面向RPC方法在同步通信功能中比较常见,比如用在CORBA、COM,以及用在.NET和J2EE的二进制通信协议里。使用RPC的一个好处是请求者(requestor)能看到接口定义(interface definition )中有关service的定义;就是说,程序或方法名以及调用参数可以用来提供有关service行为的信息。使用基于工具包的 RPC方法的另一个好处是用于实现RPC方式的编程接口会自动实现真实的数据类型与XML结构之间的转换。这样会使程序员从数据转换中解脱出来。使用面向文档(或称为消息传输)方式的优势在于请求者和提供者只需在数据(或schema)定义上取得一致就可以了,而对程序或方法调用的具体细节不作要求。然而,面向文档方式仅限于使用XML文档发送和接收数据。由于现在基于XML文档的使用越来越广泛,所以这也不是什么问题,尽管早期的使用者更愿意将非XML信息转换到合适的XML结构中,以此提高文件交互方式。最终,使用基于RPC还是基于文档方式将由各自service的调用方法(你是否需要在一个普通文档上用详细的参数或相对较少的调用操作来完成大量特定的方法调用呢?)和被传输的数据类型(你需要转换的数据是简单的还是复杂的数据类型?)来决定。
原文:http://www.it28.cn/ASPNET/WebService/256485.html
用Web Services来整合.NET和J2EE的更多相关文章
- 基于Spring设计并实现RESTful Web Services(转)
基于Spring设计并实现RESTful Web Services 在本教程中,你将会使用Spring来创建一个具有生产力的RESTful网络服务. 为什么用RESTful网络服务? 从和Amazon ...
- Delphi 6 Web Services初步评估
Delphi 6 Web Services初步评估这是我刚到现在公司的时候(2001年8月份)所作的一份测试报告,现公布出来,希望能对大家有所帮助.因为当时d6刚刚发行,Web Service方面还存 ...
- Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么(转)
Web 建站技术中,HTML.HTML5.XHTML.CSS.SQL.JavaScript.PHP.ASP.NET.Web Services 是什么?修改 建站有很多技术,如 HTML.HTML5.X ...
- RESTful Web Services初探
RESTful Web Services初探 作者:杜刚 近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTf ...
- 使用 Spring 3 来创建 RESTful Web Services
来源于:https://www.ibm.com/developerworks/cn/web/wa-spring3webserv/ 在 Java™ 中,您可以使用以下几种方法来创建 RESTful We ...
- (转) Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么?
Web 建站技术中,HTML.HTML5.XHTML.CSS.SQL.JavaScript.PHP.ASP.NET.Web Services 是什么? 建站有很多技术,如 HTML.HTML5.XHT ...
- 利用WSCF进行契约先行的Web Services开发
http://www.cnblogs.com/goody9807/archive/2007/06/05/772107.html 什么是契约先行(Contract-First)? 如果说一个新的软件开发 ...
- 【转】RESTful Web Services初探
近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTful风格的Web Services,比较著名的包括Twit ...
- Axis2在Web项目中整合Spring
一.说明: 上一篇说了Axis2与Web项目的整合(详情 :Axis2与Web项目整合)过程,如果说在Web项目中使用了Spring框架,那么又改如何进行Axis2相关的配置操作呢? 二.Axis2 ...
随机推荐
- Kubernetes-1
master 节点负责管理整个集群,管理的控制面板,全局的角色和调度 3个组件 API Server : 统一入口 kubectl 客户端管理工具 Etcd 数据库 Scheduler 集群的调度 C ...
- python3模块: os
简介 os模块主要用于提供系统高级别的操作. 常用方法 os.access(path, mode) # 检验权限模式 os.chdir(path) # 改变当前工作目录 os.chflags(path ...
- Spring Boot 2.0正式发布,新特性解读
作者|翟永超 Spring Boot 2.0 来啦,有哪些新特性?升级吗? 写在前面 北京时间 3 月 1 日,经过漫长的等待之后,Spring Boot 2.0 正式发布.作为 Spring 生态中 ...
- SpringBoot 遇到 com.google.guava » guava 组件运行异常问题修复方案
环境 Apache Maven : 3.5.4 org.springframework.boot » spring-boot-starter-parent : 2.0.3.RELEASE io.spr ...
- [每天解决一问题系列 - 0012] 如何通过程序获取IIS站点信息
问题描述: 在WiX中需要判断某个站点是否存在,WiX没有这个能力,该怎么做呢? 解决方案: 解决方法就是写一个Custom Action来检测,实现的途径也有很多,现在想到了这么几个 1)Power ...
- Django --ORM常用的字段和参数 多对多创建形式
1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型 ...
- spring cloud(断路器——初学四)
在分布式架构中,当某个服务单元发生故障后,能通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间的等待. Netflix Hystrix 在Spring Cloud中使用了Hystrix 来实 ...
- 使用maven构建多模块项目,分块开发
在多人使用Maven协作开发项目时,尤其是稍微上点规模的项目,每个RD的工作都细分到具体功能和模块,有些模块甚至还要单独部署. 我们假设有这样一个商城项目,包括以下几个模块: 商城前台(shop) 管 ...
- 基于Flume的日志收集系统方案参考
前言 本文将简单介绍两种基于Flume的日志收集系统可能的架构方案,可根据不同的实际场景参考使用. 方案一 示例图如下: 说明: 每个日志源(http上报.日志文件等)对应一个Agent-c用于收集对 ...
- Apache Commons Beanutils 三 (BeanUtils、ConvertUtils、CollectionUtils...)
前言 前面已经学习了Apache Commons Beanutils包里的PropertyUtils和动态bean,接下来将学习剩下的几个工具类,个人觉得还是非常实用的,特别是CollectionUt ...