Web Service在铁路安全环境中的应用
2015-02-11仇士春邓敏丽
仇士春 邓敏丽
1 现状概述
Web Service是一个平台独立的、低耦合的、自包含的、基于可编程的web应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置应用程序,常用于开发分布式的互操作的应用系统。
Web Service能使得运行在不同机器上的不同应用,无须借助附加的、专门的第三方软件或硬件,就可相互交换数据或集成。依据 Web Service规范实施的应用程序之间,无论使用哪种语言、平台或内部协议,都可以相互交换数据。Web Service是自描述、自包含的可用网络模块,可以执行具体的业务功能;也很容易部署,因为它们基于一些常规的产业标准及已有的一些技术,如标准通用标记语言下的子集XML、HTTP;Web Service减少了应用接口的花费,为整个企业甚至多个组织之间业务流程的集成提供了一个通用机制。
Web Service 作 为 RPC (Remote Procedure Call Protocol)技术的一种演进,主要由SOAP、UDDI和WSDL组成。SOAP是基于XML的简易协议,可使应用程序在HTTP之上进行信息交换。UDDI是一种目录服务,企业可通过它注册并搜索Web Services。WSDL是一门基于XML的语言,用于描述 Web Services及如何对其进行访问。Web Service通过这一系列的协议从远程计算机程序上请求服务,而不需要了解底层网络技术的协议,使开发者可以更加专注于开发的程序本身,更加轻松和有效地使用远程的资源或进行数据交互。
Web Service作为一种平台独立的技术,具备跨平台、跨开发语言的特性。可以在 Windows、Linux、Unix甚至是手机App中都能使用,而且包括Java、.Net、PHP、Delphi等开发语言都支持使用该技术开发各项应用。
近年来,随着铁路信息化的发展,越来越多的应用系统也开始使用这项技术进行开发,极大的提高了不同系统之间的整合效率。
2 Web Service的应用
尽管Web Service有诸多优点,但由于其运行方式及铁路信息系统的特点,在使用中还是会遇到一些问题,下面对这些问题的表现及解决进行总结。
2.1 兼容性问题
严格来说Web Service是行业标准,各个组织和厂商以其为依据开发自己的服务和框架,其中最具代表性的就是Java的JAX-WS、微软的.net web server和 WCF、Apache的Xfire和axis2。
实际工作中遇到兼容性问题主要是在JAX-WS和WCF之间,由于微软的技术实力雄厚,不仅实现了Web Service的标准,而且基于自家的.net做了大量的扩展和优化,使其作为服务与JAX-WS进行交互时会出现兼容性问题。解决这个问题的办法比较简单,就是在WCF的服务开发时将其服务绑定规则设置为basicHttpBinding,这样WCF就能够以Web Service的标准方式对外提供服务,与JAX-WS开发的程序进行正常交互。
通过Web Service进行不同系统和服务之间的相互调用的模式具备非常明显的SOA特征。
1.独立功能的实体。目前开发设计新系统无一例外都是采用分系统、分模块进行的,这样各系统、模块具备自我管理和恢复的能力。常见的技术有事物处理、消息队列、冗余部署、集群系统等,这些技术和模块之间差异巨大,但是通过Web Service进行相互调用时只需知道对方的服务接口,而不用关心对方使用的什么硬件平台、运行什么操作系统、使用什么语言、网络层接口处理等底层细节。
2.大数据量低频率访问。通过使用 WSDL和基于文本 (Literal)的SOAP请求,可以实现一次性接收大量数据接口。SOAP请求分为文本 (Literal)方式和远程调用 (RPC)方式,使用文本方式就可以一次性发送/接收大量数据,测试和使用过程中可实现一次性传送20MB的文本数据,进行少许改造后甚至可以用来传送照片、统计图表之类的小型文件。只是对平台有些要求,如Java环境版本不能低于1.6.0_20,服务器软件如WebLogic、WebSphere也不能使用过老的版本。
3.基于文本的消息传递。Web Service所有的通信都是通过SOAP进行的,而SOAP是基于XML的,不同版本之间可以使用不同的DTD或XML Scheme加以辨别和区分。而传统的COM、CORBA这类组件模型中从服务器端传往客户端的是一个二进制编码的对象,在客户端通过调用这个对象的方法来完成某些功能。但是在现实环境下,不同语言、不同平台对数据、甚至是一些基本数据类型定义不同,给不同服务传递对象带来很大困难。由于基于文本的消息本身是不包含任何处理逻辑和数据类型的,因此服务间只传递文本,对数据处理依赖于接收端的方式可以绕过兼容性问题。
Web Service的使用促进了SOA架构的成熟与完善,降低了不同系统软硬件之间的兼容性障碍,使得开发更大更丰富的信息系统成为可能,不但可以更快的开发新系统,而且可以无缝的与既有系统进行集成和整合。
2.2 跨安全域问题
铁路网络系统的安全域是通过安全平台将网络分为内网和外网,数据和关键服务处于内网,用户和应用服务处于外网。用户访问应用服务器时,应用服务器通过安全平台访问内网服务进行处理,然后将处理结果再通过响应方式反馈给用户。用户访问见图1所示。
由于穿越安全平台过程比较复杂,所以在使用Web Service穿越安全平台进行内外网应用交互时,公用的实现框架均不能满足这种需求,需要进行相关的安全认证和设置安全信息的工作才能将访问请求通过安全平台发送到内网服务端。为了完成这部分工作,开发了一个Java接口开发包,这个开发包通过使用定制化的SSLSocketFactory获取到认证中心的SSL连接认证适配器,基于这个定制化的SSLSocketFactory结合HttpsURLConnection即可完成到认证中心的通信,获取认证令牌,然后通过定制化的HandlerResolver接口和定制化的SOAPHandler接口,即可将获取到的认证令牌按照指定的格式填充到Web Service请求的HTTP头中去,然后将定制化的HandlerResolver设置到Web Service的服务接口中后,就可以像调用普通的Web Service,而这一系列的初始化操作都可以通过使用Spring Framework配置实现自动化,而在程序中只需要进行类似如下操作即可调用:
class Test {
@Autowired
private IHello iHello;//测试 Web Service服务接口
public void sayHello () {this.iHello.say-Hello ();}
}
因此虽然在不同的安全域间可能会存在以上这种比较复杂的认证隔离设备,给内外网之间的应用通信带来不小的影响,但是只要选择的方式、方法得当,仍然可以将这种影响降到最低,既能保证内外网间的通信安全,又能顺利的通过 Web Service进行服务调用。
2.3 超时问题
在进行应用访问的过程中,由于网络问题、服务响应问题等不可避免的会出现响应超时的情况,如果不处理超时问题,不仅会影响用户的访问体验,甚至会影响程序的稳定性,导致程序僵死。
对于比较常用的JAX-WS框架,如果需要在访问Web Service的时候启用超时处理,则需要一些特别的方法,主要方法如下:
#假设Service服务下有个IHello服务接口
IHello ihello=Service.getIHello ();
Map<String,Object>requestContext=((BindingProvider)ihello).getRequestContext();
#设置连接超时,单位ms
requestContext.put(BindingProviderProperties.CONNECT_TIMEOUT,10000);
#设置访问请求超时,单位ms
requestContext.put(BindingProviderProperties.REQUEST_TIMEOUT,10000);
#然后在调用IHello接口中的方法就会受到超时设置的影响
ihello.sayHello ("Hello World!" );
这个方法可解决Web Service调用时的超时问题,通过这个方法设置连接超时和请求超时,当相应超时事件发生时就会抛出异常TimeoutException,应用可以捕获该异常进行处理或是反馈给前端用户,由用户决定是否继续,更加友好的解决应用中的超时问题。
3 总结
Web Service作为一种重要的跨平台、跨语言的开发标准,其优点众多,而且促进了SOA的成熟与发展,势必会成为一种广泛使用的开发模式,甚至是应用架构的重要演进方向。然而就像以前曾经流行过的其他技术一样,它并不完美,在实际使用中,也会遇到诸如跨安全域访问、超时等问题,不仅会影响用户的使用感受,严重时会影响应用的稳定性,危及应用的安全稳定运行。因此必须要不断的研究、学习和测试它,才能在铁路信息系统中更好的使用它,发挥其优点,规避其缺点,使其更好地为铁路应用系统服务。
[1] Martin Kalin.Java Web Services:Up and Running.O'Reilly Media,Inc,USA,2009.
[2] 陈雄华.Spring 3.x企业应用开发实战[M].北京:电子工业出版社,2012.
[3] Elliotte Rusty Harold.Java Network Programming .O'Reilly Media,Inc,USA,2004.
[4] 许令波 .深入分析Java Web技术内幕,第2版[M].北京:电子工业出版社,2014.