`
阿尔萨斯
  • 浏览: 4144695 次
社区版块
存档分类
最新评论

ASP.NET 2.0的异步页面刷新真给劲

 
阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>

ASP.NET 2.0的异步页面刷新功能真得很酷,今天尝试用它解决我的一个应用问题,真是帮了大忙了。

我的页面要向后台的socket服务提交一个查询,首先这是一个可能长时间不返回的操作;其次为了拿到socket服务返回的长度不定、有可能很大的Response数据,我不得不采用了dotNETIAsyncResult BeginReceive(byte[] buffer, int offset, int size, SocketFlags socketFlags, AsyncCallback callback, object state);办法来异步提交socket命令,然后在回调函数中迭代调用int EndReceive(IAsyncResult asyncResult);来获取Response数据直到数据被取完,这一系列的数据片断都缓存在一个MemoryBlock链表中。

这种情况下,ASP.NET页面要想用表格展示Response数据,必须能够被异步刷新。

ASP.NET 1.x 本质上不支持异步页,但是通过坚韧的努力和不懈地创新可以生成异步页。有关更多概述信息,请参阅 MSDN®Magazine 2003 6 月刊的文章Use Threads and Build Asynchronous Handlers in Your Server-Side Web Code,该文章的作者是 Fritz Onion

ASP.NET 2.0 极大地简化了生成异步页的方式。首先使用该页的 @ Page 指令引入 Async=“true” 属性。

其次,在 Page_Load 时,注册事件Page_PreRender

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

{

if (!IsPostBack)

{

// 注册事件Page_PreRender执行完成时执行方法

// Hook PreRenderComplete event for data binding

this.PreRenderComplete += new EventHandler(Page_PreRenderComplete);

接下来,我在点击按钮的事件函数中,开始我的异步操作之旅:

/// PageAsyncTask 的方式则是增强版本,除了异步页面处理开始和结束方法自身外,

/// 还可以提供在超时情况下的处理方法,以及处理时的状态对象。

///

PageAsyncTask task = new PageAsyncTask(

new BeginEventHandler(BeginSubmitKeywordsAsyncOperation),

new EndEventHandler(EndSubmitKeywordsAsyncOperation),

new EndEventHandler(TimeoutSubmitKeywordsAsyncOperation),

null

);

RegisterAsyncTask(task);

/// 对大多数简单的异步处理情况,可以直接调用AddOnPreRenderCompleteAsync 方法,

/// 提交页面请求开始和结束时的处理代码

//AddOnPreRenderCompleteAsync(

// new BeginEventHandler(BeginSubmitKeywordsAsyncOperation),

// new EndEventHandler(EndSubmitKeywordsAsyncOperation)

//);

该页经历其常规处理生命周期,直到 PreRender 事件刚刚引发之后。然后,ASP.NET 调用使用 RegisterAsyncTask注册的 Begin 方法BeginSubmitKeywordsAsyncOperation。这个方法中我将向sokcet服务提交我的命令,然后将socket.BeginReceive方法得到的IasyncResult对象返回给ASP.NET

然后,我的socket异步回调函数在最终全部获得数据流后,通过调用

callback.Invoke(result);

来通知页面socket这边已经完成工作了。

于是ASP.NET唤起EndSubmitKeywordsAsyncOperation方法:

/// <summary><p></p></summary>

/// 异步调用结束后的接收方法(异步操作执行完成后,会重新从线程池中取个线程为本页面请求服务).

///

///

void EndSubmitKeywordsAsyncOperation(IAsyncResult ar)

{

_resultDataset = _submit.getResultDataset(ar);

在这个函数中,我就可以拿到数据流了。

之后,ASP.NET又唤起Page_PreRender事件,从而可以在这个事件中,把页面上的表格正确填充了。

这样,就达到了我的目的。而且向后台提交后等待被再度激活超时了,也可以由

void TimeoutSubmitKeywordsAsyncOperation(IAsyncResult ar)

来做合适的处理。

参考资源:

1

ASP.NET 2.0 中的异步页

http://www.microsoft.com/china/msdn/library/webservices/asp.net/issuesWickedCodetoc.mspx?mfr=true

发布日期: 2006-4-19 | 更新日期: 2006-4-19

2

ASP.NET 2.0 异步页面原理浅析 [1] Posted on 2005-12-27 00:28 Flier Lu




分享到:
评论

相关推荐

    asp.net2.0和jquery做的ajax无刷新留言板

    这是asp.net2.0和jquery做的ajax无刷新评论(留言板),完全开源,仅供学习 后面管理地址:admin.aspx 密码:ajax

    一个采用AJAX (ASP.NET 2.0)实现子窗体关闭父窗体异步刷新程序例子

    Partial update of parent page via AJAX (ASP.NET 2.0) on close of a child window - conditionally

    asp.net2.0+ajax聊天室

    本例采用asp.net2.0+ajax技术实现,不用数据库,采取2.0新概念Dictionary、LinkedList集合实现数据的处理. 所有发送、接收、显示在线用户列表等皆采用ajax技术完成,实现无刷新聊天的功能 Ajax的核心是JavaScript...

    asp.net知识库

    Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用小记 2.0问题、错误解决办法 ASP.NET 2.0...

    ASP.NET AJAX

    ajax技术,无刷新技术 导读:ScriptManager控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持...

    基于AJAX技术的邮件系统

    AJAX技术的发展越来越快,它提供了异步处理Web...微软公司在ASP.NET 2.0之上也推出了AJAX技术,即ASP.NET AJAX技术。本章将介绍创建一个基于ASP.NET AJAX技术的邮件系统。用户可以在无刷新的Web环境使用该邮件系统。

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    1.2.2 ASP.NET2.0 1.2.3 ASP.NET3.5 1.2.4 ASP.NET4 1.2.5 Silverlight 1.3 总结 第2章 Visual Studio 2.1 Visual Studio 2.1.1 网站和Web项目 2.1.2 创建无项目文件的网站 2.1.3 设计网页 2.2...

    Ajax聊天室 无刷新技术 支持很多浏览器

    本例采用asp.net2.0+ajax技术实现,不用数据库,采取2.0新概念Dictionary、LinkedList集合实现数据的处理. 所有发送、接收、显示在线用户列表等皆采用ajax技术完成,实现无刷新聊天的功能 Ajax的核心是...

    ASP.NET4高级程序设计(第4版) 3/3

    1.2.2 ASP.NET2.0 9 1.2.3 ASP.NET3.5 10 1.2.4 ASP.NET4 12 1.2.5 Silverlight 14 1.3 总结 15 第2章 Visual Studio 16 2.1 Visual Studio 16 2.1.1 网站和Web项目 17 2.1.2 创建无项目文件的...

    AJAX的高效聊天室源码

    例采用asp.net2.0+ajax技术实现,不用数据库,采取2.0新概念Dictionary、LinkedList集合实现数据的处理. 所有发送、接收、显示在线用户列表等皆采用ajax技术完成,实现无刷新聊天的功能 Ajax的核心是JavaScript ...

    ajax技术实现聊天室小程序

    本例采用asp.net2.0+ajax技术实现,不用数据库,采取2.0新概念Dictionary、LinkedList集合实现数据的处理. 所有发送、接收、显示在线用户列表等皆采用ajax技术完成,实现无刷新聊天的功能 Ajax的核心是JavaScript...

    ASP.NET中异步加载数据的无刷新Tab源代码

    .NET源码,Ajax相关,Tab,选项卡 使用Atlas中UpdatePanel实现异步加载数据的无刷新Tab,2.0中新增的两个控件——Menu和MultiView控件,最终效果类似WinForm程序中的TabControl,通俗来说就是当我们点击了选项卡的时候...

    在线聊天程序 实现无刷新聊天的功能

    本例采用asp.net2.0+ajax技术实现,不用数据库,采取2.0新概念Dictionary、LinkedList集合实现数据的处理. 所有发送、接收、显示在线用户列表等皆采用ajax技术完成,实现无刷新聊天的功能 Ajax的核心是JavaScript...

    亮剑.NET深入体验与实战精要2

    8.2.1 安装ASP.NET 2.0 Ajax Extensions 333 8.2.2 创建ASP.NET Ajax应用程序 333 8.2.3 ScriptManager控件使用技巧 335 8.2.4 UpdaetPanel控件使用技巧 336 8.2.5 AsyncPostBackTrigger实现 外部控件引发局部刷新...

    亮剑.NET深入体验与实战精要3

    8.2.1 安装ASP.NET 2.0 Ajax Extensions 333 8.2.2 创建ASP.NET Ajax应用程序 333 8.2.3 ScriptManager控件使用技巧 335 8.2.4 UpdaetPanel控件使用技巧 336 8.2.5 AsyncPostBackTrigger实现 外部控件引发局部刷新...

    C#高效的聊天室程序(vs2005 bs)

    用asp.net2.0+ajax技术实现,不用数据库,采取2.0新概念Dictionary、LinkedList集合实现数据的处理. 所有发送、接收、显示在线用户列表等皆采用ajax技术完成,实现无刷新聊天的功能 Ajax的核心是JavaScript ...

    偶然人才招聘系统存储过程版 v7.2.1.rar

    4. 系统引入 .net2.0 ajax异步刷新技术.良好的用户体验!非一般asp程序可比. 5. 实现了不同网站共享一个数据库的多分站技术!静态页面实现跨站点访问! 6. 站内短消息功能 7. 个人用户外发简历功能。 8. 友情连接 ...

Global site tag (gtag.js) - Google Analytics