首页 | 旧版 |中国计算机报 |中国电子报 |通信产业报 |计算机用户 |电脑教育报 |软件世界 |数字时代
高级检索
特别报道 | 评析 | 封面故事 | 企    业 | 系统平台 | 专家 | 行  业
CIO 之声 | 管理 | 应    用 | 产品主题 | 专    栏 | 报告 | 新安全
第20期 总第253期
浏览往期
当前位置:首页>>赛迪媒体>软件世界>系统平台
.NET阴影下的AJAX
作者:王宏宇 

对SOA的爱好者来说,AJAX架构让他们能够站在面向消息的架构和系统上来看面向服务…….这就是我们所希望看到的。

AJAX的崛起令微软感到有些尴尬,因为AJAX中的一些关键技术其实是微软在1997年发明的,可是该公司后来把它们搁置了。

长期以来,微软公司几乎垄断了整个桌面软件市场,但他们对互联网软件却重视不够,以致在微软自己的ASP.NET沃土上培植出了形形色色AJAX架构结构。

他们中有微软自己的Atlas,Telerik公司的Rad AJAX,Michael Schwarz的AJAX.NET,还有最近国人开发的nbear等等。一时间群雄争斗,难分高下。但笔者认为随着微软对AJAX的逐步重视,凭借其雄厚的财力,人力,以及他在浏览器方面独有的优势,在不久的将来将充分显示出他的霸气。

.NET平台下的AJAX架构Atlas

Atlas是微软的产品。与生俱来的,它与ASP.NET有极好的融合性。它的目标就是整合客户端脚本和ASP.NET服务器端,全面支持AJAX。它是一个完整的解决方案,所以最大的弱点是不能很容易地被已有的AJAX架构的应用使用。他的早期版本,给我的印象就是:控件繁多,使用方便,但不够灵活,多个控件整合在一起会有或多或少的问题。

Atlas架构大大减少了开发者所需的代码量,进而提高了开发效率,因为服务器端控件已经为你生成了大量的代码。这种架构将页面中的内容、样式、行为和代码清晰地分开。客户端直接调用Web服务或WCF服务,这样就避免了使用中介层对通信效率的影响,同时也避免了增加中介层对应用程序设计、实现和部署中带来的复杂性。但也就因为过分地依赖这些并不完全成熟和可扩展的服务器端控件,使得其灵活性大大减弱。

相反,由Michael Schwarz自己开发的AJAX.NET却悄无声息的广为流传着,并且屡屡被人拿来做一两个小东西。原因很简单:AJAX.NET可以更好的发挥我们的能力,而Atlas却只能更好的发挥微软的能力。

当然,上面说的是微软的早期版本。Atlas一直在进步,也越来越让我们喜欢了。今年9月份,Scott发布的Atlas命名和开发计划的文章,又给我们带来了两个好消息:

·Atlas名称大变脸

客户端Atlas JavaScript Library 被命名为Microsoft AJAX Library,它可以在任何浏览器工作并且支持任何Web 服务器。

Atlas服务器端功能被命名为ASP.NET 2.0 AJAX Extensions,同时原来的 Atlas 控件标识 会被更改为 ,这些控件会集成到 ASP.NET 下一个版本。

·Atlas要有大动作了

微软将发布Atlas 1.0 Release。客户端和服务器端的划分更加明确,这样我们将有可能更好的继承扩展他们。而名称的改变意味着微软AJAX与ASP.NET的进一步融合。Atlas的明天值得期待。

AJAX .NET

由Michael Schwarz开发的一个类库,实现从JavaScript到服务器端.NET的存取。他把JavaScript中的客户端调用传递到.NET方法,并返回到JavaScript回调。他用属性标记方法,能缓存结果,具有完整的类支持,使用HtmlControls来进行输入和返回值,返回的数据类型可以是数据表,数据集,数据视图,数组和集合。

AJAX依靠服务器作为中介来分发和处理请求。他的.NET封装类依赖于客户端的请求对象,使用XMLHttpRequest对象,但将其封装,隐藏XMLHttpRequest的实现。其封装类是通过在.NET的方法上增加AJAX属性标记来实现的,一旦被标记,AJAX创建客户端的JavaScript函数(这类似于客户端编写的JavaScript函数),并使用XMLHttpRequest创建服务器代理,这个代理把客户端函数映射到服务器处理函数。

AJAX.NET非常适合个人用户和小规模开发使用,服务器端只需要加上个属性就可以用JavaScript异步调用这个方法了,非常灵活,且容易上手。本人非常喜欢这个架构,他可以很容易地和其他AJAX架构融合起来,一起使用。但由于他毕竟是个人产品,所以没有提供出一套完整的AJAX解决方案。

MagicAJAX.NET

和AJAX.NET等相比,MagicAJAX.NET的方便和易用十分地引人注目。如果是基于ASP.NET 提供的控件和开发,那么MagicAJAX.NET 是非常有效的,他很好的解决了Session和跨页面状态的问题。而且客户端的操作和工作基本可以忽略。

