這裏說的不是如何解決路徑重寫或者如何配置的問題,而是闡述一下站點(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對子目錄的控制。)