技术开发 频道

ASP.NET4与VS2010Web开发核心服务改进

  三、自启动的Web应用程序

  某些Web应用程序在服务第一个请求之前需要加载大量的数据或执行昂贵的初始化处理。在ASP.NET的早期版本中,对这些情况,你必须制定定制办法来“唤醒”一个ASP.NET应用程序,然后在Global.asax文件的Application_Load方法中运行初始化代码。

  现在,当ASP.NET 4运行在Windows Server 2008 R2的IIS 7.5服务器上时,你可以使用一种直接针对上述问题的命名为自动启动(auto-start)的新的可扩展性功能。这种自动启动功能提供了一种可控制的方法来启动一个应用程序池,初始化一个ASP.NET应用程序,然后接受HTTP请求。

  这是一种突破性的更新!被称之为“IIS Application Warm-Up Module for IIS 7.5”(针对IIS 7.5的IIS应用程序热身模块):

  IIS团队已经发布了这个模块的第一个beta测试版。这能够实现比以前更容易地为你的应用程序“热身”。在Web应用程序接受来自网络的请求之前,您可以指定执行的资源网址,而不是编写自定义代码。在IIS服务启动期间(如果您把IIS应用程序池配置为AlwaysRunning)和当一个IIS工作进程被回收时,即发生这种“热身”。在工作进程被回收期间,旧的IIS工作进程继续执行请求,直到新生成的辅助进程完全“热身”,这样一来,应用程序就不会感觉到发生中断及因未进行及时的缓存而出现的其他问题。注意,这个模块可以应用于从2.0版开始的任何版本的ASP.NET。

  更多的有关信息,请参见《Application Warm-Up on the IIS.net Web site》。有关如何使用上述热身功能的实际演练,请参阅《Getting Started with the IIS 7.5 Application Warm-Up Module on the IIS.net Web site》。

  要使用上述这种自启动功能,IIS管理员可以通过在applicationHost.config文件中使用下面的配置来在IIS 7.5中设置一个应用程序池:

<applicationPools>
  
<add name="MyApplicationPool" startMode="AlwaysRunning" />
</applicationPools>

   因为一个应用程序池中可以包含多个应用程序,所以,您可以指定独立的应用程序可自动被启动—通过在applicationHost.config文件中设置如下的配置内容实现:

<sites>
  
<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>

  当IIS 7.5服务器被冷启动或当个别应用程序池被回收时,IIS 7.5使用在applicationHost.config文件的信息来确定哪些Web应用程序需要自动启动。对于每个标记为自动启动的应用程序,IIS 7.5会发送一个请求到ASP.NET 4以便把应用程序启动到一个此程序暂时还不能够接受HTTP请求的状态。当应用程序处于这种状态时,ASP.NET会实例化由serviceAutoStartProvider属性定义的类型(如前面的例子所示),并调用到它的公共入口点处。

  您可以通过实现IProcessHostPreloadClient接口并使用必需的入口点类型来创建一个托管的自动启动类型,如下面的示例所示:

public class CustomInitialization : System.Web.Hosting.IProcessHostPreloadClient

  {

  
public void Preload(string[] parameters)

  {

  
// Perform initialization.

  }

  }

  在您的初始化代码在Preload方法中执行结束并返回后,ASP.NET应用程序已经为传入的处理请求作好了准备。

  随着自启动功能添加到IIS 7.5和ASP.NET 4中,现在你在处理HTTP请求之前可以使用一个良好定义的方法来执行代价巨大的应用程序初始化工作。例如,您可以使用新的自动启动功能来初始化一个应用程序,然后向一个负载平衡器发出信号—应用程序已初始化完毕并准备接受HTTP请求了。

0
相关文章