我在这里有点困惑。在IIS5.0中,所有ASP.NET应用程序都在同一个工作进程(aspnet_wp.exe)内运行。不同的应用程序通过appdomain进行隔离。我认为appdomain的基本功能是在进程中提供应用程序隔离。现在转到IIS 6.0。我在IIS6中读到过有关应用程序池的文章。很多站点都说,在IIS5.0中,当一个应用程序出现问题时,它会影响其他应用程序。但这难道不是由appdomain保护的吗?有人告诉我,IIS 6.0中的应用程序池可以防止这种情况发生。我在这里有点困惑,因为应用程序池相对于IIS 5.0到底提供了什么优势。我还被告知,在IIS 6工作进程隔离模式中,配置不同的应用程序池(以及不同的工作进程)是一件很好的事情。但是,衍生新进程会增加内存利用率,如何才能声称这是一种高效的处理方式呢?另外,HTTP.SYS如何知道将请求路由到相关的应用程序池?
发布于 2011-08-17 15:53:16
不要混淆应用程序池和AppDomains。AppDomain是进程内的隔离边界。它们旨在隔离正在执行的托管代码并为其提供安全性。
应用程序池是IIS的一项功能,它允许池处理多个站点的请求。它们通过在工作进程(aspnet_wp.exe或w3wp.exe)中运行多个AppDomain实例来处理此问题。虽然从技术上讲,您可以在每个站点上运行多个AppDomain实例,但通常每个IIS应用程序只有一个AppDomain。
如果您在单个应用程序池中有多个站点(并且共享工作进程),如果其中一个站点开始消耗大量资源,这可能会直接影响在同一应用程序池中运行的其他站点。
通过在逻辑组(应用程序池)中对站点进行分组(和隔离),您可以更好地管理站点的行为。
HTTP.SYS是一个内核模式驱动程序堆栈,它是Windows子系统的一部分。它在内核模式下提供对HTTP协议的管理( IIS6之前的版本在用户模式下使用winsock )。当HTTP.SYS在内核级别运行时,如果某个工作进程失败,请求可以排队,然后转发到一个新的工作进程,该新的工作进程将启动。
当您在IIS6中创建站点时,它会向HTTP.SYS注册该站点,然后它可以将传入的请求路由到适当的工作进程。
发布于 2011-08-17 15:36:39
Appdomain是关于共享数据http://msdn.microsoft.com/en-us/library/system.appdomain.aspx的,在IIS6中,您可以将多个应用程序附加到一个应用程序池中。如果您在同一应用程序池中有两个应用程序,并且其中一个应用程序不断崩溃,则会影响另一个应用程序池,并且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
https://stackoverflow.com/questions/7075032
复制相似问题