微软 ASP.NET 2.0 的 AJAX 利剑~ Atlas Framework

前言

自从 2002 VS.NET 2002 版的发表,微软的网页技术正式由 ASP 迈向新的 ASP.NET 里程碑,划时代的 ASP.NET 在短短几年时光跃居成为热门主流,顺利攻占信息媒体与网页程序开发人员的目光焦点,深获大家的喜爱与赞赏,同时也造就全球一股 .NET 热潮,于此时您看见本篇文章时,下一代的 VS 2005 ASP.NET 2.0 已经正式发表(美国 11/7 日),由于前一代 ASP.NET 1.0 技术的成功,很自然的大家早就引领期盼 ASP.NET 2.0 丰富控件与底层功能完整性能够早日到来,但如果您只知道 ASP.NET 2.0VS 2005 产品或技术,目前您已置身于 ASP.NET 技术危机,因为在您背后正有一把巨大的利剑飞来,一个不小心就穿刺您坚强的技术盔甲,有这么夸张吗?一点也不夸张!因为一个火候尚浅的 ASP.NET 初学者只要巧妙熟练运用这把利剑,在某些 ASP.NET 网页设计环结就能击败功力深厚的网页程序设计师,而经验老道的网页程序设计师还不知自己败在何处,那这把从虚空飞来的利剑叫什么名字呢?它叫「Atlas」,是一个 AJAX Framework,掌握了这把利剑如同掌握了电影「卧虎藏龙」中的青冥宝剑,能够在剎那之间击败最强的敌手(隐喻网页设计的难题),以下将为您解释什么是 AJAX,什么又是 Atlas Framework

AJAX 异步 技术

AJAX 是由「Asynchronous JavaScript and XML」这几个英文字的开头所组成,是一种异步的技术,表面上看来是「异步」、「JavaScript 」、「XML」这三种东西,好像没什么了不起!?大家多多少少都有玩过,写网页的人多少都懂 JavaScript,有的人熟到不能再熟了,XML 也有摸过,至于同不同步好像不重要,几个月前我第一次看到 AJAX 这字眼时直觉就是如此,想说~又要新瓶装旧酒或冷饭热炒了吗?所以瞄过一眼国外文章后就匆匆带过,但接连三天 "AJAX" 这个字眼在美国微软的 MSDN Blog 中一堆专家接二连三提出,我才感觉苗头好像不对,竟然有我不知道的技术存在(如果 AJAX 很重要很 Power 的话),故深入 Study 一下 AJAX 原理与技术,OHMy GOD!还真的蛮 Power 的。

大家都知道 JavaScript Client 端古老的王者,而 .NET 是新一代 Server 端的究极霸主,在大多数时候两者之间几乎是不相干,因为各做各的,AJAX Power 的地方似乎不在于「Asynchronous JavaScript and XML」表面上技术,而重点在于 AJAX 能够巧妙将 Client 端与 Server 端技术串起来融合在一起,Client 端一旦能够援引 Server 端的应用程序,您将会发觉所设计的网页力量将源源不绝,而这用传统的 ASP ASP.NET 来说似乎 "不可能" ,因为 Web 是无状态,故 Browser Web Server 之间是不会有任何联机,只会有所谓的 Request Response 的行为,且两者的内存管理空间和模式根本是两个世界,故 JavaScript 要和 .NET Code 无碍地融合也不太可能,但透过 AJAX 异步模式的力量,可使得 JavaScript 能够自由自在呼叫 C#VB.NET Web Service 强大的力量,然后还能回传 .NET 型别对象如 DataSet JavaScript 来处理;除此之外 AJAX 异步技术只需传递少量数据回 Server 处理,不像现在必须用 Postback 大笨牛的方式将整个页面回传 Server 端处理,从此可以和 Postback 大笨牛 Say bye bye,动作灵巧得不可思议!(但意思不是要丢弃 Postback,而是视需要使用 AJAX 可以更灵活)。

OK!言归正传,那要如何使用 AJAX 呢?首先我要澄清一点 AJAX 只是一种 "概念" ,意思是透过「Asynchronous JavaScript and XML」这三类的技术做出来的东西都可称做 AJAX,而非指特定某个组件或产品,就我目前所知要实作 AJAX 有几种方式:

·     完全手工自己打造 AJAX:缺点是对大多数人而言太困难也太耗时,同时对 AJAX 知识也非常欠缺。

·     使用 Callback 方式:缺点是只支持 ASP.NET 2.0,且功能仍不够完整。

·     使用现成的 AJAX Library:但 Library 毕竟只是 Library,和 Framework 比起来稍微逊色了点,但优点是可免费取得,同时适用 ASP.NET 1.0 2.0,不失为一个好途径。

·     微软 Atlas Framework:优点是定位在 Framework 层级,初步的规划与设计 Scope 较为完整,同时兼顾与考虑 Client 端与 Server 端,遗憾是只支持 ASP.NET 2.0

AJAX 简单范例

为了让各为能够了解什么是 AJAX,以下是一个 AJAX 的手工范例(意即不引用任何的 Library AJAX framework),此范例颇为精要易懂,其作用主要是透过 Client 端的 Browser 来实时监控 Web 服务器资源或效能变化,各位只要做过一遍范例就能够了解 AJAX 在网页开发上是多么具有威力了。

