通行证:用户名 密码 首页 - 新闻 - 免费邮箱 - 短信 - POPO - 相册 - 搜索 - 交友 - 拍卖
NetEase
新闻 | 体育 | 财经 | 娱乐 | 商业 | 科技 | 汽车 | 数码 | 女人 | 旅游 | 教育 | 文化 | 广州 | 军事 | 部落
评论 | NBA | 明星 | 证券 | 基金 | 探索 | 房产 | 手机 | 两性 | 健康 | 培训 | 电影 | 游戏 | 拍卖 | 论坛
科技首页 重磅报道 专题 IT茶馆 技术趋势 科学 学院 游戏 病毒 下载 论坛
热门搜索关键字:
WEB 学院

网易科技 -> 网易学院首页 -> 编程开发 | 文章正文

[教程有错,我要报告错误]

ASP.NET+AJAX解决网页打开等待问题

[2005-11-16 15:19:38] [来源:天极网] [我要投稿]

本文章地址:http://tech.163.com/05/1116/15/22MJF5O10009159F.html [点此复制地址]

在ASP.NET 1.x的时候,很多朋友可能需要进行跨页提交的处理,也就是从页面A能够提交到页面B,甚至不同的Control其目标处理页面也各不相同。尤其是从ASP/JSP/PHP转过来的开发人员,可能更有这种需求。但很不幸,在ASP.NET 1.x的时候,处理这种跨页请求是十分丑陋的,需要非常多的“技巧化”处理。

  在ASP.NET 2.0的时候,对于跨页提交已经有了非常合理的解决方案,以下就是一个示例。

  SourcePage.aspx: 请注意Button1的PostBackUrl属性设置

提要:ASP.NET为相当耗时的处理提供了几种解决方案。其中,最好的方法之一是把线程与查询方案或AJAX技术进行结合。

一、 前言

人们不得不等待。事实上,用户在操作计算机时,如果等待时间超过大约200毫秒,他们一般都感到厌烦。当你的基于万维网的应用程序使用一个需要耗费许多秒甚至几分钟的进程时,这可能成为一个问题。显然,你不可能仅通过建立一个进度条对话框或一等待光标就算万事大吉。

幸好,ASP.NET为此提供了一些不同的解决方案来处理这种相当耗时的进程-具体情况要依赖于要求的交互级别和你愿意处理的复杂程度。本文首先通过一个示例应用程序来说明这个问题并且通过两种方案来运行:一种使用了简单查询技术,而另一种使用一种更高级的AJAX解决方案。

千万警惕,在.NET框架中已发现存在一些错误的方式。其中之一就是IAsyncHTTPHandler-乍看来,它似乎有助于较长网页的请求。然而,这个异步HTTP处理器却是被设计用来释放处理器的-尽管,此时在一页面之上的某些任务需耗费一些时间但是并不需要任何CPU。一个好的例子就是在一页面的中间发出Web请求。在这种情况中,异步HTTP处理器是很有效率的。

二、 问题

在本文中,我要讨论一个不同的问题。在本示例应用程序中,我创建了一个页面-它用于为五个不同的机场报告当前的温度、风级和另外一些天气信息。Web服务要花费大约五秒钟来取得每一项数据。因此,如果我让该页面如图1所示运行,那么在服务器返回一页面前要花费大约一分钟-这对于任何用户都是无法接受的等待时间。

图1.等待:最开始的示例应用程序大约需要一分钟来加载页面。

这个相当耗时的页面相应的HTML显示于列表1中(详见下载源代码)。

页面装载事件代码为数据格子创建一个数据集。然后,迅速处理多个机场并且调用该web服务以得到数据。然后,该方法把数据从web服务填充到该数据集并且把它依附于一个格子控件(见图2)。

图2.基本的:该示例应用程序的Web服务执行一简单的天气状况查询。

这个web服务的WSDL是http://www.capeclear.com/AirportWeather.wsdl。它定义了许多不同的方法,我将仅使用其中的一个getSummary方法-它返回一个包括机场的位置、天空条件、风速、可见性甚至更多的数据块。

用这种方式,即使单个服务器请求也要比单个页面取回消耗更多的时间。另外一种选择是让一个线程运行于后台来取得数据,而由前端页面连续地监视该线程的输出。

三、 线程解决方案

线程解决方案提供给用户一种更为干净的体验-因为它们可以周期性地得到处理的更新。这里的响应是很容易准备的,尽管在后台的处理可能花一些时间,但是作为响应却可以马上返回。

为处理此线程系统,我将使用两个类和一个接口。JobHandler singleton负责维持一个对象集合-它实现IJob接口。这个JobHandler管理系统线程。每添加一个工作创建一个新线程,并且该工作上的Start方法在一个新线程内被调用。一个被用于后面查询工作的ID字符串被返回。

该Job系统相应的UML显示于图3。

图3.这个屏幕快照显示出该Job系统相应的UML。

WeatherJob是一个Ijob的实现-它负责从机场中的一个指定集合进行天气查询并且填充一个称作Data的包含天气报告的DataSet。

该JobHandler singleton相应的代码显示于列表2(详见下载源代码)-相当直接。唯一有趣的一点是AddJob方法,它为该工作创建一个新的线程并调用Start方法。

这些工作的接口显示于列表3(详见下载源代码)。其中的构造器为该工作建立数据集合。而且Start方法,通过每个机场,调用WEB请求并且在该数据集合中存储返回的数据。

相关文章:

推荐专题:

 

推荐文章:

·Golive将取代dreamweaver? ·全球杀毒软件大使用经验谈 ·Photoshop打造超短裤美眉 ·多媒体知识全接触教程

滚动更新:

·06上半年十大病毒排行榜出炉 灰鸽子成毒王 ·简直太强了!外国顶级Illustrator高手的作品 ·硬件厂商标志欣赏 ·超强的Coral Draw教程:鼠绘BMW汽车 ·六种设置方法彻底优化IE浏览器 ·Maxthon 2最新版本预览之功能篇(上) ·10大严重安全问题及预防措施(上) ·快速恢复WindowsXP管理员密码三大技巧 ·分享知识分享成功 谈网站建设的三个步骤 ·总结:用CSS进行网页样式设计攻略全集 ·Dreamweaver经典问题大搜罗 ·用PS给她绘制一颗有质感的红心 ·推荐:揭密黑客兵器的四大基本派系! ·用Winrar 自动解压功能定制安装程序 ·Photoshop为我家宝宝照片柔肤的简单技巧 ·教你强力破解E-mail密码的三种方法 ·手把手教您手工剿灭QQ广告弹出木马 ·浅谈Windows系统多重启动的重要文件 ·Windows系统美化:走向极端的好色潮流 ·桌面搜索数据库大挪移

·网易学院 | 最新评论·

网友评论仅供网友表达个人看法,并不表明网易同意其观点或证实其描述
通行证: 密码:
匿名发表