AJAX.NET架构参考了prototype.js这个纯脚本AJAX架构,如果你注册了一个类型到AJAX.NET里,那么在输出到客户端的脚本里就会有AJAX.NET为你生成的JavaScript对象,开发人员就可以像调用服务端对象一样使用他,但如果需要显示什么东西的话,比如填充某个下拉框就得自己动手,操作DHTML。

而MagicAJAX.NET则是另外一种思路:创造了一个AJAXpanel,只要把你要执行服务端事件的控件放到AJAXpanel里,MagicAJAX就在后台将页面要提交的数据提交回去,交给IIS,再传递给注册在配置文件中的AJAXmodule,他会负责返回被其架构解析的脚本语句,来反映出服务器操作造成的变化,客户端eval一下就可以了。而如何得到实现这种变化的脚本语句就成为代码主要完成的工作。

在AJAX.NET架构下,我们需要注册一个公布给客户端的类,然后在客户端脚本里访问,然后再根据从服务端返回的数据自己控制客户端界面的改变,需要的代码量比较大。而在MagicAJAX.NET的架构下,我们甚至不需要写一行代码就实现了无刷新的网页。

MagicAJAX.NET也存在一系列问题。由于和ASP.NET的页面处理机制依赖非常密切,控件的默认动作发生变化则可能不工作,比如第三方的某个自定义控件;过分依赖ViewState,如果是加密的ViewState,则会产生些问题;他仅是对ASP.NET全部页面提交的优化,实现有限的AJAX功能,可扩展性不大。

RadAJAX

这个是telerik的产品,功能强大,在国外影响颇大,不过国内好像重视不够。他自称是第一款不用编码就能把ASP.NET AJAX化的架构。

整个架构主要由4个控件组成:AJAXManager,LoadingPanel,AJAXPanel,AJAXTimer。这其中既借鉴了MagicAJAX.NET的很多东西,也可以看到atlas的影子。他为用户提供了调用web服务以及通过AJAX(异步JavaScript以及XML)请求获取信息的功能;完全支持Response.Redirect();会话超时时自动重定向;完全支持EnableViewStateMac设置为假(false)的Server.Transfer;AJAX请求过程中,实效字段将会被排除在外;图像按钮(ImageButton)单击提供用户单击图像的XY坐标。

其它架构

Anthem.NET的设计遵循这样的理念:既然ASP.NET的各个标准控件没有实现提交功能,那么我可以产生一个提交的接口,然后继承原来的标准控件,然后再实现这个接口,这样每个控件都可以向服务器端单独进行提交,而每个控件的发生过程类似MagicAJAX.NET。

和MagicAJAX.NET不同的是,Anthem.NET没有容器的概念,因为每个控件都增加了提交接口,可以单独的提交,所以Anthem.NET每一次提交的花费更小些(但服务器端是类似的,因为整个ASP.NET页面的Pipeline都会进行)。同AJAX.NET类似,他也可以通过客户端调用页面中的方法并获得结果/数据,并且也支持多种返回对象。

Anthem.NET 的一些不足主要是:他需要重新将ASP.NET提供的控件进行继承和包装,所以使用和功能的兼容性上非常敏感。

wwHoverPanel AJAX Control for ASP.NET是一个ASP.NET的控件,但是提供了客户端回调(高级回调)、客户端调用页面方法,以及双向两路的序列化功能。wwHoverPanel设计简单,而且是基于控件不依赖HTTP Model和ASP.NET Page Pipeline,也不依赖ViewState。 JSON的双向序列化是一个不错的方案,但高性能的场景下,应该考虑实现更高效的序列化架构

AJAXASPects是个可以用JavaScript调用服务端Web服务事件的引擎。他用标准的SOAP和WSDL进行服务端-客户端通信;用简单的类型和XML对象支持带参数的返回值;支持缓存和动作队列。

理想中的AJAX平台展望

ASP.NET下的AJAX平台发展到现在,基本上已经形成了一些共识:ASP.NET控件形式成为连接服务器和客户端AJAX通信的主要形式和选择;客户端调用服务器端页面中的方法是AJAX的重要手段,使得客户端可以更加灵活的获得服务器端的数据;AJAX要求有足够的力量关注前端的UI展现或开发,所以AJAX架构必须提供多样的客户端的实现以及Web UI。

有的人说,目前流行的AJAX-NET的架构或实现都是Add-in (Plug-in)的模式的,也就是说这些架构对于使用传统的ASP.NET的应用架构(或准备用ASP.NET v2.0开始创建新的应用)是非常有利和方便的。而今后,最有可能开发出一套完整AJAX解决方案的很可能是微软。

