什么是IIS和Asp.Net中的应用程序池?

23

应用程序池在IIS中是如何实现的?

  1. 每个应用程序池是否相当于一个.Net AppDomain?
  2. 还是它相当于一个.Net进程?
  3. 应用程序池与IIS w3wp.exe有什么关系?
4个回答

25

1 . 每个应用程序池是否等同于一个.Net AppDomain?

不是的,一个应用程序池可以有多个AppDomains。每个AppDomain代表一个正在运行的ASP.NET应用程序。许多ASP.NET应用程序可能属于单个应用程序池。

2 . 还是等同于.Net进程?

不完全相同,详见下文。

3 . 应用程序池与IIS w3wp.exe有何关系?

应用程序池表示可容纳大量应用程序的有限数量的工作进程。这类似于SQL连接池在任意数量请求之间共享有限数量连接。

默认情况下,应用程序池获得一个工作进程(w3wp.exe),最好保持这个设置不变,除非您知道自己在做什么。但是,应用程序池可以配置为使用任意数量的进程。

这里实际上被汇集的资源是工作进程,而不是AppDomain。除非应用程序处于关闭中或应用程序创建了自己的AppDomains,否则总会有与ASP.NET应用程序数量相同的AppDomains;但是工作进程的数量是独立的,应用程序池为特定数量的AppDomains处理请求提供了特定数量的工作进程。

在应用程序池中为工作进程数量设置1(默认值)意味着所有应用程序/AppDomain共享同一个工作进程。


5

这样说可能过于简化,但最好的思考方式是将AppPool视为AppDomains的池。所有这些AppDomains都在单个工作进程(w3wp.exe)中运行。


谢谢Andrew。你能否补充一下,应用程序池是什么时候创建的?将Web应用程序放在池中有什么好处? - shahkalpesh
@shahkalpesh:在IIS6+中,我认为不能有一个不在应用程序池中的应用程序。您可能会发现这个链接有帮助(http://weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx)。 - Roman

2

另一个需要提到的重要事项是应用程序安全性

在之前的IIS版本中,工作进程以LocalSystem身份运行,这是一个强大的帐户,在服务器上具有系统管理员特权。因为LocalSystem几乎可以访问操作系统上的所有资源,所以这会导致安全问题。在IIS 6.0(引入应用程序池)中,可以在应用程序池级别设置工作进程的标识。应用程序池的标识是应用程序池工作进程运行的帐户。默认情况下,应用程序池使用NetworkService帐户运行,该帐户具有低级用户访问权限。

通过使用非常低权限的帐户(例如NetworkService)来运行工作进程,可以减少安全漏洞。但是,通过使用IIS管理器,可以配置应用程序池以运行以下任何预定义帐户之一:

NetworkService
LocalSystem
LocalService

1

我知道这是一个旧帖子,但我认为这是一个好的口音:

1个应用程序池(IIS)= 1个请求队列(在HTTP.SYS中)+ 1个或多个w3wp.exe实例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接