ASP.NET 2.0的内部变化

该篇文章是我于2009年6月10日通过自己编写的工具,批量从位于在博客园的博客站点(http://chenxizhang.cnblogs.com)同步而来。文章中的图片地址仍然是链接到博客园的。特此说明!

陈希章

原文地址:http://www.cnblogs.com/chenxizhang/archive/2009/04/27/1444383.html
原文标题:ASP.NET 2.0的内部变化
原文发表:2009/4/27 2:11:00

完整的内容请参考下面微软官方的文章

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

 

有几个有意思的地方

第一部分是编译模型不一样了

1. ASP.NET 2.0的编译模型不一样了。它通过局部类(Partial)的方式,真正把页面文件(aspx)和代码隐藏文件(aspx.cs)编译成一个类型,而不是以前那样有两个不同的类型。

2. 批编译的机制

image

3. 完整的运行时编译(/app_code 目录)

在目前描述的所有三种编译方法中,在部署前必须要编译所有的代码文件(代码隐藏类和支持类)。在 ASP.NET 2.0 中,您有代码目录。

/app_code 目录是一个保存未编译类的特殊目录。在运行时,ASP.NET 运行库将该目录中的内容编译到一个程序集中,应用程序中的 ASPX 页自动引用该程序集。换句话说,通过使用代码目录,可以避免为支持代码创建和引用单独的程序集。代码目录的优点在于,不用完整编译项目就可以部署,因此减少了不匹配的可能。缺点是,有可能在服务器上公开未编译的代码。

该选项最适合于不需要大量支持代码(以代码隐藏文件的形式或外部对象的形式)的 ASP.NET 应用程序。对于一个简单的应用程序,与更为健壮的编译方法相比,快速部署和测试系统的功能提供了几个优点。【这种做法,其实很类似ASP】

 

总结:因为批编译是会增加应用程序启动的时间的,而运行时编译除了增加运行时编译器工作量之外,还有代码安全风险。所以其实在ASP.NET 2.0中,还是首选:部署前预先编译。

 

第二部分是页面模型不一样了

1. 新增加了很多事件

表 1. 页面生命周期方法
方法活动

Constructor

Always

Construct

Always

TestDeviceFilter

Always

AddParsedSubObject

Always

DeterminePostBackMode

Always

OnPreInit

Always

LoadPersonalizationData

Always

InitializeThemes:这里存疑,经查证并没有事件                              

Always

OnInit

Always

ApplyControlSkin

Always

ApplyPersonalization

Always

OnInitComplete

Always

LoadPageStateFromPersistenceMedium

PostBack

LoadControlState

PostBack

LoadViewState

PostBack

ProcessPostData1

PostBack

OnPreLoad

Always

OnLoad

Always

ProcessPostData2

PostBack

RaiseChangedEvents

PostBack

RaisePostBackEvent

PostBack

OnLoadComplete

Always

OnPreRender

Always

OnPreRenderComplete

Always

SavePersonalizationData

Always

SaveControlState

Always

SaveViewState

Always

SavePageStateToPersistenceMedium

Always

Render

Always

OnUnload

Always

 

2. 可以跨页提交

有的朋友一听到这个就很兴奋,其实也没有什么大惊小怪的。而且你实际上用到此特性的几率是很小的。

注意,不可能像下面这样写。就是说你不能去让runat=server的form自动提交到某个action。这是不允许的

image

如果这样做,你就会遇到一个类似下面的错误

image

这真是一个让人懊恼的错误提示,因为你根本不知道发生了什么事情。

要实现这样的需求,你可以通过在Button上面设置一个特殊的属性:PostBackUrl。

image

然后,整个世界就清净了。

果然是这样吗?其实不然,如果是这样提交的话,我们在WebForm1.aspx中如何得到目前页面的一些窗体域的值呢?或者说,WebForm1.aspx在加载的时候,又怎么知道自己是怎么被加载过来的呢?也就是说自己的前一页是什么?我们现在的需求是,在WebForm1.aspx中能不能读到下面的文本框(UserName)的值呢?

image

其实仍然是不难的。我们可以通过Request.Form集合读取

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write(Request.Form["UserName"]);
}

