ASP.NET和应用程序隔离

时间:2010-05-19 14:40:51

标签: asp.net iis iis-6 virtual-directory application-pool

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

2 个答案:

答案 0 :(得分:2)

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

虚拟目录不自己隔离内存或资源。这也有其他含义。例如,通过在同一应用程序池中的另一个应用程序中设置静态变量,可以影响一个应用程序中的静态变量。

在IIS 6中,应用程序池的重点非常简单:隔离应用程序,以便一次崩溃不会导致其他崩溃。在IIS 7中,这仍然是主要目的,但there is a little more to it

编辑:澄清一下:每个应用程序池都是它自己的“工作进程”,一次崩溃不会影响其他应用程序池。每个虚拟目录就是这样的:一种使IIS像在那个地方有一个目录一样的方式。当您创建一个与其指向的文件夹具有相同名称和位置的虚拟目录时,默认情况下该不执行任何操作。您可以使用虚拟目录的原因有多种,除了按照您的意愿制作URL:您可以使用它们来保证安全。您可以使用它们将调用放入特定的应用程序池中,正如我们一直在讨论的那样。

人们经常将虚拟目录与Web应用程序等同起来,因为通常是,您希望通过Web应用程序使用虚拟目录的配置功能。<​​/ p>

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

答案 1 :(得分:1)

不同的虚拟目录可以有不同的应用程序池。如果他们共享相同的应用程序池并且爆炸,则整个应用程序崩溃。如果为虚拟目录配置了不同的应用程序池,则它们将被隔离。

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