这里说的不是如何解决路径重写或者如何配置的问题,而是阐述一下站点(site),应用程序(application)和虚拟目录 (virtual directory)概念与做用,已及这三个东西在IIS6与IIS7中的异同。由于站点,应用程序和虚拟目录是咱们在IIS上架设网站时确定会遇到的, 但它们的概念又是那么的含糊(至少对我来讲)。我在网上找了一些资料来学习,其中一个写的比较详细的是:Understanding Sites, Applications, and Virtual Directories on IIS 7 而这里则只是做一些总结。web
在IIS6中,应用程序和虚拟目录的几率是有点含糊的,而在IIS7以上,这三者则被规范化起来,在IIS架构层面上明确了三者的层次关系。服务器
在 IIS6中,虽然存在virtual directory 和application两个概念,并且看上去这两个概念是独立的,可是在IIS6中一个application其实就是一个虚拟目录,只不过一个 application在medabase中能够对AppFriendlyName, AppRoot, AppIsolated, AppPoolID这几个属性进行设置而已。但IIS6中的site则是例外,由于就算不对那几个属性进行设置,它也不会被视为虚拟目录,而是被视为一个 application。网络
而在IIS7或以上(但目前我能接触到的最高版本的IIS就是win7中的 IIS7.5),site,application和virtual directory的概念已经被规范起来,已经不像IIS6那样含糊。在IIS7+中,他们是独立的概念,而且在IIS组织架构上呈现出一种层次关系:一 个site中能够有一个或者多个application,一个application中能够有一个或者多个virtual directory,而一个virtual directory则对应着一个物理路径。一个site默认会至少有一个application,称为根应用程序(root application)或者默认应用程序(default application),而一个application至少有一个vitual director,称为根虚拟目录(root virtual directory)来看一下个人IIS7.5上一个site的结构和这个site在IIS的ApplicationHost.config文件是怎样对 应的。:架构
注:ApplicationHost.config文件在目录:\%windir%\system\inetsrv\config目录下app
我 的IIS中只有一个ID为13的site,site下有两个application分别为cd和dh。从右边的config中能够看到,其实除了cd和 dh两个application外,site自己也是一个application,也就是root application。同时也能够看到,每一个application下有一个 virtual directory,也就是root virtual directory,充当着这个application的根目录,并映射到该application所在的物理路径。固然,每一个application可 以有多个virtual directory,这些virtual directory能够对应其余的物理路径(譬如dh application下的image虚拟目录的物理路径可使网络中另一台计算机的某个共享目录)asp.net
在IIS7+中(其实IIS6也是同样,但细节有不一样,这里有点含糊,还待深刻研究), 一个site运行在一个application pool中,而一个application pool默认有一个w3wp.exe(工做者进程),site中的application运行在这个w3wp.exe进程中的app domain(应用程序域)中(不一样application运行在不一样app domain中,以进行隔离),而同一个application的virtual directory运行在相同的app domain下。但site下的application不必定必须跟这个site运行在相同的application pool,application能够指定一个跟这个application的site不一样的application pool。dom
接下来独立的阐述一下site,application和virtual derectorytcp
站点(site)
学习
一 个站点包含一个或者多个application和一个或者多个虚拟目录。咱们能够经过对site进行不一样的绑定以用不一样的方式对site进行访问。这里的 “绑定”包含两个方面,一个是绑定的协议,另外一个就是绑定信息。绑定协议用于指定经过什么协议去和该site进行通讯。IIS7+中,对一个site能够 的协议包括http,https,net.tcp,net.pipe,net.msmq,net.formatname这几种。固然,对于一个网站,最常 用的就是http和https。而绑定信息则定义了通讯的基本信息,好比IP地址,通讯端口,站点的一些头部信息(header)。正如前面说到的,能够 为一个site添加多种绑定,只须要在IIS中对某个site进行“编辑绑定”操做便可。网站
应用程序(application)
application 是为一个site提供功能的基本单位,例如一个购物站点能够包含两个application:一个负责呈现商品,给消费者去选购,并放入购物车,而另外一个 appliation则能够专一于用户的登陆以及支付业务。当一个site只有一个application时候,这个application也就是 root application或者default application,表明着这个site自己,在applicationHost中的“<application path="/" >”里面,path="/"就表示该application是该site的根应用程序。
application运行在IIS中的 应用程序池中,以app domain隔离。application能够运行在IIS中任意一个应用程序池中,而不必定要运行在这个application所在的site的应用程 序池中,但对于使用托管代码开发的application(例如一个asp.net网站)必须运行在运行在.NET之上的应用程序池。能够在IIS中对应 用程序池进行设置,包括设置.NET版本(或者是非托管环境),以及设置管道模式等操做。
虚拟目录(virtual directory)
一 个虚拟目录就是一个site(其实是application)上的对一个本地计算机或者远程计算机上一个物理目录路径的一个映射名称。一个 application能够拥有至少一个虚拟目录。在applicationHost中的“<virtualDirectorypath="/" >”里面,path="/"就表示该virtual directory是该application(或者该site)的根虚拟目录。
当 设置一个虚拟路径映射到一个物理路径后,这个物理路径中的目录名称就会变成这个site(或者application)的url的一部分。一个 site(application)能够拥有多个虚拟目录,例如,一个site中的虚拟目录"www.site.com/script"映射到本地计算机 上该站点中script文件夹,而"www.site.com/image"则映射到远程图片服务器上的一个“image”文件夹。IIS7+利用虚拟目 录映射的目录路径目录下的web.config配置文件来管理该虚拟目录及其子目录(能够在applicationHost.config的 sites/virtualDirectoryDefaults节中使用allowSubDirConfig="false"属性来关闭 web.config对子目录的控制。)