gpt4 book ai didi

asp.net - IIS 应用程序池/重新启动和 ASP.NET

转载 作者:行者123 更新时间:2023-12-04 00:08:04 26 4
gpt4 key购买 nike

我们正在使用 IIS7 来托管一个基于 web 的 asp.net 应用程序。
在这种环境中,管理员和开发人员可以定期将代码部署到应用程序。

新代码或应用程序作为 DLL 进入 ASP.NET bin 文件夹。部署新的 DLL 后,IIS 重新启动进程,影响(减慢)所有在线用户。

有没有办法配置 IIS 在后台运行进程,一旦准备好从旧状态切换到新状态而不影响用户?!

提前感谢您的反馈!

最佳答案

IIS 已经这样做了,这就是回收的全部内容。 IT 正在加载 DLL,而旧版本的应用程序仍在运行。只有在完成此操作后,才能完成回收。

然而加载 DLL 只是准备好 Web 应用程序的一部分 ,也可能有初始负载,如加载/缓存用户数据库等。
这些操作不是回收过程的一部分 ,它们发生在所有 DLL 重新加载并且回收已经完成之后。

不久前,由于启动期间的大量数据库事件/缓存,我遇到了一个应用程序启动时间很长的问题。所以我很感兴趣是否有一些功能允许我们在回收标记为完成之前执行代码,以便在一切准备好运行时首先考虑应用程序回收。基本上我想要的是某种暂存功能。
我就这个问题与 IIS 团队联系过,很遗憾 他们告诉我不存在这样的功能,也没有计划 .

要解决此问题,您可以尝试执行以下操作:

  • 使用交替部署:
    您设置了 2 个具有单独应用程序池的网站。其中一个是 LIVE 网站,另一个是 STAGED 网站。如果您想部署更改,您只需部署到 STAGED 网站。在所有内容都加载/缓存等之后,您切换 Web 应用程序的 URL 设置以将传入请求从 LIVE 重新路由到 STAGED 请求。所以现场直播变成了新的舞台表演,反之亦然。然后下一次部署将再次转到新的 STAGED,依此类推。

  • 更新
    显然他们已经创建了一个 IIS 模块来提供这个功能:

    IIS Application Warm-Up Module for IIS 7.5

    The IIS team has released the first beta test version of the Application Warm-Up Module for IIS 7.5. This makes warming up your applications even easier than previously described. Instead of writing custom code, you specify the URLs of resources to execute before the Web application accepts requests from the network. This warm-up occurs during startup of the IIS service (if you configured the IIS application pool as AlwaysRunning) and when an IIS worker process recycles. During recycle, the old IIS worker process continues to execute requests until the newly spawned worker process is fully warmed up, so that applications experience no interruptions or other issues due to unprimed caches. Note that this module works with any version of ASP.NET, starting with version 2.0.

    For more information, see Application Warm-Up on the IIS.net Web site. For a walkthrough that illustrates how to use the warm-up feature, see Getting Started with the IIS 7.5 Application Warm-Up Module on the IIS.net Web site.



    看:

    http://www.asp.net/whitepapers/aspnet4



    如果您使用 ASP.NET 4 自动启动功能:

    You can still choose to auto-recycle the worker processes from time to time. When you do that, though, the app will immediately restart and your warm up code will execute (unlike today - where you have to wait for the next request to-do that).



    预热和自动启动功能之间的主要区别在于预热模块是回收过程的一部分。而不是阻塞应用程序的请求,同时运行初始化代码 .
    使用“自动启动”功能获得的唯一好处是您不必等待用户点击页面,这对您的情况没有帮助。

    见顾的博文:

    http://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0-series.aspx



    更新 2:

    遗憾的是,IIS 7/7.5 的预热模块已经停止:

    http://forums.iis.net/t/1176740.aspx



    它将成为 IIS8 的一部分(现在称为应用程序初始化模块):

    http://weblogs.asp.net/owscott/archive/2012/03/01/what-s-new-in-iis-8.aspx



    更新 3:

    正如评论中所指出的,在 IIS 8 发布后,IIS 7.5 的预热模块作为 IIS 7.5 的应用程序初始化模块重新出现:

    http://www.iis.net/downloads/microsoft/application-initialization

    关于asp.net - IIS 应用程序池/重新启动和 ASP.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9658849/

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