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

What is Application Pool in IIS and Asp.Net?

本问题已经有最佳答案,请猛点这里访问。

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

  • 每个应用程序池是否等同于.NET AppDomain?
  • 或者它等效于.NET进程?
  • 应用程序池如何与IIS W3wp.exe相关?

  • 1 . Is each application pool equivalent to a .Net AppDomain?

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

    2 . Or it is a equivalent to a .Net process?

    不完全是这样。见下文。

    3 . How is Application pool related to IIS w3wp.exe?

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

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

    工作进程实际上是在这里汇集的资源,而不是AppDomain。始终会有与ASP.NET应用程序相同数量的AppDomain(除非其中一个正在关闭,或应用程序创建自己的AppDomain),但工作进程的数量是独立的;应用程序池提供特定数量的工作进程来处理特定数量的AppDoma的请求惯性导航系统。

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


    这样说太简单了,但最好的思考方式是AppPool是一个AppDomain池。所有这些AppDomain都在一个工作进程(w3wp.exe中)内运行。


    另一件重要的事情是Application Security

    在早期版本的IIS中,工作进程以localsystem运行,这是一个在服务器上具有系统管理员权限的强大帐户。因为LocalSystem几乎可以访问操作系统上的所有资源,这就导致了安全隐患。在IIS6.0(引入了应用程序池)中,可以在应用程序池级别设置工作进程的标识。应用程序池的标识是应用程序池的工作进程在其下运行的帐户。默认情况下,应用程序池在具有低级用户访问权限的NetworkService帐户下运行。

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

    1
    2
    3
    NetworkService
    LocalSystem
    LocalService

    我知道这是一篇旧文章,但我认为这是一个很好的口音:

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