ASP.NET4与VS2010Web开发核心服务改进
【IT168专稿】本系列文章将向您全面介绍在.NET框架4和Visual Studio 2010环境下进行ASP.NET 4 Web开发的新特征支持。具体来说,本系列文章将细分为核心服务篇、Microsoft Ajax Library新特征篇、Web表单篇、ASP.NET MVC篇、动态数据篇、Visual Studio 2010 Web设计器改进篇、使用Visual Studio 2010部署Web应用程序篇等。
ASP.NET 4中引入了许多改进核心ASP.NET服务的新特征,例如输出缓存和会话状态存储等,本文为系列的第一篇,将向您详细讨论核心ASP.NET服务方面的改进。
一、Web.config文件重构
Web.config文件包含了Web应用程序极其重要的配置信息,在过去几年推出的.NET框架中已经在多方面进行了巨大的改进。例如Ajax支持、路由控制以及与IIS 7的整合等一些新的功能被增加到这个文件中来。这种情况也导致了一个问题:当不使用像Visual Studio这样的工具时难以配置或启动一个新的Web应用程序。
在.NET框架4中,主要的配置元素已被转移到Machine.config文件中,现在应用程序可以从这些设置中进行继承。这使得ASP.NET 4中的Web.config文件或者为空或者只包含如下所示的几行信息(其中向Visual Studio指出应用程序将运行于哪个版本的.NET框架上)。
二、可扩展的输出缓存
自从ASP.NET 1.0发布以来,输出缓存使开发人员能够把由网页、控件及HTTP响应等生成的输出内容存储到内存中。这样一来,在后面的Web请求时,系统能够从内存检索这些生成的输出内容而不是从头开始重新生成输出,从而使ASP.NET可以更迅速地提供内容。但是,这种方法也有一个限制—生成的内容一定要存储在内存中。这样一来,服务器将承受巨大流量带来的压力,输出缓存消耗的内存与来自Web应用程序的其他部分的内存需求之间导致严重冲突。
针对上述情况,ASP.NET 4针对输出缓存增加了一个扩展点,能够使您可以配置一个或多个自定义输出缓存提供程序。输出缓存提供程序可以使用任何的存储机制来存储HTML内容。这使得开发者有可能针对不同的持久性机制创建自定义的输出缓存提供程序,其中可以包括本地或远程磁盘,云存储和分布式缓存引擎等等。
具体实现思路是,您可以通过从新的System.Web.Caching.OutputCacheProvider类中派生一个类来创建自定义输出缓存提供程序。然后,您可以通过使用OutputCache元素的新的providers节在Web.config文件中配置提供程序,如下面的示例所示:
默认情况下,在ASP.NET 4中,所有的HTTP响应、生成的网页以及控件都使用内存输出缓存,如前面的例子所示,其中defaultProvider属性被设置为AspNetInternalProvider。您可以更改一个Web应用程序中所使用的默认的输出缓存提供程序—这是通过为defaultProvider指定一个不同的提供程序名称实现的。
此外,您还可以针对每个控件和每个请求选择不同的输出缓存提供程序。为不同的Web用户控件选择不同的输出缓存提供程序的最简单的方法是,在一个网页或控件的指令中以声明方式使用新的ProviderName属性,如下面的示例所示:
为一个HTTP请求指定一个不同的输出缓存提供程序需要更多一点的工作。你不是使用声明方式来指定提供程序,而是在Global.asax文件中通过重载新的GetOuputCacheProviderName方法以编程方式指定针对一个具体的请求使用哪一个提供程序。下面的示例演示了如何做到这一点。
因为一个应用程序池中可以包含多个应用程序,所以,您可以指定独立的应用程序可自动被启动—通过在applicationHost.config文件中设置如下的配置内容实现:
当IIS 7.5服务器被冷启动或当个别应用程序池被回收时,IIS 7.5使用在applicationHost.config文件的信息来确定哪些Web应用程序需要自动启动。对于每个标记为自动启动的应用程序,IIS 7.5会发送一个请求到ASP.NET 4以便把应用程序启动到一个此程序暂时还不能够接受HTTP请求的状态。当应用程序处于这种状态时,ASP.NET会实例化由serviceAutoStartProvider属性定义的类型(如前面的例子所示),并调用到它的公共入口点处。
您可以通过实现IProcessHostPreloadClient接口并使用必需的入口点类型来创建一个托管的自动启动类型,如下面的示例所示:
在您的初始化代码在Preload方法中执行结束并返回后,ASP.NET应用程序已经为传入的处理请求作好了准备。
随着自启动功能添加到IIS 7.5和ASP.NET 4中,现在你在处理HTTP请求之前可以使用一个良好定义的方法来执行代价巨大的应用程序初始化工作。例如,您可以使用新的自动启动功能来初始化一个应用程序,然后向一个负载平衡器发出信号—应用程序已初始化完毕并准备接受HTTP请求了。