Step 1:建立 Web 项目

首先在 VS.NET 2003(或 VS 2005)建立一个 WEB 项目,项目名称为「SimpleAJAX」,或者您没有 VS 开发工具,直接用笔记本建立也行。

Step 2:建立 Client 端页面

请在 Web 项目中加入一个 Client 端页面「Client.htm」,并将此页面设定为起始页,这个页面会向 Web 服务器网页发出异步呼叫请求,并且将服务器回传数据更新到网页元素中,程序代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>

   <head>

           <script language="javascript">

           var XmlHttp=new ActiveXObject("Microsoft.XMLhttp");

           function sendAJAX()

           {

                  XmlHttp.Open("POST","Receive.aspx",true);

                  XmlHttp.send(null);

                  XmlHttp.onreadystatechange=ServerProcess;

           }

           function ServerProcess()

           {

                  if (XmlHttp.readystate==4 || XmlHttp.readystate=='complete')

                  {

                          document.getElementById('nameList').innerHTML =XmlHttp.responsetext;

                  }

           }

           setInterval('sendAJAX()',1000);

           </script>

   </head>

   <body>

           <div id="nameList"></div>

   </body>

</html>

1 Client.htm 页面

Step 3:建立 Server 端处理程序

另外在项目中加入一个 Receive.aspx 网页(含.cs),程序代码如下:

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using System.Diagnostics;

 

namespace SimpleAJAX

{

   ///

   /// Receive 的摘要描述。

   ///

   public class Receive : System.Web.UI.Page

   {

           private void Page_Load(object sender, System.EventArgs e)

           {

                  PerformanceCounter myMemory=new PerformanceCounter();

                  myMemory.CategoryName="Memory";

                  myMemory.CounterName="Available KBytes";

                  string txtResult="-->服务器可用内存大小:"+

myMemory.NextValue().ToString()+"KB";

                  Response.Write(DateTime.Now.ToLongTimeString()+txtResult);

           }

   }

}

2 Receive.aspx 页面

执行结果:

执行后约花 5 秒启始 PerformanceCounter 对象,之后透过 AJAX 便可每秒获得 Server 可用内存变化情形,当然也许有的人会想到用 Server side Timer,但那种方式会造成 Server Loading 爆增,人多的话还可能搞垮你的 Server,但 AJAX 就具有极佳的弹性与灵巧,透过 AJAX 您可以实时侦测到数据库或事件的变化,实时显现在网页上,比如说我有十台 WEB Server(只开 Port 80),以 AJAX 这种方式即可以单一网页上监控到十台 Server CPU 与内存或网络流量等大小,是不是十分具吸引力呢。

3 服务器每秒内存变化情形

程序说明:

这个应用程序有几个特点:

1.      JavaScript 要如何可以 Call 得到 .NET Server 上的方法或 Web Service,若以传统网页程序观念来看似乎是 "不可能" ,因为 Client 端的 JavaScript 没法直接参照到 Server 端的 .NET CLR 的内存地址。

2.      在以往也许有的人想办法实做 Server Timer 来达成相同的效果,但做过的人应感受到以 Server 端方式是多么地笨重与耗费系统资源,若提供多人同时使用可能 Server 负担会更加沉重。

3.      AJAX 程序能够不留痕迹地与呼叫 Server 应用程序或 Web Service,并处理回传数据迅速更新网页数据,让人几乎忘了 Client 端与 Server 端的分隔存在。

4.      后面对 XMLHTTP 的运作会有一个初步的解释。

为了让大家能够正确了解 AJAX Atlas Framework 蓝图与策略,以下介绍微软两篇文章:

1.      了解 AJAX 应用程序与 ASP.NET Atlas Framework

2.      这篇文章开始是介绍传统 ASP.NET 网页程序开发和局限性,进而介绍 AJAX 技术概观及其优点,而微软针对 AJAX 技术提出一个新的 Atlas Framework 来简化 AJAX 复杂的程序开发,最后简单说明 Atlas Framework 架构组成及功能性。

3.      ASP.NET Atlas Framework 概观

4.      本篇文章揭露 Atlas Framework 功能设计及整体概观,解说 Atlas Framework Client 端与 Server 端之功能架构,对于 Atlas 能够同时兼顾与整合 Client 端与 Server 端功能这是一个高明的策略,因为若只是纯粹考虑 Client JavaScript 呼叫或页面处理必定会大大限制了 AJAX 应用程序开发,无法彻底发挥 ASP.NET 2.0 所有 Server 端的优势,且程序开发人员必须持续性与 Client 端前端呼叫或数据处理繁琐工作纠缠,这种做法将会大打折扣,庆幸的是 Atlas Framework 一开始就走上正确的路,透过 Atlas 控件来开发 AJAX 应用程序或功能,几行的程序代码便能完成以前需数周或者根本无从下手的网页功能(如网页的自动完成)。

posted on 2006-09-27 08:56  石川  阅读(245)  评论(0编辑  收藏  举报