gpt4 book ai didi

asp.net - IIS Web-Garden 强制进程初始化可能吗?

转载 作者:行者123 更新时间:2023-12-02 10:13:49 27 4
gpt4 key购买 nike

我们有一个在 IIS Web 花园中运行的 ASP.Net Web 应用程序,该应用程序配置为分配最多四个进程。在我们的 Web 应用程序中,第一个访问该站点的用户会导致加载所有缓存的项目。由于我们在 IIS Web-Garden 中运行,因此最终需要最多四个首次用户为四个 Web-Garden 进程中的每一个进程建立缓存。这个缓存构建需要 30-40 秒,我们试图让它更快,但不太可能再改进了。

这是 Not Acceptable ,我们的任务是始终让每个人都能快速访问网站(无需等待缓存初始化)。我想采用一种抓取网站来预热缓存的解决方案。问题在于 Web-Garden 功能似乎是一个黑匣子——您无法控制 IIS 是否/何时决定在遇到下一个 HTTP 请求时加载第二个、第三个或第四个进程。

对我来说,这似乎是一个常见问题,但寻找解决方案却收效甚微。我的问题是,有没有办法通过 HTTP header 或其他一些构造来给 IIS 一个提示,表明您希望它加载或至少路由到进程 2、3、4 等?

最佳答案

根据 Microsoft 工程师的说法,这在 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 属性定义的类型(如前面的示例所示)并调用其公共(public)入口点。您可以通过实现 IProcessHostPreloadClient 接口(interface)来创建具有必要入口点的托管自动启动类型,如以下示例所示:

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 流量。

关于asp.net - IIS Web-Garden 强制进程初始化可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/998672/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com