Client端异步Callback(Client-Callback)

 早在ASP.NET2.0 bate 1时就已经包含一个异步技术叫"Callback",它是通过前端Client端向后端服务器传送参数数据,服务器再以接收到的参数进行查询处理,最后将结果回传给前端显示结果.而这样的过程似乎有点不可思意(虽非创举),若您以JavaScript(Client端)或ASP.NET(Server端)的二分法观念来思考是无法理解的,因为JavaScript内存管理空间和.NET CLR内存管理是不同的进程空间,可以说老死不相往来各管各的,彼此无法直接参照亦没有可直接沟通的方式,而Callback却是实践俩种系统,(Client端与Server端)能够沟通的方式之一,因为他是由前端触发,所以他的名称就叫Client-Callback.
     例一 使用Callbacj进行异步数据库查询
     本范例将通过前端Callback传送"FirstName"员工姓名,而后端ASP.NET以此FirstName为参数,以ADO.NET方式向北风数据库查询是否有符合的员工数据,若有符合者则返回该员工基本资料,若无则回传查无此人消息,请参考ClientCallbacks.aspx程序,步骤说明如下.

STEP1 :确认北风数据库中Employees数据表的存在
STEP2 :建立Client端JavaScript及HTML对象
Client端JavaScdript及HTML对象程序如下:

Code


什么时候ASP.NET查询数据库连BUTTON按钮都可以不需要.那将如何触发服务器程序查询员工数据?为了让大家更彻底体验lient-Callback异步的威力于作用,在此可以拿掉了Button控件,改以JavaScript来定时查询,各位才能清楚的认识到什么是Client-Callback
STEP3 :在Server端动态注册JavaScript
     以下是在Server端动态注册JavaScript,其用途是供上一步骤的JavaScript传如参数,再真正进行Callback调用后端ASP.NET程序,程序如下:

 

Code

STEP4 :实现ICallbackEventHandler,并实现IcallbackEventHandler的俩种方法:RaiseCallbackEvent()及GetCallbackResult().程序如下;

Code


 

程序说明(1) 通过这支程序可以认识到异步的力量非同小可,可以跨越Clent端于Server端的限制,让Client端可以援引Server端.NET力量,而一旦Client端能够援引Server的程序,力量会源源不绝
(2) 要使用Callback异步技术首先必须在类中先继承ICallbackEventHandler这个接口,接着再实现这个接口的RaiseCallbackEvent()与GetCallbackResult()俩种方法.
(3) RaiseCallbackEvent()方法负责接收Client端JavaScript所传送进来的参数,以因此参数查询数据库中的数据,最后再通过GetCallbackResult()方法将结果回传给Client端JavaScript,JavaScript再将员工数据更新HTML页面
(4) 请注意,所有AJAX异步技术(Callback或Atlas Framework)不会使用传统的Postback技术,故在浏览器下方也看不到一个进度条,并且异步只传送与接收少量的数据,而非Postback整个ViewState状态,速度沙锅内的优势明显大很多.

最后再简要的说明一下流程   PageLoad之后 开始客户端开始执行SetInterval()函数->DoSearch()->CallServer(此时CallServer已经在PageLoad的时候完成注册)->Callback(执行2个接口指定的方法)->ReceiceServerData----

例二  使用Callback进行异步数据库查询(简化版)
        上面的范例有些复杂,下面去掉一些JavaScript及动态注册,使得程序更容易理解
Client端(ClientCallbackSimple.aspx)
以下是前端的HTML代码


<head runat="server">
    
<title>无标题页</title>

    
<script type="text/JavaScript">
    function OnCallback(txtUserInfo,context)
    {
        document.getElementById(
"Results").innerText = txtUserInfo;
    }
    
</script>
</head>
<body>
    
<form id="form1" runat="server">
        
<div>
            姓名
            
<input id="txtUserName" type="text" />
            
<input id="btnCallback" type="button" value="Callback" onclick=
"<%= ClientScript.GetCallbackEventReference(this,"document.getElementById'txtUserName').value","OnCallback",null) %>" />
            
<br />
            
<div id="Results" style="background-color: pink">
            
</div>
        
</div>
    
</form>
</body>

程序说明:Client端程序重点浓缩道个,一个是funciton OnCallback(),另一个是button的onclick事件
Server端  (ClientCallbacksSimple.aspx.cs)

Code

程序说明:在Server端拿掉了一堆看不懂的JavaScript,里面剩下的都是简单易懂的ADO.NET及基本语法,这样就清爽多了,:但有个重要的差异是前一个范例可以用JavaScript来按秒传数据,但本范例则必须按下Button按钮才行


参考资料
悉江华《圣殿祭祀的ASP.NET2.0开发祥解-使用C#》电子工业出版社 2006

posted on 2008-10-15 21:57  雪中苍蝇  阅读(328)  评论(0)    收藏  举报

导航