一个完善的AJAX架构或开发平台,至少应该解决这么几个问题:表现层展现的问题;双向两路的序列化问题;传输时客户端和服务器端的数据安全问题;性能问题;国际化支持;搜索引擎的友好问题。AJAX平台的开发绝对是一个复杂性颇高的系统工程,需要大量人力,财力的投入。

AJAX平台应该是什么样子呢?未来的AJAX平台应有这么几个特点:

自动生成JavaScript基础库。JavaScript对AJAX的份量不言而喻,如果有这样一种魔法,我们能够选择针对的浏览器平台、版本、完备的功能列表等,然后它就能帮我们生成一个已经优化了的JS文件。那是多么令人憧憬啊;智能调试JavaScript。让我们不再畏惧js;智能的CSS优化。让可重用css规则得到最大限度的重用,最好能够让我们鼠标点几下就一切了;全方位的重构支持。不止JavaScript,还包括dhtml,css的重构;界面操作可视化;集成各种UI组件库;当然,完善的单元测试支持也必不可少。

就象有人描述的那样,未来的技术人员,将不用谈论什么Web 2.0,就可以清楚的表达AJAX的概念。

未来的架构师,也不再认为AJAX是什么异步的XMLHTTPRequest,是什么不刷新页面,它只是一种可以帮助他们Review应用程序的架构。

对未来SOA的爱好者来说,AJAX架构让他们能够站在面向消息的架构和系统上来看面向服务……,这就是我们所希望看到的。

.NET架构下的AJAX是这样,所有的AJAX架构都应该是这样。

Atlas整体架构图

链 接

AJAX的“拦路虎”

Macromedia Flash

Flash技术已经存在多年,它可以在web页面中播放交互式的视频和音乐,可以使用ActionScript编程实现与服务器的交互,能够很好的支持向量图,这些都是它相对于Ajax所具有的优势。另外flash拥有强大的组建和可视化制作工具,这是Ajax目前所缺乏的。

但是运行flash必须在浏览器上安装插件,这是限制flash应用发展的原因之一。由于先天的原因,flash对搜索引擎的支持不够好,在处理大量文本的网页时性能表现不如Ajax。

Java Web Start

Java Web Start是基于Java技术的应用程序的一种部署解决方案。传统情况下,通过web发布软件需要用户在web上查找、下载,而后在系统中存放并执行可安装程序。执行安装程序后,将提示指定安装路径和安装选项,例如完全典型或最小安装。这是一项耗时而又复杂的任务,并且在安装软件的每个新版本时都必须重复进行。

相反,通过web部署的应用程序,都非常容易安装和使用。Web浏览器使整个过程自动完成,没有复杂的升级过程。

当然使用Java Web Start相关技术必须要求客户端安装Java运行时环境。

Microsoft Smart Client

Smart Client(智能客户端)是微软基于.NET平台推出的应用程序自动部署,更新的机制,它结合了B/S和C/S应用的长处。智能客户端是部署在IIS服务器上的,用户只需要访问相应的网址就可以运行程序,智能客户端应用本质上是基于.NET的WinForm程序,因此客户端也必须安装.NET框架才能运行。

从技术实现思路的角度来比较,智能客户端技术和Java Web Start技术非常类似,只是支持的平台分别是.NET和Java。他们从本质上都属于C/S架构的应用程序,通过B/S的方式进行应用程序的下载,安装和升级。而Ajax技术则是对传统的B/S应用进行了改进,增强了其交互能力,提高了其响应速度。

IE Host WinForm

在安装了.NET框架的客户端,可以通过IE浏览器直接运行基于.NET的WinForm应用程序。从某种意义上说,IE Host WinForm和Java Applet技术很相似,是通过浏览器加载的小应用程序,需要提前下载响应的程序,它的运行依赖于.NET Framework。而Ajax所采用的技术是标准支持的,不需要下载任何插件和程序。

赛迪网JAVA专区,JAVA开发者乐园!
相关文章
· 告别DDoS 驶入安全之海(2006.11.07)
· 主动防御 在思辨中寻找未来(2006.11.07)
· 主动防御须“有的放矢”(2006.11.07)
· 清扫信息安全的“死角”(2006.11.07)
· 寻找UTM的下一个拐点(2006.11.07)
·特别专辑

通信产业高端访谈第7期:手机游戏期待"传奇"全文
索尼CEO访华 瞄准中国高清数字产品市场全文


· 专题:世纪画卷 中国计算机事业五十周年
· 专题:大中要与永乐解约 打响定金战
· CEC接盘飞利浦手机业务
· 企业游记:微软研发集团印象记
· 雅虎中国换帅 和讯网前CEO谢文接替田健出任总经理
· 2006年中国通信产业10大关键词评选活动
· 06诺基亚技术大会暨诺基亚研究中心20周年
· 专题:2006胡润百富榜揭晓 丁磊等跌出前十
· Google斥资16.5亿美元收购YouTube
· "十·一"黄金周出游 手机省钱全攻略

·赛迪社区