除此之外,ASP.NET 2.0还提供了一个新的途径,就是在页面(Page)这个对象上,多了一个属性:PreviousPage。可以这么说,这个Page就代表了完整的一个页面的引用。除了取得控件值之外,还可以做很多事情。

Response.Write((this.PreviousPage.FindControl("UserName") as TextBox).Text);

关于跨页提交,还有一个博客写得不错

http://activer.cnblogs.com/archive/2006/03/16/351274.html

 

第三部分是新的管道模型

image

通过开发自定义的HttpModule或者HttpHandler,可以改变ASP.NET执行引擎的行为

 

当 IIS 接收一个请求时,根据 IIS 的设置将扩展映射到一个 ISAPI 筛选器。将 .ASPX、.asmx、.asd 和其他扩展映射到 ASPnet_isapi.dll,该 ASPnet_isapi.dll 只是一种启动 ASP.NET 运行库的 ISAPI 筛选器。一旦请求到达 ASP.NET 运行库,它在 HTTPApplication 对象处启动,该对象担当 ASP.NET Web 应用程序的宿主。HTTPApplication 对象:

1.读取机器级和应用程序级的配置文件。

2.通过一个或多个 HTTPModule 实例传递请求。每个 HTTPModule 提供一种服务,例如会话维护、身份验证,或配置文件维护。这些模块将请求传递回 HTTPApplication

3.根据谓词和路径将请求传递给 HTTPHandler。谓词指请求中使用的 HTTP 谓词(GET、POST、FTP,等等),而路径指应用程序中的 URL。根据处理程序的配置方式,该请求可能作为一个 ASP.NET 页(System.Web.UI.PageIHTTPHandler 的一种实现)加以处理,或者该请求可能触发另一个操作,例如批编译所有的 Web 页(precomiplation.asd 触发 PrecompHandler)。

在 ASP.NET 2.0 中,该模型没有变化,但是,添加了几种新模块和处理程序以提供其他的服务。与 ASP.NET 1.x 一样,您可以扩展、替换或重新配置任何模块或处理程序类,以提供自己的自定义功能。

新模块

显然,已经添加了新 HTTPModules 以支持 ASP.NET 2.0 中提供的新服务。具体地说,具有默认模块设置的 ASP.NET 应用程序将包括为以下目的而添加的新模块:

  • SessionID — 会话识别机制已经从 ASP.NET 1.x 会话模块分离,以提供对 cookie、URL 重写以及会话 ID 生成的其他形式的更多控制。
  • 角色管理 — 添加的这种新模块用于提供基于角色的服务,以支持新用户识别机制。该模块有助于将 ASP.NET 应用程序和内置在 .NET 框架中基于角色的安全性结合起来。
  • 匿名识别 — 新的个性化功能支持匿名用户。该模块有助于跟踪匿名用户可以访问的功能,以及跟踪在请求之间维护这些功能的方式。
  • 配置文件 — 该配置文件模块连接新的配置文件服务,帮助为用户提供特定的持久数据存储。

除了这些新模块,一些旧模块的行为也进行了更改:例如,输出缓存模块现在支持新的缓存技术,这将在本白皮书的稍后部分说明。

新处理程序

