学习, 简单整理了一下.
(一).简单介绍实现原理
左图为未使用异步页功能执行过程(Asp.net 1.0通常情况), 右图为使用了异步页执行过程(Asp.net 2.0新增特性).
(Asp.net 1.0一般处理过程) (使用Asp.net 2.0新增特性异步页功能处理过程)
从左图看出,在一个页面整个请求的过程中, 一个线程始终为同一个页面的请求服务.
而从右图可以看出,在一个页面请求的过程中, 可以由不同的线程为本页面请求服务.
显然,采用右图方式在客户端请求数量多时,网站整体效率较高. 因为:
1.当未使用异步页时,一个线程只能为同一个页面的请求服务. 即使页面请求过程中处理其它的I/O等操作
时,此线程也一直处于等待状态. 当此页面使用完此线程时,才将它放回到线程池.线程数量是有限的!
所以当不使用线程时及时放回线池可以使系统性能大大提高!
2.当使用了异步页功能时,如右图中,开始Thread1是为页面服务的,但当页面处理其它的事情(比如I/O或调用
其它WebService) 时,Thread1被放回线程池, 此时Thread1可以为其它页面请求服务了. 当此页面执行完
自己的操作回来后, Thread2接着为页面请求服务,并不是使用的原来的线程Thread1. 这样网站的伸缩性
会更好.
(二).使用方法示例
I.用Page.AddOnPreRenderCompleteAsync 实现异步页功能
a. Page标志加属性: Async="true", 添加后代码如下:
<%@PageLanguage="C#"AutoEventWireup="true"
CodeFile="AsyncPage.aspx.cs"
Inherits="_Default"Async="true"%>
b. 后台异步页面相关代码 :
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1privateWebRequest_request;
2protectedvoidPage_Load(objectsender,EventArgse)
3{
4//注册异步调用的Begin和End方法.
5AddOnPreRenderCompleteAsync(
6newBeginEventHandler(BeginAsyncOperation),
7newEndEventHandler(EndAsyncOperation)
8);
9}
10
11//异步调用开始方法(当执行此方法时,当前线程就回到线程池,等待为其它请求服务).
12IAsyncResultBeginAsyncOperation(objectsender,EventArgse,AsyncCallbackcb,objectstate)
13{
14_request=WebRequest.Create("http://blog.csdn.net/chengking/");
15return_request.BeginGetResponse(cb,state);
16}
17
18//异步调用结束后的接收方法(异步操作执行完成后,会重新从线程池中取个线程为本页面请求服务).
19voidEndAsyncOperation(IAsyncResultar)
20{
21stringtext;
22using(WebResponseresponse=_request.EndGetResponse(ar))
23{
24using(StreamReaderreader=newStreamReader(response.GetResponseStream()))
25{
26text=reader.ReadToEnd();
27}
28}
29this.lbOupput.Text=text;
30}
2.数据库对象SqlCommand实现异步调用功能.
a. Page标志加属性: Async="true", 添加后代码如下:
<%@PageLanguage="C#"AutoEventWireup="true"
CodeFile="AsyncPage.aspx.cs"
Inherits="_Default"Async="true"%>
b. 后台代码
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1publicpartialclassAsyncVisitDatabase:System.Web.UI.Page
2{
3//定义数据操作对象
4privateSqlConnection_connection;
5privateSqlCommand_command;
6privateSqlDataReader_reader;
7
8protectedvoidPage_Load(objectsender,EventArgse)
9{
10if(!IsPostBack)
11{
12//注册事件Page_PreRender执行完成时执行方法
13this.PreRenderComplete+=newEventHandler(Page_PreRenderComplete);
14
15/**////注册异步调用的Begin和End方法.
16AddOnPreRenderCompleteAsync(
17newBeginEventHandler(BeginAsyncOperation),
18newEndEventHandler(EndAsyncOperation)
19);
20}
21}
22
23//异步调用开始方法(当执行此方法时,当前线程就回到线程池,等待为其它请求服务).
24IAsyncResultBeginAsyncOperation(objectsender,EventArgse,AsyncCallbackcb,objectstate)
25{
26stringconnect=WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
27_connection=newSqlConnection(connect);
28_connection.Open();
29_command=newSqlCommand("select*fromsales",_connection);
30return_command.BeginExecuteReader(cb,state);
31}
32
33//异步调用结束后的接收方法(异步操作执行完成后,会重新从线程池中取个线程为本页面请求服务).
34voidEndAsyncOperation(IAsyncResultar)
35{
36_reader=_command.EndExecuteReader(ar);
37}
38
39//事件Page_PreRender执行完成时执行方法,在这里可以将异步调用返回结果赋值给页面上的控件或者其它善后操作.
40protectedvoidPage_PreRenderComplete(objectsender,EventArgse)
41{
42GridView1.DataSource=_reader;
43GridView1.DataBind();
44}
45
46publicoverridevoidDispose()
47{
48if(_connection!=null)
49_connection.Close();
50base.Dispose();
51}
52}
3.实现异步调用Webservice
a. Page标志加属性: Async="true", 添加后代码如下:
<%@PageLanguage="C#"AutoEventWireup="true"
CodeFile="AsyncPage.aspx.cs"
Inherits="_Default"Async="true"%>
b.后台代码
Webservice方法(生成数据).
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1publicclassWebService:System.Web.Services.WebService{
2
3publicWebService(){
4
5//Uncommentthefollowinglineifusingdesignedcomponents
6//InitializeComponent();
7}
8
9[WebMethod]
10publicDataSetGetData(){
11returnCreateData();
12}
13
14privateDataSetCreateData()
15{
16DataTabledtTypeChild=newDataTable();
17dtTypeChild.Columns.Add(newDataColumn("TypeID",typeof(int)));
18dtTypeChild.Columns.Add(newDataColumn("TypeDetail",typeof(string)));
19//Adddata
20DataRowdrChild1=dtTypeChild.NewRow();
21drChild1["TypeID"]=1;
22drChild1["TypeDetail"]="Apple";
23dtTypeChild.Rows.Add(drChild1);
24DataRowdrChild2=dtTypeChild.NewRow();
25drChild2["TypeID"]=2;
26drChild2["TypeDetail"]="orange";
27dtTypeChild.Rows.Add(drChild2);
28DataRowdrChild3=dtTypeChild.NewRow();
29drChild3["TypeID"]=3;
30drChild3["TypeDetail"]="banana";
31dtTypeChild.Rows.Add(drChild3);
32DataRowdrChild4=dtTypeChild.NewRow();
33drChild4["TypeID"]=4;
34drChild4["TypeDetail"]="pineapple";
35dtTypeChild.Rows.Add(drChild4);
36DataRowdrChild5=dtTypeChild.NewRow();
37drChild5["TypeID"]=5;
38drChild5["TypeDetail"]="pear";
39dtTypeChild.Rows.Add(drChild5);
40dtTypeChild.TableName="fruit";
41
42DataSetds=newDataSet();
43ds.Tables.Add(dtTypeChild);
44returnds;
45}
46
47}
后台代码:
相关推荐
ASP.NET 2.0引入了许多新特性,如母版页(Master Pages)和站点导航(Site Navigation),使得网页布局和多页面应用的管理更加方便。 2. **控件和事件模型**:在ASP.NET 2.0中,服务器控件提供了一种直观的方式来创建...
此"天轰穿ASP.NET2.0视频教程"针对初学者和进阶开发者,通过详细的教学指导,帮助用户掌握ASP.NET 2.0的核心概念和技术。 1. **ASP.NET 2.0架构** ASP.NET 2.0基于.NET Framework 2.0,引入了统一的页面生命周期...
这个“ASP.NET2.0实用教程(C#版)书中例子”PPT很可能会涵盖以上这些主题,并通过实例演示如何在实践中应用这些技术。PPT中的例子可能包括创建简单的Web表单、使用控件进行数据绑定、实现用户身份验证以及利用AJAX...
4. **母版页(Master Pages)**:母版页是ASP.NET 2.0中的一个重要特性,它允许开发者创建统一的布局模板,子页面可以通过继承母版页来保持一致的外观和导航结构。 5. **站点导航(Site Navigation)**:ASP.NET 2.0...
ASP.NET 2.0是微软开发的一个用于构建Web应用程序的框架,它基于.NET Framework 2.0,提供了许多改进和新特性,旨在提高开发效率和性能。本篇将深入探讨ASP.NET 2.0的关键知识点,结合提供的源码,帮助读者更深入地...
6. **AJAX支持**:ASP.NET 2.0引入了Atlas(后来成为AJAX Control Toolkit),提供异步更新功能,使得部分页面可以刷新,提高了用户体验。 7. **安全性**:ASP.NET 2.0包含了一系列安全特性,如身份验证、授权、...
在ASP.NET 2.0中,开发者可以利用其改进的控件模型、内置的安全特性、母版页(Master Pages)和主题(Themes)功能来构建用户界面。母版页允许在整个网站中创建一致的布局,而主题则简化了UI的样式管理。此外,ASP...
压缩包中的"ASP.NET 2.0网页制作彻底研究(程序代码)"很可能是包含了一系列示例项目和代码片段,这些示例涵盖了上述知识点,是学习和实践ASP.NET 2.0网页开发的宝贵资源。通过分析和运行这些代码,你可以更好地理解...
【Microsoft Ajax for ASP.NET 2.0】是一个关键的技术组件,它为开发人员提供了一种在Web应用程序中实现异步交互的能力。这个技术是.NET Framework 2.0的一部分,允许开发者构建更动态、响应更快的网页,提升用户...
8. **Web服务和AJAX支持**:ASP.NET 2.0支持创建和消费Web服务,以及通过ASP.NET AJAX扩展实现客户端的异步更新,从而提供更流畅的用户体验。 9. **错误处理和调试**:理解和使用如Try-Catch异常处理结构,以及...
ASP.NET 2.0是微软推出的用于构建动态网站和web应用程序的框架,它在ASP.NET 1.x的基础上引入了一系列新特性和改进,极大地提升了开发效率和用户体验。在"ASP.NET 2.0快速入门(3):ASP.NET 2.0的新控件"这个主题中,...
2. **C#语言特性**:C# 2.0引入了匿名方法、迭代器、部分类型等新特性,这些在ASP.NET开发中经常用到。学习如何有效地利用这些特性可以提升代码的可读性和维护性。 3. **Web控件**:ASP.NET 2.0提供了丰富的内置Web...
2. 母版页:母版页是ASP.NET 2.0中的一个重要特性,它提供了一种统一网站布局的方法。通过母版页,开发者可以定义全局的头部、尾部、导航栏等,子页面只需关注内容区域,从而提高了代码复用性和页面一致性。 3. ...
在ASP.NET 2.0中,微软还引入了AJAX(Asynchronous JavaScript and XML)支持,使得开发者可以创建具有部分页面更新功能的富客户端体验,而无需刷新整个页面。 AJAX的核心在于JavaScript和XML,但随着时间的推移,...
7. **AJAX支持**:ASP.NET 2.0通过Atlas(后来演变为ASP.NET AJAX)扩展了对异步JavaScript和XML的支持,允许部分页面更新,提高用户体验。 8. **错误处理和调试**:了解如何设置错误处理机制,如自定义错误页面和...
相比ASP.NET 1.x,2.0版本引入了许多新特性,如母版页(Master Pages)、皮肤(Skin)、控件生命周期改进以及更强大的数据绑定机制等,这些都极大地提升了开发效率和代码可维护性。 在企业级项目开发中,母版页是...
- ASP.NET 2.0引入了Atlas(后更名为ASP.NET AJAX),实现了客户端脚本和服务器端的异步通信,提高了用户体验。 10. **部署与发布** - 使用Visual Studio 2005进行项目部署,了解IIS的配置以及发布网站的流程。 ...
在ASP.NET 2.0中,引入了许多新特性,如控件事件模型、母版页(Master Pages)和皮肤(Skin)机制,这些都极大地简化了网页开发和维护。此外,它还引入了AJAX支持,使得创建富交互式Web应用变得更加便捷。 在光盘...
6. **AJAX支持**:探讨ASP.NET 2.0中的AJAX扩展,如UpdatePanel和ScriptManager,以及如何实现局部刷新和异步交互。 7. **会员和角色管理**:介绍ASP.NET的身份验证和授权系统,包括Windows身份验证、Forms身份验证...
在这个"asp.net2.0和jquery做的ajax无刷新留言板"项目中,开发者可能使用了以下技术点: 1. **ASP.NET 2.0 页面生命周期**:了解 ASP.NET 页面的生命周期是至关重要的,因为它决定了服务器端代码何时何地运行。在 ...