根据微软工程师的说法,这在 IIS 6 中是不可能的。但是,他们在 IIS 7.5 和 ASP.Net 4.0 中添加了一个新功能,它为我在这里寻找的东西提供了很好的功能。它被称为“preloadProvider”。这是下面的示例片段(非常酷!)。
http://forums.iis.net/p/1158476/1907392.aspx
由于单个应用程序池可以包含多个应用程序,因此您可以通过在 applicationHost.config 文件中使用以下配置来指定要自动启动的各个应用程序:
<sites>
<site name="MySite" id="1">
<application path="/"
preloadEnabled="true"
preloadProvider="PrewarmMyCache" >
<!-- Additional content -->
</application>
</site>
</sites>
<!-- Additional content -->
<preloadProviders>
<add name="PrewarmMyCache"
type="MyNamespace.CustomInitialization, MyLibrary" />
</preloadProviders>
当 IIS 7.5 服务器冷启动或回收单个应用程序池时,IIS 7.5 使用 applicationHost.config 文件中的信息来确定需要自动启动哪些 Web 应用程序。对于标记为自动启动的每个应用程序,IIS7.5 都会向 ASP.NET 4.0 发送一个请求,以在应用程序暂时不接受 HTTP 请求的状态下启动应用程序。当它处于这种状态时,ASP.NET 实例化由 preloadProvider 属性定义的类型(如前面的示例所示)并调用其公共入口点。您可以通过实现 IProcessHostPreloadClient 接口来创建具有必要入口点的托管自动启动类型,如以下示例所示:
public class CustomInitialization : System.Web.Hosting.IProcessHostPreloadClient
{
public void Preload(string[] parameters)
{
// Perform initialization.
}
}
在您的初始化代码在 Preload 方法中运行并且该方法返回之后,ASP.NET 应用程序就可以处理请求了。通过在 IIS 7.5 和 ASP.NET 4.0 中添加自动启动功能,您现在有了一种定义明确的方法,可以在处理第一个 HTTP 请求之前执行昂贵的应用程序初始化。例如,您可以使用新的自动启动功能来初始化应用程序,然后向负载均衡器发出信号,表明应用程序已初始化并准备好接受 HTTP 流量。