`
happmaoo
  • 浏览: 4471920 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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+sql server 网络应用开发详解

    在ASP.NET 2.0版本中,引入了许多新特性,如改进的页面生命周期管理、母版页(Master Pages)用于统一网站布局、自定义控件增强用户体验、配置管理工具简化部署过程、以及ASP.NET AJAX框架实现页面无刷新交互等。...

    asp.net2.0 调用websevice 实现天气预报

    在本项目中,“asp.net2.0 调用websevice 实现天气预报”,我们将探讨如何利用ASP.NET 2.0集成Web服务(Web Service)来获取并展示实时天气信息,从而实现一个无刷新的天气预报应用。 首先,Web服务是一种基于XML的...

    asp.net2.0技术内幕 源码

    9. **AJAX支持**:尽管ASP.NET 2.0的AJAX功能相对较弱,但仍然可以通过`UpdatePanel`和`ScriptManager`控件实现部分页面刷新。在提供的源码中,可能能找到如何使用这些控件来实现异步交互的例子。 10. **安全性**:...

    asp.net 2.0快速入门教程

    虽然ASP.NET 2.0本身不包含Ajax框架,但可以通过第三方库如Atlas(后来发展为ASP.NET AJAX)实现局部刷新和异步交互,提升用户体验。 10. **部署与发布** 使用Visual Studio 2005,你可以轻松地将ASP.NET 2.0应用...

    ASP.NET 2.0网站开发全程解析(C#)

    6. **AJAX支持**:ASP.NET 2.0引入了Atlas(后来成为AJAX Control Toolkit),提供异步更新功能,使得部分页面可以刷新,提高了用户体验。 7. **安全性**:ASP.NET 2.0包含了一系列安全特性,如身份验证、授权、...

    Asp.net 2.0高级编程

    9. **AJAX支持**:ASP.NET 2.0通过Atlas(后来成为AJAX Control Toolkit)扩展了对异步JavaScript和XML的支持,增强了用户体验,减少了页面刷新。 10. **安全性和身份验证**:ASP.NET 2.0内置了多种身份验证和授权...

    Microsoft Ajax For asp.net2.0

    【Microsoft Ajax for ASP.NET 2.0】是一个关键的技术组件,它为开发人员提供了一种在Web应用程序中实现异步交互的能力。这个技术是.NET Framework 2.0的一部分,允许开发者构建更动态、响应更快的网页,提升用户...

    ASP.NET 2.0 完全自学手册

    7. **AJAX 支持**:ASP.NET 2.0 引入了 AJAX 扩展,如UpdatePanel和ScriptManager,使得部分页面刷新成为可能,从而提升用户体验。理解异步通信和JavaScript与服务器端代码的交互是现代Web开发的重要技能。 8. **...

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

    在这个"asp.net2.0和jquery做的ajax无刷新留言板"项目中,开发者可能使用了以下技术点: 1. **ASP.NET 2.0 页面生命周期**:了解 ASP.NET 页面的生命周期是至关重要的,因为它决定了服务器端代码何时何地运行。在 ...

    零基础学ASP.NET 2.0

    7. AJAX支持:虽然ASP.NET 2.0本身不直接支持AJAX,但可以通过Microsoft的Atlas(后来发展为ASP.NET AJAX)扩展来实现局部刷新和异步通信,提升用户体验。 根据提供的压缩包子文件的文件名称列表,可能包含的是教学...

    ASP.NET 2.0网络开发技术(pdf)

    除此之外,ASP.NET 2.0还引入了ASP.NET AJAX(Asynchronous JavaScript and XML),它支持客户端脚本,实现了页面的部分更新,提高了用户体验。AJAX技术通过XMLHttpRequest对象与服务器进行异步通信,使得页面可以在...

    ASP.Net 2.0入门和高级编程案例(含源代码)

    2. **AJAX支持**:介绍ASP.NET 2.0的UpdatePanel和ScriptManager,以及如何实现局部刷新和异步交互。 3. ** membership 和 role management**:使用ASP.NET身份验证和角色管理功能,实现用户注册、登录和权限控制。...

    asp.net2.0_无刷新进度资料

    本资料包“asp.net2.0_无刷新进度资料”提供了一个关于如何在ASP.NET 2.0中实现无刷新进度条功能的简单示例。 无刷新进度条通常在大文件上传或长时间运算过程中使用,它可以为用户提供一个可视化的反馈,展示任务的...

    精通ASP.net 2.0 企业级项目开发源代码 光盘资料 简单OA系统

    最后,ASP.NET 2.0还支持AJAX(Asynchronous JavaScript and XML),通过Partial Page Updates和UpdatePanel,可以在不刷新整个页面的情况下更新部分内容,提高用户体验。简单OA系统可能利用这一特性实现了异步交互...

    asp.net 2.0+ajax 的简单示例

    在ASP.NET 2.0中,微软还引入了AJAX(Asynchronous JavaScript and XML)支持,使得开发者可以创建具有部分页面更新功能的富客户端体验,而无需刷新整个页面。 AJAX的核心在于JavaScript和XML,但随着时间的推移,...

    Asp.net 2.0 Treeview 无限级无刷新示例

    在这个"ASP.NET 2.0 Treeview 无限级无刷新示例"中,我们将探讨如何构建一个能够无限级展开并且在用户操作时无需整个页面刷新的TreeView。 首先,我们需要了解TreeView的基本用法。TreeView控件通过Nodes属性来添加...

    ASP.NET 2.0 AJAX Extensio(微软官网下载)

    ASP.NET 2.0 AJAX Extensions是微软为提升Web应用程序用户体验而推出的一项技术,它通过引入局部刷新和异步通信,使得网页能够在不重新加载整个页面的情况下更新部分内容,从而提高了交互性和响应速度。这个官方下载...

    ASP.NET2.0傻瓜每日应用

    9. **AJAX支持**:虽然ASP.NET 2.0本身并不包含完整的AJAX支持,但可以通过Microsoft的Atlas(后来的ASP.NET AJAX)库来实现局部刷新和异步交互。 10. **部署和调试**:ASP.NET 2.0提供了更完善的部署工具和调试...

    无刷新asp.net2.0

    在"无刷新asp.net2.0"这个主题中,我们可以看到它强调的是如何在ASP.NET 2.0环境下利用Ajax技术实现页面的无刷新更新。"Callback"可能指的是回调函数,这是在异步请求中常见的一种处理机制,当服务器响应完成时,回...

    Professional ASP.NET 2.0

    6. **AJAX支持**:探讨ASP.NET 2.0中的AJAX扩展,如UpdatePanel和ScriptManager,以及如何实现局部刷新和异步交互。 7. **会员和角色管理**:介绍ASP.NET的身份验证和授权系统,包括Windows身份验证、Forms身份验证...

Global site tag (gtag.js) - Google Analytics