1

使用 IIS 6,应用程序隔离是否基于应用程序池发生?如果是这样,当一个应用程序池中有多个虚拟目录时会发生什么?它们是否都共享相同的内存,如果一个虚拟目录崩溃,所有其他应用程序也会崩溃?

4

2 回答 2

2

如果一个虚拟目录中的功能崩溃,是的,它可能会崩溃或损害同一应用程序池中的其他应用程序,包括其他虚拟目录中的应用程序。通过将它们放入单独的应用程序池来保护您的应用程序。

虚拟目录本身并不隔离内存或资源。这也有其他含义。例如,您在一个应用程序中的静态变量可能会受到在同一应用程序池中的另一个应用程序中设置静态变量的影响。

在 IIS 6 中,应用程序池的意义非常简单:隔离应用程序,以便一个崩溃不会导致其他应用程序崩溃。在 IIS 7 中,这仍然是主要目的,但还有更多内容

编辑:澄清:每个应用程序池都是它自己的“工作进程”,一个崩溃不会伤害其他应用程序池。每个虚拟目录就是这样:一种使 IIS 像在那个地方有一个目录一样工作的方法。当您创建一个与它指向的文件夹具有相同名称和位置的虚拟目录时,默认情况下它并没有真正做任何事情。您可以出于多种原因使用虚拟目录,除了使 URL 随心所欲之外:您可以使用它们来确保安全。正如我们一直在讨论的那样,您可以使用它们将调用放入特定的应用程序池中。

人们经常将虚拟目录等同于 Web 应用程序,因为这通常是您希望通过 Web 应用程序使用虚拟目录配置功能的地方。

会话状态仅在 Web 应用程序中维护,而不是在应用程序池中的所有 Web 应用程序中维护。要存储不同 Web 应用程序之间共享的值,您必须执行其他操作。ASP.NET 缓存、cookie、db 等。将不同的文件夹作为不同的虚拟目录单独的应用程序池放入应用程序中会将它们置于不同的进程中并破坏它们的共享会话状态。

于 2010-05-19T14:44:36.173 回答
1

不同的虚拟目录可以有不同的应用程序池。如果他们共享同一个应用程序池并崩溃,那么整个应用程序就会崩溃。如果您为虚拟目录配置了不同的应用程序池,则它们是隔离的。

请记住,为您的虚拟目录设置不同的应用程序池会产生其他后果,例如无法共享内存会话状态。在这种情况下,您必须使用进程外存储。

于 2010-05-19T14:45:38.107 回答