如何在IIS中实现应用程序池?
答案 0 :(得分:26)
1。每个应用程序池是否等同于.Net AppDomain?
不,应用程序池可能有多个AppDomain。每个AppDomain代表一个正在运行的ASP.NET应用程序。许多ASP.NET应用程序可能属于单个应用程序池。
2。或者它等同于.Net流程?
不完全。见下文。
3。应用程序池如何与IIS w3wp.exe相关?
应用程序池表示可能托管可能更多数量的应用程序的有限数量的工作进程。这类似于SQL连接池如何在任意数量的请求之间共享有限数量的连接。
默认情况下,应用程序池会获得一个工作进程(w3wp.exe
),除非您知道自己在做什么,否则通常最好单独保留此设置。仍然可以将应用程序池配置为使用任意数量的进程。
工作进程实际上是在这里汇集的资源,而不是AppDomain。总是会有与ASP.NET应用程序相同数量的AppDomain(除非一个正在关闭,或者一个应用程序创建自己的AppDomain),但工作进程的数量是独立的;应用程序池为您提供特定数量的工作进程来处理特定数量的AppDomain的请求。
应用程序池中的工作进程数设置为1(默认值)意味着池中的所有应用程序/ AppDomain共享相同的工作进程。
答案 1 :(得分:5)
以这种方式说这是过于简单化,但考虑它的最佳方式是AppPool是一个AppDomains池。所有这些AppDomain都在一个工作进程(w3wp.exe
)内运行。
答案 2 :(得分:3)
另一个重要的事情是Application Security
。
在以前的IIS版本中,工作进程以 LocalSystem 运行,这是一个在服务器上具有系统管理员权限的强大帐户。由于LocalSystem几乎可以访问操作系统上的所有资源,因此会产生安全隐患。在 IIS 6.0(引入的应用程序池)中,可以在应用程序池级别设置工作进程的标识。应用程序池的标识是运行应用程序池的工作进程的帐户。默认情况下,应用程序池在 NetworkService 帐户下运行,该帐户具有低级别用户访问权限。
通过使用NetworkService等权限很低的帐户运行工作进程,可以减少安全漏洞。但是,通过使用IIS管理器,可以配置将应用程序池作为以下任何预定义帐户运行:
NetworkService
LocalSystem
LocalService
答案 3 :(得分:1)
我知道这是一个老帖子,但我认为这是一个很好的口音:
1个应用程序池(IIS)= 1个请求队列(在HTTP.SYS中)+ 1个或多个w3wp.exe实例。