VS2010与.NET4系列 7.自动启动ASP.NET应用程序

今天介绍一个小的,但是很棒的新特性,这是 ASP.NET 4 中的一个可选的技术,即不必等待外部客户访问Web服务器就能自动启动并主动初始化Web应用程序的能力。这样就能为第一个访问服务器的用户提供更快的响应体验,也避免了编写自定义脚本对服务器进行“热身”以及让数据缓存准备就绪。这个技术在所有类型的ASP.NET应用程序上都起作用——包括基于 ASP.NET Web Forms 和 ASP.NET MVC 的应用程序。

使用 ASP.NET 4 自动启动 Web 应用程序

一些 Web 应用程序在准备处理请求之前,需要加载大量的数据,或执行昂贵的初始化过程。ASP.NET 开发人员经常在应用程序的 Global.asax 文件中的 "Application_Start" 事件处理方法(这个事件会在第一次请求执行时触发)中做这项工作。然后他们或者设计一个自定义脚本来发送假的请求给应用程序,定期的“唤醒它”使其在客户访问前执行这段代码,或者只是简单地让不幸的第一个客户访问应用程序并等待这些逻辑在处理请求前完成(这会导致长时间的延迟)。

ASP.NET 4 带来一个新特性,叫做“自动启动”,更好地解决了这个场景,当在 IIS 7.5 上运行 ASP.NET 4 时,这个技术是可用的(即要用到 Windows 7 或 Windows Server 2008 R2)。自动启动特性提供了一个可控的方法来启动应用程序工作者进程,初始化ASP.NET应用程序,然后获得HTTP请求。

配置 ASP.NET 4 应用程序去自动启动

为了使用 ASP.NET 4 的自动启动特性,首先要配置IIS的“应用程序池”工作者进程,这样应用程序运行在其内部的时候才会在Web服务器第一次启动时自动地启动。通过打IIS7.5的 applicationHost.config 文件(C:\Windows\System32\inetsrv\config\applicationHost.config)并在适当的 <applicationPools> 条目中添加 startMode="AlwaysRunning" 属性就可以做到这一点:

< applicationPools >
< add name ="MyAppWorkerProcess" managedRuntimeVersion ="v4.0" startMode ="AlwaysRunning" />
</ applicationPools >

如果启动 Windows 任务管理器,点击“显示所有用户的进程”复选框,然后保存刚刚修改的 applicationHost.config 文件,你将会看到一件一保存,一个新的 "w3wp.exe" 工作者进程立即就启动了。

一个 IIS 应用程序池工作者进程可以运行多个 ASP.NET 应用程序。可以指定哪些应用程序需要自动启动,只要在这些应用程序的 <application> 配置条目中添加 serviceAutoStartEnabled="true" 属性,工作者进行就会加载这些应用程序:

< sites >

< site name ="MySite" id ="1" >

< application path ="/" serviceAutoStartEnabled ="true" serviceAutoStartProvider ="PreWarmMyCache" />

</ site >

</ sites >


< serviceAutoStartProviders >

< add name ="PreWarmMyCache" type ="PreWarmCache, MyAssembly" />

</ serviceAutoStartProviders >

上面的 serviceAutoStartEnabled="PreWarmMyCache" 属性引用了配置文件中的提供程序条目,它使你能够配置封装了任何需要对应用程序执行“热身”逻辑的自定义类。一旦工作者进程和应用程序开始预加载(在任何外部的Web请求没有接收之前),这个类就会自动被自动调用,接着就执行任何想在请求接收和处理前需要运行的初始化或缓存加载逻辑:

public class PreWarmCache : System.Web.Hosting.IProcessHostPreloadClient {

public void Preload( string[] parameters) {

// Perform initialization and cache loading logic here...

}

}

IIS 会在它不会接受请求的状态中启动用程序,直到“热身”逻辑完成。Preload 方法中的初始化代码运行完并返回之后,ASP.NET 应用程序就会被标记为准备好处理请求了。

可选地,你可以使用 IIS7 应用程序请求路由 (ARR) 扩展能力的负载均衡和新的自动启动“热身”特性组合在一起使用。一旦应用程序初始化完成准备好接受 HTTP 通讯时发送信号给负载均衡程序,这样服务器就能够融入Web Farm来处理请求。

总结

ASP.NET 4 和 IIS 7.5 的新的“自动启动”特性提供了一个良好定义的方法,使得在任何终端用户访问应用程序前允许执行昂贵的应用程序启动和预缓存逻辑。这样就能让应用程序一开始能够先“热身”,从而实现了一致的高性能体验。

你可能感兴趣的:(asp.net,IIS,4,preload,Auto-Start)