谁能解释IIS在应用程序池,工作进程和应用程序域之间的区别?另外,他们如何一起工作?我已经阅读了几篇文章,但是仍然有些混乱。
- 是否在IIS中创建的每个网站都成为一个应用程序?
- 每个应用程序都与一个工作进程相关联吗?
- 应用程序域在哪里出现?
Answers:
我试着用其他话对他们说。
在服务器中,您可以有许多同时运行的asp.net站点。每个站点都是一个应用程序域。
您必须为每个分配一个应用程序池。许多应用程序域(站点)可以具有相同的应用程序池,并且由于它们具有相同的应用程序池,因此它们可以在相同的进程和帐户下运行,并且具有相同的池设置。如果此池重新启动,则该池下的所有站点都将重新启动。
现在每个池可以有一个或多个工作进程。每个工作进程都是在您的站点上运行的不同程序,它们具有单独的静态变量,它们具有不同的启动停止调用等。不同的工作进程不会一起通信,并且交换数据的唯一方法是来自公用文件或公用数据库。如果您有一个以上的工作进程,并且其中一个进行长时间的计算,则另一个可以处理互联网呼叫并显示内容。
当您将多个工作进程分配给一个池时,您将创建一个称为Web的花园,并且如果一台计算机是一台处理机,则您的站点就像是从多台计算机上运行。
每个工作进程可以具有多个线程。
更多工作进程如何影响您:
当您拥有一个工作进程时,一切都变得更加简单,在您的应用程序中,所有静态变量都相同,然后使用lock
来同步它们。
当您分配多个工作进程时,您仍将继续使用lock
静态变量,静态变量在站点的多次运行中并没有什么不同,并且如果您有一些公共资源(例如,在磁盘上创建缩略图)那么您需要与同步您的工作进程Mutex
。
还有一张便条。听起来,当您执行更多工作进程时,您可能会拥有更流畅的异步页面加载。asp.net的会话处理程序存在一个小问题,该问题将整个过程锁定为页面加载-这是好的,并且不好,取决于您是否知道并处理它-或对其进行更改。
因此,让我们只讨论一个有很多工作流程的站点。在这里,您面临着需要与同步通用资源更改的问题Mutex
。但是使用会话的页面/处理程序不是异步的,因为会话会锁定它们。这是很好的开始,因为您避免自己进行多点同步。
关于此主题的一些问题:
在共享同一会话时处理另一个Web应用程序时,Web应用程序被阻止,
对Web服务的jQuery Ajax调用似乎是同步的
ASP.NET Server不会异步处理页面
完全替换ASP.Net的会话
现在,此会话锁定不会影响其他站点。
在不同站点之间,工作量更大的过程可以帮助一个站点避免长时间运行的另一个站点。
同样,在不同站点之间,更多的池也可以提供帮助,因为每个池至少有一个工作进程,但是使用进程浏览器自己记住并查看,每个工作进程占用更多的计算机内存,以及一台具有16G内存的大服务器一台SQL Server不能有太多不同的工作过程-例如,在具有100个共享站点的服务器上,您不能有100个不同的池。
是的,尽管并非每个应用程序都是一个网站。您可以将应用程序嵌套在网站下。
是的,每个应用程序必须有一个工作进程(应用程序池),尽管一个应用程序池可以为多个应用程序提供服务。可以分发单个Web应用程序(Web花园/农场),这意味着它将在多个进程中运行。
每个进程都将在其自己的应用程序域中运行(每个应用程序池都是一个单独的应用程序域)。
从MSDN。
应用程序是网站根级别的一组内容,或者是网站根目录下单独文件夹中的一组内容。
应用程序池定义一组由一个或多个工作进程组成的组,这些进程配置有通用设置,这些设置可为分配给该应用程序池的一个或多个应用程序提供请求。因为应用程序池允许一组Web应用程序共享一个或多个配置类似的工作进程,所以它们提供了一种方便的方法来将一组Web应用程序与服务器计算机上的其他Web应用程序隔离。流程边界将每个工作流程分开;因此,一个应用程序池中的应用程序问题不会影响其他应用程序池中的网站或应用程序。应用程序池显着提高了Web基础结构的可靠性和可管理性。
从源链接:-http://weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx
应用程序是一个IIS术语,但它是ASP.NET所利用的术语。本质上,它创建了一个沙箱或一组边界以将不同的站点或站点的一部分与其他站点分开。
AppDomain是.NET术语。(在IIS7中,AppDomains在IIS中扮演着更大的角色,但是在大多数情况下,它是一个ASP.NET术语)
工作进程用于处理Web应用程序的请求。