微软的每一次新版本发布对于我们开发人员来说都是激动人心的,它所提供的强大功能和人性化的操作界面总会让你心潮澎湃、激动不已。相对于ASP.NET 3.5 SP1 来说,ASP.NET 4 算是一个功能性增强版本,它引入了多项可改进ASP.NET 核心服务的功能。

1. 可扩展输出缓存

其实,自ASP.NET 1.0 发布之后,开发人员就可以通过输出缓存将生成的页、控件和HTTP 响应的输出存储在内存中。对于后续的Web 请求,ASP.NET 可以从内存中检索生成的输出而不是从头开始重新生成输出,从而更快地提供内容服务。但此方法有一个限制,即生成的内容必须始终存储在内存中。在流量较大的服务器上,输出缓存的内存需求可能会与Web 应用程序其他部分的内存需求产生冲突。

ASP.NET 4 为输出缓存增加了扩展性,它允许你能够配置一个或多个自定义输出缓存提供程序。输出缓存提供程序可使用任何存储机制保存HTML 内容。这些存储选项包括本地或远程磁盘、云存储和分布式缓存引擎。

借助ASP.NET 4 中的输出缓存提供程序扩展性,可以为网站设计更主动且更智能的输出缓存策略。例如,可以创建这样一个输出缓存提供程序,该程序在内存中缓存站点流量排名前10的页面,而在磁盘上缓存流量较低的页面,也可以根据所呈现页面的各种变化因素组合进行缓存,但应使用分布式缓存以减少前端Web 服务器的内存消耗。

可以将自定义输出缓存提供程序作为派生自新的OutputCacheProvider 类型的类创建。随后,可以通过使用OutputCache元素的新的providers节在Web.config 文件中配置提供程序,如下面的示例所示:

 
 
  

        type="_19_1.MyOutputCacheProvider,19-1"/>
  

 


默认情况下,ASP.NET 4 中所有的HTTP响应、生成的网页以及控件都使用内存输出缓存,其中defaultProvider属性被默认设置为AspNetInternalProvider。当然,可以更改Web 应用程序中所使用的默认输出缓存提供程序,这是通过为defaultProvider指定一个不同的提供程序名称实现的,如下面的代码所示。

 
 
  

        type="_19_1.MyOutputCacheProvider,19-1"/>
  

 

此外,还可以针对每个控件和每个请求选择不同的输出缓存提供程序。为不同的Web 用户控件选择不同的输出缓存提供程序的最简单的方法就是在用户控件的指令中以声明方式使用新的ProviderName属性,如下面的代码所示。

 <%@ Control Language="C#" AutoEventWireup="true"
  CodeBehind="MyOutputCacheProviderUserControl.ascx.cs"
  Inherits="_19_1.MyOutputCacheProviderUserControl" %>

  <%@ OutputCache Duration="30" VaryByParam="none"
  ProviderName="MyOutputCacheProvider" %>
 

2. 预加载Web应用程序

预加载功能提供了一种可控方法,用于启动应用程序池,初始化ASP.NET 应用程序,然后接受HTTP 请求。通过这种方法,可以在处理第一项HTTP 请求之前初始化开销很大的应用程序。例如,可以使用应用程序预加载管理器初始化某个应用程序,然后向负载平衡器发出信号,告知应用程序已初始化并做好接受HTTP 流量的准备。值得注意的是,该技术只能够在Windows Server 2008 R2 上的IIS 7.5 中运行。

若要使用应用程序预加载管理器,需要由IIS 管理员通过使用applicationHost.config 文件中的以下配置将IIS 7.5 中的应用程序池设置为自动启动:


 

        

由于一个应用程序池可包含多个应用程序,因此需要通过使用applicationHost.config 文件中的以下配置分别指定要自动启动的各个应用程序:

 
 
   
    serviceAutoStartEnabled="true"
    serviceAutoStartProvider="PrewarmMyCache" >
   
   

 




  
    type="MyNamespace.CustomInitialization, MyLibrary" />

如果IIS 7.5 服务器冷启动或某个应用程序池已回收,IIS 7.5 将使用applicationHost.config 文件中的信息确定哪些Web 应用程序必须自动启动。对于每个标记为预加载的应用程序,IIS 7.5 将向ASP.NET 4 发送一个请求以启动该应用程序使其处于一种状态,在该状态下该应用程序暂时无法接受HTTP 请求。当应用程序处于这种状态时,ASP.NET 将对serviceAutoStartProvider 特性定义的类型进行实例化并调入其公共入口点。

通过实现IProcessHostPreloadClient 接口,可以创建具有所需入口点的托管预加载类型。

3. 永久重定向页面

对于页面的重定向,ASP.NET 4 增加了一个RedirectPermanent方法,它可以方便地发出HTTP 301永久移动)响应,如下面的示例所示:

RedirectPermanent("/Main.aspx");

识别永久重定向的搜索引擎及其他用户代理将存储与内容关联的新URL,从而消除浏览器用于临时重定向的不必要的往返。

4. 会话状态压缩

默认情况下,ASP.NET 提供两个用于存储整个Web 场中会话状态的选项:第一个选项是一个调用进程外会话状态服务器的会话状态提供程序;第二个选项是一个在Microsoft SQL Server 数据库中存储数据的会话状态提供程序。由于这两个选项均在Web 应用程序的工作进程之外存储状态信息,因此在将会话状态发送至远程存储器之前,必须对其进行序列化。如果会话状态中保存了大量数据,序列化数据可能会变得很大。

ASP.NET 4 针对这两种类型的进程外会话状态提供程序引入了一个新的压缩选项。使用此选项后,在Web 服务器上有多余CPU 周期的应用程序可以大大缩减序列化会话状态数据的大小。

可以使用配置文件中sessionState 元素的新的compressionEnabled 特性设置此选项,当compressionEnabled 配置选项设置为true 时,ASP.NET 使用.NET Framework GZipStream类对序列化会话状态进行压缩和解压缩。下面的示例演示了如何设置该特性:


mode="SqlServer"
sqlConnectionString="data source=dbserver;
Initial Catalog=aspnetstate"
allowCustomSqlDatabase="true"
compressionEnabled="true"/>

5. 简洁的Web.config文件

ASP.NET 4 中,配置信息被移到了machine.config文件中,从而使Web.config 比以前的版本更简洁和清晰,如下面的代码所示。