超越浏览器,共同迎接Smart Client的到来
一个时代的终结往往是以富于戏剧性的大喜或者大悲宣告它的终结,那份曾经的温暖只能回味于发黄的旧梦,抑或是多年以后的某日,我们依然会想起,曾经走过的一幕幕会在心灵的角落唤起……
引子
多年前,当我将一个基于C/S架构的工业控制系统移植到B/S架构上的时候,有一种欣喜若狂的感觉,而今那样的成就感将不复存在,过多的是为了实现C/S架构下丰富的表现界面而不得不费尽心思的沮丧,原因无它,因为时代已经改变。微软是一家伟大的公司,虽然在软件开发界一直批评不断,但不同的声音始终就存在于这个世界上。如果从公正的角度去看待技术如何真正推动生产力,在此点上,微软确实是长袖善舞,通过技术一次又一次的改变软件开发的世界,不可避免的,也一次又一次的在颠覆传统思维….
ü 完整的Win32 API和COM规范将开发从原始社会带入一个体制完善的“封建社会”
ü ASP的推出将曾经高高在上的Web开发拉下神坛,从此进入一个Web应用的黄金时代
ü ASP.NET则完成了Web开发领域的绝对统治,WebForm终于可以让开发人员去享受基于事件的Web编程
ü 而今……
一个极度强盛的时代总是包含着自己的危机,也为下一个时代的到来做了铺垫,即使强大如ASP.NET也不能例外。我们越来越发现,B/S架构虽然得到了最好的支持,但是对于不断出现的新的需求,依旧有心无力,许多事情我们依旧需要回归到曾经被搁浅在历史河流中的C/S架构,于是有人提出了“The Return of Rich Client”的论调,姑且不去论证其准确性到底有多少,但是有一点可以肯定,一种新的文化正在渐渐颠覆经过许多年发展建立起来的B/S文化。
许多业界评论家认为微软的技术未必是最好的,可是却始终是最好用的,也有一些技术狂热者就此对于微软不屑一顾。可是这家公司真正的伟大之处正是在于对趋势的敏锐把握和前瞻性,总是在恰当的时机推出恰当的产品和概念,然后“恰当”的颠覆主流文化。
不知道各位读者是否曾注意到,自微软.NET战略推出以来,一个新的概念也随之而广为人知——智能客户端。是的,就是它,在未来的几年内必将成为应用开发的主流架构。通过下文对应用技术架构历史的回顾和对智能客户端的介绍,相信您在工作上再次做出决策或前瞻企业的未来时,将发现智能客户端是一个令人激动的选择。
B/S架构的由来和问题
让我们首先记住一个名字:Tim John Berners-Lee。
正是这个英国老兄在不经意间改变了整个世界,也成就了B/S时代的辉煌,在CERN (European Particle Physics Laboratory,欧洲量子物理研究所)工作期间,他发现了CERN在信息的内部沟通存在信息遗漏的弊端,于是在1989年3月Tim向CERN提交了名为“Information Management: A Proposal”的建议书,在这份文件中,Tim提出利用Hypertext(超文本)构造链接信息系统的设想。同样,我们也可以从文件中看到“Browser(浏览器)”概念的最初提出。1991年,在此基础上Tim开发了第一个真正意义上的Web 服务器——httpd、第一个客户端浏览器——World Wide Web,之后又在1991年建立并开通第一个WWW网站http://info.cern.ch/(该网站至今仍然是CERN的官方站点)。
而1993年5月,伊利诺斯州大学的天才少年Marc Andreessen开发了第一个浏览器Mosaic,1994年上半年他和Jim Clark成立了Mosaic Communications(Netscape的前身),从此互联网终于得到了爆炸性的普及,也成就了昙花一现的Netscape帝国(曾经达到94%的市场占有率),随后微软加入,点燃了浏览器大战的战火……
Tim后来加入麻省理工大学LSC(计算机科学实验室)以及之后成立的W 3C ,成为了这个世界秩序的维护者。在那场浏览器争夺战中,微软笑到了最后,也顺理成章的成为这个时代的领导者。
伴随着浏览器大战,世人从真正意义上享受到了科技进步给人类带来的福祉。一夜之间,B/S结构成为应用开发的主流架构,浏览器成为客户端的唯一工具,这种不需要部署的软件应用确实给了很多人无限的期待。ISV、解决方案提供商及其企业用户纷纷不约而同地提出采用B/S架构作为企业信息应用的架构,因为那样可以免除之前C/S时代高昂的部署和升级费用,使其能够快速适应不断变动的企业业务。
渐渐的,他们发现自己不断复杂化的业务通过简单的页面浏览已经无法满足要求,这个时候相关的客户端脚本技术开始走上舞台。说起来有点戏剧性,Netscape设计脚本的初衷本是为了让网页有更好的浏览性和趣味性,让更多人去享受网上冲浪的乐趣,他们一定没有想到这个概念却被后起之秀发挥到极致,脚本越来越“无所不能”,等到硝烟散去,一切已经面目全非,其臃肿不堪的结构再次成为开发人员的噩梦。
为了沿袭C/S结构下的界面使用体验,开发人员不得不利用大量的JavaScript和DHTML去实现或者说去“模拟”传统应用程序的使用界面,比如菜单、工具条,还有那复杂的图形和表格。也正因此,Web开发成为当今最火爆的应用领域竞技场,无数的开发人员和各种各样的技术在其中竞相角逐,相关的服务器开发技术如ASP,PHP,JSP还有后来的王者ASP.NET,客户端技术则包括了HTML,CSS,JavaScript,DHTML等技术。更有甚者,利用客户端技术开发了一整套完整的类库,这点最著名的莫过于Bindows[1]。
然而B/S不是万能的,在解决了部署和更新的问题之后,B/S同样引入了一些令人头痛的问题:
1) 始终没有一个非常标准的技术规范来约定,由此造成了各个浏览器在w 3c 之外做的扩展,在应用开发中,更多的是需要依赖于这些扩展去实现更加绚丽的图形表现和灵活的交互。比如IE里面提出了HTC的概念,也增加了许多相关的滤镜(Filter),Mozilla也提出了XUL用来扩展用户界面。但是如果需要设计一个具有强大功能的用户系统,更多情况下我们不得不依赖于专有浏览器的扩展去实现。
2) 作为浏览器大战的胜利者,IE从2001年之后就没有推出过重要版本的更新,这也就意味着我们所有的开发技术都是2001年之前的理念,这与服务器端技术的快速发展相比已经略显脱节。
3) 基于浏览器的应用,因为安全等方面的原因始终不足以成为应用的集成者,更多时候是被动的去接受单一服务器提供的应用。比如对于客户端希望能够跨越不同网络调用相关的Web Services,因为安全模型的畸形(不是非常完善的资源访问控制),我们无法做到在同一浏览器内流畅的实现跨应用集成[2]。
4) 基于浏览器的技术严格意义上说是依赖于在线访问而构建的应用,在需要一些离线(Offline)的应用中,就显得有心无力,毕竟从浏览器设计的一开始就是希望能够在一个最小权限的“沙盒”模型下去运行,因此对于本地资源的访问在默认情况下是拒绝的。而部分浏览器允许通过设置来跨越这个安全模型,却没有提供一个相应非常良好的权限分层机制,安全闸门一打开,一切便暴露在洪水猛兽之前。
5) 目前做Web开发都是采用脚本的,但是各个浏览器对于脚本的支持程度却不尽相同,比如IE浏览器同时提供了VBScript和Jscript(微软自己对于JavaScript的扩展),Mozilla也提供了自己的JavaScript实现,但是对于ECMA Script Edition 2的支持程度却不完全一致。在商业应用系统中,大多会采用面向对象的语言去实现应用,而JavaScript这样基于对象(Object-Based)实现OO的语言显然不适合大规模软件开发,功能愈强大,Web开发的复杂性就越高。虽然ECMA Script Edition 3提出了完整的对象支持,但是除了Jscript.NET提供了完整的支持以外,在浏览器方面,并没有得到真正的普遍支持。
面对当前的问题,软件学术界提出了一些新的架构作为解决方案。具有更加丰富表现力的客户端已经成为一种期待,但这种期待决不是对于重复过去噩梦的期待,而是在应用技术架构经历了大型机——C/S——B/S发展历程之后的一种深刻反思,摈弃了各个阶段不同软件架构的缺点,留存的,将是最绚烂的美丽,智能客户端正是如此。
从今天开始,我们需要什么?
那么,我们需要什么?Tim通过互联网已经深刻地改变了的这个世界,下一步将要走向何方?这个时候关于RIA(Rich Internet Application)的论调已经形成,并且在2004年逐渐得到开发人员和系统架构师的认同。严格意义上来说,我们并不关心哪个名字缩写会是下一代的主流,我们更多的是着眼于需要解决的技术问题:
1) 需要一个更加强大的客户端运行环境,同时提供统一简便的开发模型。从某种意义上说,目前的浏览器正是HTML和脚本这种混合“程序”的运行环境,所有的代码(HTML,CSS,JavaScript等等)都是在浏览器这个受控的环境下运行的。但是目前的运行环境所能提供的还远远不够,同时没有一个统一的编程模型。
2) 尽最大可能地利用客户端资源,并且资源的访问是在一个可以控制的环境下完成的。 HTML和CSS等历经演变,已经不是最开始的一个Hyperlink(超链接)那么简单,但是相对于Windows运行环境,在浏览器上能够完成的图形表现还远远不够。
3) 不论是PC还是移动设备,离开网络的应用简直是无法想象的,未来的主流技术必须能更加“智能”地集成Internet应用。
4) 能够自动完成安装和升级,对于越来越多的终端,部署和更新已经成为日渐凸显的问题,这个时候需要有一个很好的机制去免除频繁更新带来的痛苦。
5) 拥有一个完整的安全模型和CAS(代码访问安全)。传统的应用只是关心运行程序是谁在运行,而不关心来自何处,因此需要一个更加完善的安全控制策略去保证客户端应用程序的安全。
6) 具备离线应用的能力,因为访问终端的多样化,对于“有时离线”的支持已经成为一个关键点。例如在基于智能手机的应用中,要求实时在线对于客户端来说有点勉为其难,这个时候在Mobile的应用中采用传统的B/S结构已经不太现实。
从目前的应用来看,有很多种技术为上述期望的模型提供了不同程序的支持,其中除了微软公司的智能客户端技术之外,比较有代表性的技术还有MacroMedia的Flex及Mozilla的XUL:
1. MacroMedia Flex
作为互联网多媒体应用的领导者,凭借其在全球99%的浏览器上都安装的Flash播放器插件,MacroMedia提出了Rich Client应用标准,旨在解决目前基于浏览器应用交互方面的不足,并在下一代RIA应用的标准问题上夺取话语权。
之前的Flash版本只是单一的动画制作工具,但Flash MX 2004从定位上已经跃升为Flex体系中客户端应用的开发平台,为应用开发提供了全方位的支持。不过Flex着重于客户端表现,虽然在图形表现方面拥有技术和理念方面的领先优势,但是在离线应用访问和数据更新上的支持远远不够,而服务器方面太过依赖自成体系却称不上实施标准的CodeFusion更是其蹩脚之处。另外高昂的授权许可和谈不上流畅的编程开发环境也限制了它被广泛的接纳。它提出的界面描述语言MXML和应用开发语言ActionScript在模型上相对于传统的HTML应用或者Windows应用,不是一个相当容易理解的模型。虽然我也深信在未来几年内基于Flash的应用会越来越多,但是它能否成为大一统的客户端运行平台,还有待实践去检验。我想最大的问题还是在于MacroMedia和Microsoft的差距。和后者相比,MacroMedia的构想太过阳春白雪,未能为开发人员提供足够的支持。
2. Mozilla XUL
Open Source社区的影响力和创造力从来就让人不敢也无法视而不见,XUL正是这样的一个概念。XUL的核心思想是“用XML来表达界面”,这是Mozilla的创新, Mozilla 浏览器本身就是一个经典的XUL应用。作为Netscape的继承者,Mozilla历来广受技术追随者吹捧,而最近的FireFox则有点出乎意料的得到更大范围的认可。
XUL给人的第一感觉是客户端运行环境支持下的一个框架,相对于HTML,XUL提供了更多的支持操作,这点和IE5就已提出的行为(Behavior)有点接近。但是XUL提供了比HTC更加灵活的模型,并且因为Mozilla本身就是设计成可以运行在不同的操作系统,因此从这个角度来说通用性更好一些。
正如上面提到的,Mozilla只是技术追随者的图腾,它在文化上的意义更加注重于商业本身,要真正成为主流的应用,首先必须跨越对手IE的障碍。但是从目前的形势来看,“撼江山易,撼微软难,撼IE几乎没有可能”,毕竟一种自由的信仰和一个商业应用之间还是有很大差距的。
而微软的智能客户端则占据了一切可能的优势。从某种意义上来讲,微软提出的智能客户端和上述提到的需求最为接近,也提供了最为完善的对运行环境的支持。
开启Smart Client之门
那么许多人会反问,什么是智能客户端,它又如何能够代表下一代应用的趋势,如何赢得未来呢?
简单的理解,智能客户端是一个连接Internet的设备,允许用户本地应用程序通过Web服务和服务器应用程序交互,从而结合了胖客户端应用程序的丰富特性和瘦客户端应用程序的易于部署和可管理性。打个比方,一个运行文字处理程序(比如Office Word)的智能客户端可以通过网络和远程数据库交互,从数据库获取文档处理需要使用的数据;一个运行Windows Mobile的智能手机可以从网络上获取相关图书的信息,可以获取天气预报。获得这些功能,它们不需要其他设备,只需要拥有网络连接和后台的Web服务。
智能客户端必须具有下列部分或者全部特征:
灵活充分使用客户端资源:这里包含客户端的硬件资源和软件资源,可能是利用客户端的CPU计算能力,也可能是利用其存储能力,还可能是利用客户端的资源提供更加友善的用户体验。
智能集成网络资源服务:通常而言,智能客户端是整个应用系统的一个部分,大部分的商务逻辑还是在服务器端实现,那么智能客户端就必须尽可能利用通过网络可以获取的资源和服务,不限于提供分别的应用程序,而是整合在分布式商业应用环境中的一个组成部分。
强大的离线能力:并不是所有的应用都能够保证随时在线(always online),需要保证在明确脱机,使用低带宽或高延迟网络,或者连接时断时续的情况下继续高效地工作。
易于部署和安装:通过一个集中的服务器,智能客户端通过网络可以非常容易地实现部署和更新。这是和传统胖客户端程序最大的不同之处,智能客户端应用程序可以在其运行时或位于后台时对自身进行自动更新,避免陷入版本的噩梦。
终端设备的多样化:智能客户端应用程序能够运行在许多具有网络连接能力的设备之上,包括台式机、工作站、笔记本、PDA、智能手机等等,支持多种语言,并能够通过分布在不同平台上的Web Services实现跨平台应用。
图1. 智能客户端的优势
上图1. 完整的反映了智能客户端应用程序的优点,在融合了胖客户端和客户端的优势之外,还引入了智能网络连接和数据管理的功能。正如上述提到的,由于智能客户端应用程序涵盖各个领域,这些程序在设计和实现上的差异比较大,这里既与应用的要求有关,也和运行的设备有关。从最终运行平台来划分,大致可以分为如下三类:
Windows智能客户端程序:通过.NET Framework 1.1,Windows智能客户端应用程序极大的发展了原先的胖客户端应用程序架构,并且在原来的基础之上,提供了完整的智能客户端特性,Microsoft Money和Microsoft Outlook就是这种应用的典型案例。
Office智能客户端应用程序:从Office 2003开始,已经不仅仅是一个文档数据的静态,通过内置的XML支持和Web Services的访问能力,在企业应用领域,Office System成为信息工作者最有效的工作平台,同时也成为智能客户端应用程序的运行平台。用户可以在不离开Office的情况下访问企业数据,可以根据文档提供的标记扩展操作企业业务。
移动智能客户端应用程序:自从微软将Pocket PC和SmartPhone整合在统一的平台“Windows Mobile”下之后,基于Windows Mobile的应用也越来越多,与此同时Visual Studio.NET对于移动开发也提供了强有力的支持,通过.NET Compact Framework和越来越多的模拟器,基于移动的智能客户端应用程序开发已不再是难题了。
智能客户端将带来什么?
在开发代号为“Longhorn”的新一代操作系统没有到来之前,相信智能客户端必将是从现在开始未来几年中基于客户端应用的主流软件技术架构,因为大部分的客户端应用都是承载在Windows操作系统之上,而在智能设备领域,微软经过几年的努力也渐现佳绩,得到越来越多的厂商支持,基于Windows Mobile的相关应用也越来越广泛。在Avalon问世之前,智能客户端将是客户端开发的代名词,与之竞争的技术还有Java的WebStart。但是平心而论,那么多年以来,Java在企业级应用领域确实取得了自己的位置,而在桌面应用领域,从来没有占据过任何优势,从最初的Applet,还有随之提出的AWT和Swing,除非有明确跨平台的需求,不然基于Java开发桌面应用程序未免有鸡肋之嫌。随着Visual Studio 2005的即将发布,它所提供的ClickOne技术会将智能客户端推向一个更加成熟的阶段。
如果说智能客户端可以带来什么,我想莫过于强大的客户端体验和动态适应不断变化的商业需求,这与IBM倡导的“On Demand”战略颇有异曲同工之感,但智能客户端其实早已走在了前面。
如何利用智能客户端技术
如何利用智能客户端技术,它对于开发人员又提供了怎样的支持呢?答案是“Anything in .NET”,是的,通过.NET Framework,通过Visual Studio.NET,微软在智能客户端的设计、开发、测试和部署等各个阶段都提供了全面的支持,主要有以下这些相关的技术:
Application Block(应用程序块)
为了帮助更多的开发人员利用.NET技术快速构建功能强大的应用系统,微软的Practice & Pattern 小组编写了大量的应用程序块(Application Block)以帮助开发人员从繁琐重复的编程中解脱出来,从而更加专注于业务的实现。这些应用程序块包括授权、缓存、配置管理、数据访问、异常管理、自动更新、日志、智能客户端离线支持及其用户界面等方面,几乎涵盖了商业应用领域需要考虑的所有底层功能支持[3]。其中的离线支持管理和自动更新为开发人员在开发智能客户端应用程序的过程中提供了有效的帮助,可以利用这些应用程序块,快速开发出智能客户端应用程序。
离线应用程序块(OAB,Offline Application Block)可以应用于如下场合,为应用程序提供支持脱机工作的功能。它们包括:
l 检测网络连接是否存在,这样可以使应用程序能够根据其联机或脱机状态来执行
l 缓存必要的数据,这样即使在网络连接不可用时,应用程序也可以继续运行
l 当网络连接可用时,将客户端应用程序的状态和/或数据与服务器同步化
OAB还可以利用其他的块组件。例如,它可以使用Caching Application Block来利用缓存,并将Caching Application Block作为其参考数据缓存的基础。它采用了面向服务的方法去设计各个子系统之间互为松耦合的组件,图2.完整反映了OAB的构成:
图2. OAB的构成
而更新应用程序块(UAB,Updater Application Block)为客户应用程序的自动更新和安装提供了一个可伸缩的基础架构,开发人员可以利用其构建一个需要智能更新的应用程序。在一些大型机构的应用中,通常需要保证所有桌面应用程序都是最新版本,系统管理员或者工程师只需做一次部署和安装,在此后的运行过程中可自动及时更新应用程序。如果没有这一组件的帮助,开发人员将重新回归胖客户端时代部署困难的灾难之中,而UAB可以很好的解决这一问题。
所有的应用程序块都是以源代码的形式提供的,同时提供了大量的文档和示例,开发人员可以非常方便地将代码集成到自己的应用程序中去,从而构建出功能强大的智能客户端应用程序。
智能文档和信息检索服务
作为Office 2003的创新,智能文档(Smart Document)和信息检索服务(Research Services)在真正意义上为Office提供了内在的交互可能性,利用这些技术,我们可以轻松地构建出基于文档的应用系统。
利用智能文档,我们可以在普通文档中嵌入一些高度交互的应用。举一个简单的例子,一个职员在填写一个请假申请单的时候,如果文档是基于SharePoint协同工作的,除了可以将文档存储到工作区等待上级领导批准,通过文档中的智能标记,我们还可以在提交文档的同时,给上级领导发出请求批准的通知,如果上级领导不在办公室,甚至可以自动发送短信息提醒他需要批准。这个时候,请假单就不单是一个数据文档,同时还包含了一些业务操作流程。再举一个例子,日常使用的报表需要引用许多相关的数据,按照传统的做法,我们需要系统开发人员预先定义这些报表(虽然很多报表工具提供了设计方面的支持,但是对于最终用户而言,依旧有点过于专业),而如果利用智能文档技术,我们可以在特定的位置插入智能标记,用户通过这个标记可以实现从远程数据源获取数据的操作,用来填充我们报告中需要的数据,而数据源既可以是远程数据库,也可以是Web Services。总而言之,智能文档在原有文档的基础上提供了更加强大的交互功能。
而同时构建在Office System中的还有另外一个强大的功能——信息检索服务。
信息检索服务可以让Office 2003中的所有工具使用网络上提供的信息检索功能(一种定制的Web服务),因此从根本上说信息检索服务就是一种Web Service。这种网络服务同普通的Web服务最大的区别就在于它传递经过特殊封装的SOAP信息,这种格式的信息能够被Office 2003内置的分析引擎正常识别和显示,因此具备了丰富的表现界面和交互能力。
虽然智能文档和信息检索服务提供了强大的客户端交互功能,但是其产生的标记是相对不容易理解的XML标记,微软的MSDN开发站点提供了一些工具和SDK用来帮助开发人员加速应用开发,并提供了必要的指导使XML更易被人理解[4]。
智能客户端的安全支持
作为一种客户端表现技术,智能客户端是分布式应用程序,通常跨越多种不同的产品和技术。那么如何去保证这些应用程序的安全呢?在服务器端,需要采用一套方法来保护网络、服务器本身及其应用程序;在客户端,应集中于利用平台(其中包括操作系统和 Microsoft .NET Framework)的安全特性、客户端代码可以执行的特权操作(代码访问安全)以及与服务器平台(域)和服务器应用程序的交互。
智能客户端技术通过如下一系列的安全措施去保证从服务器到客户端应用程序的安全:
l 身份验证。确定客户端应用程序用户,保证认可的用户可以访问应用程序。
l 授权。定义用户可以进行的操作,以保证非授权用户不会执行一些非法操作。
l 数据验证。确保数据的有效性,防止攻击者通过恶意输入威胁应用程序的安全。
l 保护敏感数据。对于敏感业务数据,通过可靠的数据加密来保证数据存储和传输过程的安全,维护其完整性。
l 审核和日志记录。保存对事件和用户操作的记录,首要考虑将关键的用户操作或活动记录在服务器上,或者安全地记录在客户端上。
l 异常管理。应用程序适当地处理异常和失败,并且返回用户友好的非敏感信息。对于一个成功的应用系统是至关重要的。而这些异常,同样需要能够被记录到日志。
l 更改和配置管理。
通过上述提到的应用程序块,在.NET Framework强大的安全性和可扩展性的基础之上,智能客户端提供了全面可靠的安全支持。智能客户端技术构建在微软“可信任计算”的基础之上,从设计、开发、测试、部署的各个过程都提供了安全参考,利用.NET Framework全新的安全模型,可以开发出安全的应用,利用Office的IRM(Information Rights Management),用户可以严格的控制文档的阅读、转发、复制等过程[5]。
案例研究
智能客户端绝不可能仅仅停留在概念上,不像Mozilla的XUL只是一个远离商业的美好的技术梦幻——智能客户端显然更贴近实际,一系列成功的商业案例正在证明智能客户端已经在商业应用中持续地创造出新的成就。
传统企业的财务报告多是以文件为基础的,而股票投资者与分析师必须同时熟读多家企业的报告,并将关心的数据或信息输入到计算机里,以便于后续分析与评估。这种大量的手工、多步骤的流程很是耗费时间,纳斯达克(NASDAQ)收到大量的抱怨而决定构建一套系统,让投资者与分析师可以简易提取、分析甚至比较所关注的股票数据[6]。
图3. 纳斯达克的投资助理系统界面
美国微软、纳斯达克与PricewaterhouseCoopers通过Web services技术与Office System构建了一套以可扩展商业报表语言(Extensible Business Reporting Language,XBRL)为基础,且可通过Excel展现股票数据的投资助理系统。纳斯达克将上市公司的财务信息,包括平衡表、收入、现金流量、资产…等信息转换成XBRL格式而存入集中的数据库系统,并通过Web services对外提供网页、Excel、打印系统等服务(见图3.)。
通过Excel操作的投资助理系统,可以充分运用展示与分析能力,以往需要数小时的分析时间,现在,分析师只要数分钟即可取得所需报告。并且由于上市公司的财务信息已经由Web services以XBRL格式下载,因此投资者或分析师还能离线操作该系统,同时进行交叉分析。
这个系统利用了Office的智能文档技术和内置的Web Services访问能力,用户可以在不脱离Office应用的同时进行远程数据的访问,同时这些数据可以随时更新,在离线的情况下,用户仍然可以进行自己的报表分析。
同时在MSDN站点上,微软提供了一个智能客户端应用程序的参考实现——TaskVision,它是使用.NET Framework的Windows窗体类生成的。TaskVision 允许经过身份验证的用户查看、修改和添加与其他用户共享的项目和任务。它可以在多种方案中使用,从错误跟踪到管理工作程序或者客户服务请求,都可以使用。它的主要用途是为有兴趣使用.NET Framework生成智能客户端应用程序和XML Web服务的开发人员提供高质量的示例源代码。
TaskVision的这个演示介绍了智能客户端应用程序的许多技术,比如应用程序脱机和联机模型、无接触式部署、授权访问、数据冲突、打印、动态属性、本地化支持、异步Web服务调用、数据库访问、GDI+等各个方面的技术[7]。
在国内,作为高等教育的典型代表,复旦大学管理学院的MBA管理与教育服务信息系统从很大程度上体现了高等教育体制、服务管理和信息技术的完美结合。作为MBA项目的核心业务系统,它将支撑管理学院MBA管理与服务的日常运营,从系统上保证复旦MBA项目的长期竞争优势;将支持MBA项目从新闻发布、招生宣传、学生教学与教务管理、学位管理、日常信息服务、就业信息服务、到学生毕业信息服务的各项工作;支持学院各项目的年度教学计划、统计分析工作等一系列基础业务。通过调研,他们选择了智能客户端技术,因为它可以解决目前管理学院MBA管理与教育服务存在的种种问题,一方面Smart Client可以拥有C/S的强大的表现能力,同时在部署简洁上也不输于B/S。还有一个优点就是可以将整个系统以模块的形式分割,每一个单独的模块都有一个独立的软件模块,利用Web服务通讯,使整个系统松耦合,以后每个模块都可以剥开独立使用,这样也增加了复用的机会。智能客户端技术提供了胖客户端技术和瘦客户端技术所没有的优势,包括如下几点:
图4. 系统示意图
无接触部署:安装时只要将一个主程序文件下载到本地,直接运行即可,无须改变注册表或共享的系统组件,其他应用组件将在第一次运行时自动下载。
自动更新:只需将新版本的程序发布在服务器上,由客户端自动发现最新版本的程序和应用组件,并自动下载和更新。
离线运用:允许脱离服务器时,利用本地的客户端程序和应用组件进行工作。
动态加载应用组件:应用软件开发商可根据企业应用系统的公共接口进行开发,然后将应用组件发布在企业的服务器上,客户端应用程序将自动发现并加载该应用组件。
个性化用户界面:用户可根据喜好自行设置客户端应用程序,配置信息将被保存到服务器上。
上述提到的智能客户端技术通过上面图4.所示的AppLoader,Smart Client Pool和Loaded Smart Client Assemblies三个方面提供了全方位的支持,目前的系统已经正式投入使用,同时因为架构的高度可扩展性也为二期开发带来了极大的便利。
LeySer System是一系列具有悠久历史的学校系列管理系统软件,具体产品有学校会计、学校给与、人事管理、学费管理、资产管理系统、PhotoBoard。目前LeySer软件在同类软件的日本市场占有率排名第一,达到了70%之多,其版本也在不断更新,为了满足新的用户需求和适应新技术的发展,Ver.8.0版本(.Net版)更是以大幅度地重新制作和全新设计实现了前所未有的多功能和高性能。在Windows环境、Internet环境下以更简便的操作性成为面向学校法人的最强的会计系统。
LeySer System的客户端是一个Smart Client。它们可以为用户提供内容丰富且响应迅速的用户界面,提供脱机工作的能力,并且提供利用本地硬件和软件资源的方法。智能客户端为用户提供了在强大且直观的客户端环境中访问信息和远程服务的能力,并且是一种用来开发灵活的、面向用户的应用程序以及提高用户工作效率和满意度的有效的解决方案。通过智能客户端技术,LeySer比其他同类系统提供了更多的特性支持,包括如下:
1) 自动更新:在最终用户登录系统后,在服务器上取得系统运行所需要的全部文件列表,包括文件名以及文件版本。然后进行对比,如果发现一些文件已经更新,这个时候会自动下载相对应的组件,从而始终保持应用程序是最新状态。
2) 离线使用:在本地系统使用了Access缓存数据,这样保证了即使在离线状态,用户依旧能够进行“业务操作”,等到网络连接上的时候,系统能够将这些业务操作更新到服务器系统。
3) 数据缓存:利用本地强大的存储能力,LeySer系统可以将服务器数据缓存在本地,并且定期检查服务器最新数据,避免了每次都需要访问服务器,从而极大的提高了客户端响应能力。
除了上述提到的一些案例,在一些高端行业例如金融证券业中也采纳了智能客户端的解决方案,并且在实际应用中取得了很大的成功。一家国内的大型商业银行的金融服务开发和管理平台采用了Windows窗体技术实现的智能客户端,提高了业务流程设计界面的可用性;更广为人知的是中国工商银行通过将自助终端系统构建在WinForm之上,内嵌IE控件,不仅提供了强大的浏览能力,同时提供了丰富的客户端体验;银河证券在其风险监控系统的开发中,也引入了智能客户端技术,以实现程序的自动升级,免除了繁琐的维护工作,融合了“瘦”客户端易维护和“胖”客户端功能丰富两方面的优势。此外,智能客户端技术还在天气预报、图书共享、医院管理信息系统、计划生育管理系统等等方面得到了大量的应用,不仅有政府部门如国家计生委,还有广州万锐公司和无线视通这样的ISV,甚至在个人应用中也出现了采用智能客户端技术的情况。就此看来,智能客户端已经在各个领域得到比较成熟的应用,进入了一个百花齐放的时代。
B/S架构的江郎才尽、终端设备的多样化、应用需求的不断扩展,这些因素结合起来宣告了一个时代更替的到来。如同在一场烧荒的野火之后恢复旺盛生机的热带草原,软件世界也正在构造其新一代的“生态系统”,从中催生出更加富有生命力的技术架构,而智能客户端正是这一时代的产物。
那些花费最近五年时间学习基于浏览器部署的开发人员可能不希望进行改变。他们已习惯了作为他们那个时代的领先的开发人员。但是所有的技术都会经历鼎盛期、衰落期,最后被更新的技术所替代。尽管我们会继续看到基于浏览器的应用程序仍会在某些情况下被开发和沿用许多年,但是我相信基于浏览器的开发现在已经过了其鼎盛期。从鼎盛到衰落可能需要时间,但是方向是明确的。做好准备,迎接智能客户端的到来吧!
[1] 可以从http://www.bindows.net下载。
[2] 打一个简单的比方,远程站点A提供了天气预报的服务,站点B提供了日程管理服务,站点C提供了一些旅行相关的Web服务,这个时候如果需要集成这三个站点的服务,需要在服务器端去集成这些服务,然后通过预定的方式提供给客户端,在定制方面更多的采用了Portalet(Java术语)或者Web Parts(Microsoft SharePoint提供的技术),却无法做到客户自己进行应用的集成。
[3] 可以从http://www.microsoft.com/resources/practices/code.mspx下载应用程序块的详细列表和代码下载。
[4] 从http://msdn.microsoft.com/office/understanding/smarttags/tools/default.aspx 可以得到智能文档和智能标记的相关资料,而对于信息检索服务的相关XML标记,微软官方也提供了对于检索服务标记的封装;
从http://msdn.microsoft.com/office/understanding/research/tools/default.aspx可以得到“Research Service Development Extras”的源代码和文章,通过这些工具能够加速基于Office System智能客户端的应用开发。