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类型的类来自定义输出缓存提供程序。随后,可以通过在web.config中进行配置该提供程序,设置outputCache节点的providers子节点,如下面的示例所示:
<outputCache defaultProvider="AspNetInternalProvider">
<providers>
<add name="DiskCache"
type="Test.OutputCacheEx.DiskOutputCacheProvider, DiskCacheProvider"/>
</providers>
</outputCache>
</caching>
在ASP.NET 4 的默认输出缓存策略中。所有的HTTP响应、所呈现的页面和控件缓存均使用上例所示的默认输出缓存提供程序(其中defaultProvider属性值为AspNetInternalProvider)。通过为defaultProvider指定不同的提供程序。就可以更改web应用程序的默认输出缓存提供程序。
另外,还可以针对每个用户控件和各个请求选择不同的输出缓存提供程序。要为不同的Web用户控件选择不同的输出缓存提供程序,最简便的方法是设置页面或控件指令中新增加的providerName属性,如下面的示例所示:
<%@ OutputCache Duration="60" VaryByParam="None"
providerName="DiskCache" %>
若要为某个HTTP请求指定不同的输出缓存提供程序,可以覆盖Global.asax文件中新增加的GetOutputCacheProviderName方法,以编程的方式指定要用于特定请求的提供程序。
2.预加载Web应用程序
某些Web应用程序在第一次请求提供服务之前,需要加载大量的数据或执行开销很大的初始化处理。在ASP.NET早期版本中,对于此类情况,必须采用自定义方法“唤醒”ASP.NET应用程序,然后在Global.asax文件中的Application_Load方法中运行初始化代码。
为应对这种情况,当ASP.NET 4在Windows Server 2008 R2上的IIS7.5中运行时,ASP.NET 4提供一种新的应用程序预加载管理器。预加载功能提供了一种可控的方法,用于启动应用程序池,初始化ASP.NET应用程序,然后接受HTTP请求。通过这种方法,您可以在处理第一项HTTP请求之前执行开销很大的应用程序初始化的工作。例如,可以使用预加载管理器初始化某个应用程序,然后向负载平衡器发生信号,告知应用程序已初始化并做好接受HTTP请求的准备。
若要使用应用程序预加载管理器,就需要配置applicationHost.config文件,设置IIS 7.5中的应用程序池为自动启动,配置如下:
<add name="MyApplicationPool" startMode="AlwaysRunning" />
</applicationPools>
由于一个应用程序池可以包含多个应用程序,因此我们就需要通过使用applicationHost.config文件中的以下配置分别指定要自动启动的各个应用程序:
<site name="MySite" id="1">
<application path="/"
serviceAutoStartEnabled="true"
serviceAutoStartProvider="PrewarmMyCache" >
<!-- Additional content -->
</application>
</site>
</sites>
<!-- Additional content -->
<serviceAutoStartProviders>
<add name="PrewarmMyCache"
type="MyNamespace.CustomInitialization, MyLibrary" />
</serviceAutoStartProviders>
3.永久重定向页面
在应用程序的生命周期内,Web应用程序中有可能修改url的显示规则。
在ASP.NET 中,开发人员处理对旧的URL的请求的传统方式是使用Redirect方法将请求转发至新的URL。然而,Redirect方法会发出HTTP 302临时重定向。这会产生额外的HTTP往返。也不是对搜索引擎的友好。
ASP.NET 4 增加了一个RedirectPermanent帮助方法,使用该方法可以方便地发生http 301(永久跳转)的响应,如下面的示例所示:
RedirectPermanent("/newpath/foroldcontent.aspx");
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"
/>