除了这些新模块,ASP.NET 2.0 还引进了新的处理程序来支持应用程序配置工具以及其他的新功能,例如,批编译请求。这些新处理程序中最重要的一点是包括处理 Web 站点管理请求的“.axd”系列。这些处理程序启动内部的管理工具,这些管理工具允许开发人员配置 ASP.NET 用户和其他设置。管理处理程序包括:

  • Web 管理 — WebAdminHandler 是管理 Web 站点的主页。该处理程序为管理 ASP.NET 2.0 Web 应用程序提供了起点。
  • 跟踪 — ASP.NET 1.xTraceHandler 已进行了改进,它是 ASP.NET 1.x 中唯一的“axd”处理程序。
  • Web 资源 — 由于有了新的管理工具和 WebResourcesHandler,现在可以在部署后配置 Web 资源。
  • 缓存图像 — CachedImageServiceHandler 支持缓存图形组件。
  • 计数器 — SiteCountersHandler 使用页面计数器模块为 ASP.NET 2.0 应用程序提供访问统计信息。
  • 预编译 — 正如先前提到的一样,可以使用 PrecompHandler 在一个 ASP.NET 应用程序中批编译所有的 ASPX 页。
  • Web 部件导出 — WebPartExportHandler 支持存储和传输 Web 部件布局。Web 部件是一种新机制,用于个性化门户样式的 Web 应用程序的外观和内容。
  • 与以前一样,HTTPForbiddenHandler 连接到不应该返回的任何文件类型。在 ASP.NET 2.0 中,禁止的文件类型列表已扩展为包括母版页、外观文件和其他的开发人员新组件。

 

第四部分是缓存技术的改进

1. 提供了数据库依赖缓存技术:SqlCacheDependency

2. 提供了缓存后替换等新的技术:

作者:陈希章
出处:http://blog.csdn.net/chen_xizhang
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字乡村和智慧农业的数字化转型是当前农业发展的新趋势,旨在通过应用数字技术,实现农业全流程的再造和全生命周期的管理服务。中国政府高度重视这一领域的发展,提出“数字中国”和“乡村振兴”战略,以提升国家治理能力,推动城乡融合发展。 数字乡村的建设面临乡村治理、基础设施、产业链条和公共服务等方面的问题,需要分阶段实施《数字乡村发展战略纲要》来解决。农业数字化转型的需求包括满足市民对优质农产品的需求、解决产销对接问题、形成优质优价机制、提高农业劳动力素质、打破信息孤岛、提高农业政策服务的精准度和有效性,以及解决农业融资难的问题。 数字乡村建设的关键在于构建“1+3+4+1”工程,即以新技术、新要素、新商业、新农民、新文化、新农村为核心,推进数据融合,强化农业大数据的汇集功能。数字农业大数据解决方案以农业数字底图和数据资源为基础,通过可视化监管,实现区域农业的全面数字化管理。 数字农业大数据架构基于大数据、区块链、GIS和物联网技术,构建农业大数据中心、农业物联网平台和农村综合服务指挥决策平台三大基础平台。农业大数据中心汇聚各类涉农信息资源和业务数据,支持大数据应用。信息采集系统覆盖市、县、乡、村多级,形成高效的农业大数据信息采集体系。 农业物联网平台包括环境监测系统、视频监控系统、预警预报系统和智能控制系统,通过收集和监测数据,实现对农业环境和生产过程的智能化管理。综合服务指挥决策平台利用数据分析和GIS技术,为农业决策提供支持。 数字乡村建设包括三大服务平台:治理服务平台、民生服务平台和产业服务平台。治理服务平台通过大数据和AI技术,实现乡村治理的数字化;民生服务平台利用互联网技术,提供各类民生服务;产业服务平台融合政企关系,支持农业产业发展。 数字乡村的应用场景广泛,包括农业生产过程、农产品流通、农业管理和农村社会服务。农业生产管理系统利用AIoT技术,实现农业生产的标准化和智能化。农产品智慧流通管理系统和溯源管理系统提高流通效率和产品追溯能力。智慧农业管理通过互联网+农业,提升农业管理的科学性和效率。农村社会服务则通过数字化手段,提高农村地区的公共服务水平。 总体而言,数字乡村和智慧农业的建设,不仅能够提升农业生产效率和管理水平,还能够促进农村地区的社会经济发展,实现城乡融合发展,是推动中国农业现代化的重要途径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值