VS2010的SP1引入了IIS Express支持,這是值得高興的事情……因為自帶的ASP.net Development Server只能單站點運行、不能設置虛擬目錄、多少個項目就會出現多少個等等等等巴拉巴拉,我對它恨之入骨,總之,很長一段時間內我進行開發實際上都是用IIS的。但是用IIS有不方便的地方,就是必須開啟IIS Admin服務,而且VS必須以管理員模式運行才能正常打開項目和調試。每次都以管理員模式啟動已經比較麻煩了,比較郁悶的是,以管理員模式啟動的vs處於特權狀態,所以程序間的文件拖放就失效了……換句話說,如果我想從資源管理器中直接拖一個文件到vs中打開,就辦不到了。
所以對IIS Express一直是比較期待的。
本文包含內容:
- 關於IIS Express的介紹
- IIS Express的配置文件中網站的配置
- 如何在VS2010中配置IIS Express
- 如何避免需要管理員身份啟動IIS Express
- IIS Express比較有用的命令行參數
1.關於IIS Express的介紹
Scottgu 在 這篇文章 中介紹了伴隨著ASP.net MVC 3而來的新東西,其中就包含IIS Express 7.5,介紹如下:
- 輕量,易於安裝,安裝包不到5M;
- 從VS中啟動、調試應用程序不需要管理員身份;
- 帶有完整的WEB服務器功能支持——支持SSL、URL回寫以及其它IIS7.x的模塊
- 和IIS7.x完全一致的web.config配置模型
- 可以和IIS、ASP.net Development Server 同時安裝,沒有任何沖突
- 支持XP及更高的操作系統,在所有的系統上都提供IIS7.x一致的開發功能
關於IIS Express常規的安裝、使用,相關介紹的文章比較多,我就不多說了。這裡說說沒怎麼見人提的地方。
2.關於配置文件
默認情況下IIS Express使用的配置文件位於“我的文檔”中,路徑如下:“我的文檔\IIS Express\Config”。其中,applicationhost.config 是核心的配置文件,它用於承載站點的定義、應用程序和應用程序池以及整個WEB服務器的配置。由於是放在我的文檔中的,所以修改它不需要管理員權限,意味著可以直接修改。在修改後,下次啟動應用程序就會起效。
在applicationhost.config內容中,<system.applicationHost> 用於定義網站和應用程序池。默認情況下,其內容如下:
- <system.applicationHost>
-
- <applicationPools>
- <add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
- <add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
- <add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
- <add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
- <add name="UnmanagedClassicAppPool" managedRuntimeVersion="" managedPipelineMode="Classic" autoStart="true" />
- <applicationPoolDefaults managedRuntimeLoader="v4.0">
- <processModel />
- </applicationPoolDefaults>
- </applicationPools>
-
- <!--
-
- The <listenerAdapters> section defines the protocols with which the
- Windows Process Activation Service (WAS) binds.
-
- -->
- <listenerAdapters>
- <add name="http" />
- </listenerAdapters>
-
- <sites>
- <site name="WebSite1" id="1" serverAutoStart="true">
- <application path="/">
- <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
- </application>
- <bindings>
- <binding protocol="http" bindingInformation=":8080:localhost" />
- </bindings>
- </site>
- <applicationDefaults applicationPool="Clr4IntegratedAppPool" />
- <virtualDirectoryDefaults allowSubDirConfig="true" />
- </sites>
-
- <webLimits />
-
- </system.applicationHost>
IIS Express 內建了五個應用程序池,分別對應.Net 2.0/4.0的集成/經典模式、以及一個非托管程序池。默認的程序池版本有 <spplicationPoolDefaults> 節來配置。<sites> 節用於配置網站。網站的默認應用程序池和虛擬目錄默認配置由 <applicationDefaults> 和 <virtualDirectoryDefaults> 節點配置。以上的節點默認情況下我們並不需要太多關注,因為大多數情況下我們需要關注的只有 <sites> 下的 <site> 節點,這裡保存了網站、應用程序的定義,才是我們需要真正關心的。
①.每個 <site> 就是一個網站。
這和IIS中的網站是一樣的概念。serverAutoStart 設置了是否隨著 IIS Express的啟動而自動啟動。如果設置為true,那麼每次 IIS Express 啟動都會自動加載(如果沒有指定網站的話),否則只有以指定特定網站的模式運行時才會加載。
使用IIS Express加載特定網站的語法是: IISExpress.exe /site:<站點名>
②.<site> 下的<bindings>設置了這個站點的綁定信息。
節點下的每個<binding>都是一個端口綁定信息。典型的綁定配置如下:<binding protocol="http" bindingInformation="*:8080:localhost" />
protocol 指定了綁定的協議類型(IIS Express內建了 HTTP 和 HTTPS兩種協議支持),而“*:8080:localhost”則指定的綁定的具體信息,它有三個部分組成:“綁定的IP:端口:主機名”。默認情況下,綁定到任何本地IP、非保留端口、綁定到localhost。注意這個localhost,有講究,特定情況下可能會導致你很困惑,請參考本文後面的內容。
③.<application> 這個節設置了網站的應用程序
每個網站都需要至少一個映射路徑為“/”應用程序(它映射到根目錄)。除此之外,你可以繼續添加並行的不同路徑的 <application> ,這就類似於IIS中的網站裡配置的應用程序。
例如,在FishSite這個網站中,我需要添加一個單獨的應用程序,映射到根目錄下的fish目錄,那麼我就可以這樣配置:
- <site name="FishSite" id="2">
- <application path="/" applicationPool="Clr2IntegratedAppPool">
- <virtualDirectory path="/" physicalPath="<網站的根目錄>" />
- </application>
- <application path="/fish" applicationPool="Clr2IntegratedAppPool">
- <virtualDirectory path="/" physicalPath="<此應用程序的根目錄>" />
- <virtualDirectory path="/content/" physicalPath="</fish/content/ 目錄對應的虛擬目錄>" />
- </application>
- <bindings>
- <binding protocol="http" bindingInformation="*:5000:localhost" />
- </bindings>
- </site>
在<site>中,只有 path="/" 這個應用程序是必須的(不能缺少),其它都是可以任意添加的。
④.<virtualDirectory> 設置了目錄的映射信息
參見上面展示的代碼。在每個<application>節下,必須至少存在一個 path="/" 的 virtualDirectory,它代表了這個目錄映射的位置。除此之外,可以手動添加多個映射的路徑不同的虛擬目錄。