【问题标题】:IIS 5.0 - AppdomainIIS 5.0 - 应用程序域
【发布时间】:2011-08-16 07:46:58
【问题描述】:

我在这里有点困惑。在 IIS 5.0 中,所有 ASP.NET 应用程序都在同一个工作进程 (aspnet_wp.exe) 中运行。各种应用程序由 appdomain 隔离。我相信 appdomain 的基本功能是在进程中提供应用程序隔离。现在转到 IIS 6.0。我已经阅读了有关 IIS 6 中的应用程序池的信息。很多网站说,在 IIS 5.0 中,当应用程序出现问题时,它会影响其他应用程序。但这不是由 appdomains 保护的吗?有人告诉我,IIS 6.0 中的应用程序池可以防止这种事故。对于应用程序池相对于 IIS 5.0 提供的优势究竟是什么,我感到有些困惑。我还被告知,在 IIS 6 工作进程隔离模式下,配置不同的应用程序池(从而配置不同的工作进程)是一件很重要的事情。但是产生新进程会增加内存利用率,如何才能声称它是一种高性能的做事方式?另外,HTTP.SYS 是如何知道将请求路由到相关应用程序池的?

【问题讨论】:

    标签: asp.net iis iis-6


    【解决方案1】:

    不要混淆应用程序池和 AppDomain。 AppDomain 是进程内的隔离边界。它们旨在隔离并提供围绕正在执行的托管代码的安全性。

    应用程序池是 IIS 的一项功能,它允许池处理多个站点的请求。他们通过在工作进程(aspnet_wp.exe 或 w3wp.exe)中运行多个 AppDomain 实例来处理此问题。虽然从技术上讲,您可以为每个站点运行多个 AppDomain 实例,但通常每个 IIS 应用程序只有一个 AppDomain

    如果您在单个应用程序池中有多个站点(并且共享工作进程),如果其中一个站点开始消耗大量资源,这会直接影响在同一应用程序池中运行的其他站点。

    通过在逻辑组(应用程序池)中对站点进行分组(和隔离),您可以更好地管理站点的行为方式。

    HTTP.SYS 是一个内核模式驱动程序堆栈,它是 Windows 子系统的一部分。它在内核模式下提供对 HTTP 协议的管理(IIS6 之前的版本在用户模式下使用 winsock)。在内核级别运行 HTTP.SYS 时,如果工作进程失败,可以将请求排队,然后转发到将启动的新工作进程。

    当您在 IIS6 中创建站点时,它会使用 HTTP.SYS 注册该站点,然后可以将进入的请求路由到相应的工作进程。

    【讨论】:

      【解决方案2】:

      Appdomain 是关于共享数据的 http://msdn.microsoft.com/en-us/library/system.appdomain.aspx 在 IIS 6 中,您可以将多个应用程序附加到应用程序池中。如果您在同一个应用程序池中有 2 个应用程序,其中一个不断崩溃,它会影响另一个应用程序,并且 IIS 将因为不稳定而决定关闭整个应用程序池。

      因此,如果您有关键应用程序,建议将它们保存在自己的应用程序池中。如果您在 IIS 中有多个应用程序,则使用主机头(或额外的外部 IIP 地址)路由请求

      为每个生产网站推荐应用程序池的额外资源:http://forums.iis.net/t/1151476.aspx

      一个很好的资源,它解释了 5.0 和 6.0 之间的区别与隔离: http://www.tech-faq.com/understanding-iis-5-and-iis-6.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-22
        • 2010-09-27
        • 1970-01-01
        • 1970-01-01
        • 2011-08-23
        • 2010-09-19
        • 1970-01-01
        相关资源
        最近更新 更多