在部署我的网站时,我发现我可以将文件夹转换为虚拟文件夹或Web应用程序,我对这两个概念完全感到困惑。
为什么有两种不同的类型?
每个人的目的是什么?
答案 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)仍然完全不受影响。