在IIS 7.x环境下,Web App和虚拟文件夹有什么不同?

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

  • 为什么有两种不同的types?

  • 每个的目的是什么?

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

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

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

你可以用Application来做的另一件事是指定一个不同的Application Pool来运行。 例如,您的根/应用程序可能包含ASP.NET 2.0应用程序,并在为.NET 2.0configuration的池中运行。 但是,您可能需要运行使用ASP.NET 4.0编写的博客或论坛应用程序。 现在因为不能在同一个应用程序池中混合使用ASP.NET运行时版本,所以您可以指定专门用于ASP.NET 4.0应用程序的备用应用程序池。

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

如果你对IIS7虚拟目录和应用程序的底层机制感兴趣,那么看看这个答案,我回来了:

使用ServerManager在应用程序内创build应用程序

为Kev提供的信息添加信息详细信息 – 默认情况下,所有虚拟目录都在名为DefaultAppPool的预定义应用程序池下运行。 每当在Windows中启用此function时, DefaultAppPool默认使用IIS。 对于WebApp,您始终可以创build新的/新的appPool,并在新创build的appPool中运行您的webApp。 这些appPools为您提供物理/单独的进程空间(以工作进程的forms),借助于它,IIS可以提供​​会话状态,应用程序状态等服务,以便在WebApp定义自己的appPool时提供服务。 每当你的webApp的appPool崩溃时,其他的webApps(使用他们自己定制的appPool)或者虚拟目录(使用DefaultAppPool appPool)保持完全不受影响。