The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

ASP.NET 開發人員應使用 IIS Express 進行開發與測試

IIS 7.5 Express 是一套針對 ASP.NET 開發人員特別設計的 IIS 7.5 版本,我發現有許多人並不知道他的存在,甚至於不知道何時要使用他,就覺得這只是另一個提供 ASP.NET 執行環境的程式而已,在 Visual Studio 2010/2008/2005 內建的 ASP.NET 開發伺服器 (Cassini) 已經使用很久,用來作為開發測試之用也沒什麼問題,有必要將開發環境的伺服器修改成使用 IIS 7.5 Express 來執行嗎?今天我就提出幾個重要的觀點。

首先,IIS 6 與 IIS 7 在其架構上做出了許多變更,尤其是在要求管線 (request pipeline) 的不同之處,以下列出兩張要求管線的圖示:

IIS 6.0 的要求管線

IIS 7.0 的要求管線

上圖參考至:IIS 6 and IIS 7 - How different are they? 此文章對此架構有詳細說明,另外也建議參考以下文章以進行全盤理解:

如果不講那麼多技術原理,對一般開發人員來說,最明顯的差異就是 ASP.NET 網站根目錄下的 Web.config 檔案,在該檔案中有兩個宣告 HttpModules 與 HttpHandlers 的地方,分別圖示如下:

下圖的 <httpHandlers> 與 <httpModules> 位於 <system.web> 區段下,主要在 IIS 5 / IIS 6 架構下使用

image

而下圖的 <modules> 與 <handlers> 位於 <system.webServer> 區段下,主要是給 IIS 7 / IIS 7.5 架構下會用到,這兩個定義幾乎一樣(當然有些屬性不太一樣),但是卻需要定義兩遍!

image

如果你的網站專案使用 Visual Studio 內建的 ASP.NET 開發伺服器 來執行與測試,那麼你在 <system.webServer> 區段下的所有定義與設定將完全無法測試到,因為 ASP.NET 開發伺服器 完全是以 IIS 6.0 的架構下去執行的,要是你的網站未來的部署環境是 IIS 7.0 / IIS 7.5 的話,那麼這樣的開發環境就不是十分理想。

像我們公司在 IIS Express 尚未推出之前,每一位開發人員都要在 Windows Vista / Windows 7 的本機加裝 IIS 7 並且要為每一個開發中的網站專案特別建立一個站台,人多的時候每個人都要特別教一下才可以將環境完整設定好,可以說是挺不方便的。

但是 IIS Express 又沒有管理界面,使用上其實也不方便,不熟悉 IIS 架構的開發人員使用起來也是會很辛苦的,還好 Visual Studio 2010 SP1 已經正式將 IIS Express 整合進 Visual Studio 2010,也代表著你在 Visual Studio 2010 裡面的網站專案都可以方便的指定使用 IIS Express 來執行網站,操作上已經簡單的無法再簡單。

如下圖就是設定某專案使用 IIS Express 來當成開發伺服器:

第一次使用的時候,由於本機並沒有設定過 IIS Express 的站台,所以會問你要不要裝載上去,回答「是」就對了。如果你的開發團隊有使用到版本控管,當其他成員更新檔案後第一次開啟專案也會出現這個視窗,只要按下「是」就會自動安裝完成,不過前提是大家都要先升級 Visual Studio 2010 版本到 SP1 以及都要額外安裝 IIS 7.5 Express 才行。(備註:這兩個都可以透過 Web PI 來安裝

 

裝好之後還會提示你安裝好的網址與埠號:

不僅僅是 Web 應用程式專案可以用,連 Web 網站專案也都可以改用 IIS Express 當成開發伺服器之用,省去所有 IIS 站台安裝、設定的所有繁複流程。

如果你想將測試的網站部署在虛擬目錄下,也可以在網站專案的專案屬性中修改「專案 URL」的路徑,最後按下「建立虛擬目錄」即可,算是整合的非常好用了。

你可能會問這個 IIS Express 到底跟完整版的 IIS 7.x 有什麼差異呢?我的回答是:幾乎一模一樣,僅差別在 IIS Express 是一個沒有管理界面的 IIS 7 而已!所有在 IIS 7 中能做到的地方,在 IIS Express 一樣都做的到,差別僅在於你要自行設定這些設定而已 (備註:大部分站台設定修改 Web.config 即可,其他設定可以參考 我的文件\IISExpress\config\applicationhost.config 這個設定檔)。

正式環境用 IIS 7 的網站,可以慢慢改成用 IIS Express 來執行了,以我個人的轉移經驗來說,幾乎沒遇到什麼問題,與 IIS 7 相容性非常之高。

相關連結