在IIS 7.x的上下文中,Web应用程序和虚拟文件夹之间有什么区别?

时间:2011-03-31 13:07:19

标签: iis

在部署我的网站时,我发现我可以将文件夹转换为虚拟文件夹或Web应用程序,我对这两个概念完全感到困惑。

  • 为什么有两种不同的类型?

  • 每个人的目的是什么?

2 个答案:

答案 0 :(得分:82)

虚拟文件夹或虚拟目录只是指向服务器某处的物理文件夹的链接。此文件夹成为网站结构的一部分,您可以使用URL路径部分中的虚拟目录。在虚拟目录中执行的代码将在与其父级相同的“应用程序”中执行。

应用程序是在“文件夹”内运行的代码具有自己的会话状态和应用程序状态的地方。它实际上是一个位于根应用程序下的新独立应用程序。

例如,如果您要将ASP.NET应用程序部署到具有名为/myapp的Application文件夹的站点中,那么该应用程序将拥有自己的应用程序域,会话状态,应用程序状态与另一个ASP完全分离在/中运行的.NET应用程序。例如:如果您在根应用程序中设置了应用程序值Application["Thing"] = 123,然后在/myapp中使用不同的值,那么根目录中的Application["Thing"]将不会被分配覆盖在/myapp

您可以使用Application执行的另一项操作是指定要在其下运行的其他应用程序池。例如,您的根/应用程序可能包含ASP.NET 2.0应用程序,并在为.NET 2.0配置的池中运行。但是,您可能希望运行用ASP.NET 4.0编写的博客或论坛应用程序。现在,因为您无法在同一个应用程序池中混合使用ASP.NET运行时版本,所以可以指定专门用于ASP.NET 4.0应用程序的备用应用程序池。

应用程序也可以像虚拟目录一样运行,您可以将应用程序文件夹指向服务器上其他位置的物理文件夹。

如果您对IIS7上的虚拟目录和应用程序的基础机制感兴趣,那么请看一下我发布的这个答案:

  

Using ServerManager to create Application within Application

答案 1 :(得分:1)

为Kev非常好地提到的信息添加信息细节 - 默认情况下,所有虚拟目录都在名为DefaultAppPool的预定义应用程序池下运行。每当您在Windows中启用此功能时,DefaultAppPool默认随IIS一起提供。对于WebApp,您始终可以创建新的/新的appPools并在新创建的appPool中运行webApp。这些appPools为您提供物理/单独的进程空间(以工作进程的形式),借助它,IIS可以在WebApp中定义自己的appPool时,将会话状态,应用程序状态等服务提供给webApp。每当您的webApp的appPool崩溃时,其他webApps(使用他们自己的自定义appPool)或虚拟目录(使用DefaultAppPool appPool)仍然完全不受影响。