跳到主要內容區塊

ntuccepaper2019

技術論壇

ASP.NET網站部署與先行編譯
  • 卷期:v0014
  • 出版日期:2010-09-20

作者:林淑芬 / 臺灣大學計算機及資訊網路中心教學研究組程式設計師


Web伺服器以Windows作業系統而言,就是指IIS(Internet Information Service)。在這裡我們先說明如何安裝和設定IIS伺服器,接著說明簡易部署的方式,最後再介紹先行編譯的功能。教您簡單如何利用ASP.NET部署及編譯一個網站
 

我們使用Visual Studio 2008建立ASP.NET網站時,一般都是採用檔案系統的方式建立網站專案,在開發過程中先以瀏覽器經由虛擬網站瀏覽開發中的ASP.NET網頁,等全部網頁都開發、測試完成後,再將網站的內容傳送到實際運作的Web伺服器上,這個動作稱之為「部署」。Web伺服器以Windows作業系統而言,就是指IIS(Internet Information Service)。在這裡我們先說明如何安裝和設定IIS伺服器,接著說明簡易部署的方式,最後再介紹先行編譯的功能。

 

一. 安裝和設定IIS伺服器Windows作業系統內建IIS伺服器,如果尚未安裝,可從Win XP「控制台」選擇「新增或移除程式」:

接著選擇IIS,將IIS安裝進來即可。

接下來再到「控制台」選擇「系統管理工具」,再選擇「Internet Information Service」,看看其基本的網站設定。

在視窗左邊選定「預設的網站」,按滑鼠右鍵,選「內容」,先看「主目錄」標籤,一般預設的網站根目錄是放在C:\Inetpub\wwwroot資料夾。

再檢查「文件」標籤,加上ASP.NET的預設文件名稱Default.aspx。預設文件是指當輸入的網址沒有加上網頁名稱時,預設會自動去找的網頁名稱順序。

最後再去「網站」標籤,設定Web伺服器的IP位址。這樣就完成了IIS的簡易設定。

 

二. 簡易部署ASP.NET網站
如果網站內容還算單純,我們就可以將網站中的整個資料夾,直接複製或上傳到 IIS的 C:\Inetpub\wwwroot\ 的資料夾下成為新的子資料夾。但在複製完成後,還必須在 IIS 中將複製過去的子資料夾設定為「虛擬目錄」或「建立Web 應用程式」。這是因為我們設計的是一個「網站」,但複製或上傳到IIS子資料夾下後,此網站變成只是別的網站中的一個目錄,導致網頁無法執行。

首先我們說明建立「虛擬目錄」的步驟,先取好虛擬目錄的名稱,再指定實體資料夾路徑即可。

這時可看到虛擬目錄資料夾的圖示以改變,或者可將其下的子資料夾設為Web應用程式,只需選擇其下的子資料夾,按右鍵選「內容」:

按下「建立」,就可出現應用程式名稱。

不同的圖示表示資料夾已變成Web應用程式了。

如此設定完成後,此資料夾就會被視為是個獨立的網站,下圖的網址中,執行本機虛擬目錄myweb下的子資料夾ch05/ch5-1-1就可以順利執行了。沒有加上網頁名稱就會使用預設的default.aspx。

 

三. 先行編譯再部署
在預設的情況下,在網站部署完成後,某個ASP.NET網頁第一次被要求時,ASP.NET才會立即編譯該網頁。如果資料夾內的網頁很多,網頁內用到的控制項、程式碼較多,則編譯時間會較長,使用者也會等比較久才會看到網頁。

因此,如果我們能預先編譯所有網頁,即可避免這些缺失。由於網頁與相關程式已事先編譯好,第一位使用者進入網站時即可立即執行,因此大幅縮短第一位使用者的等候時間。因為網頁已編譯好,網站上就不需存放原始程式碼,也避免機密資料外流的可能。
先行編譯的工具是在.NET Framework之中,檔案名稱為aspnet_compiler.exe。可以執行『開始 /程式集 /附屬應用程式 /命令提示字元』命令,找到aspnet_compiler.exe:

如果要在部署前先行編譯好,再將編譯好的結果部署到伺服器上,則使用 aspnet_compiler進行編譯時,必須加上-p 參數,指定目前網站原始檔所在的路徑,以及編譯好的結果要存放的路徑,而-v參數後面接的是虛擬目錄名稱,可暫時設定為 /,部署後再自訂虛擬目錄名稱,執行指令如下:aspnet_compiler.exe –v / -p 來源資料夾 目的資料夾

編譯好後,即可到剛剛指定的目的資料夾檢視編譯的成果。編譯好的程式都存在於bin資料夾中。

雖然目的資料夾中仍可看到 .aspx 檔案,但先行編譯時為保護原始碼,aspnet_compiler 已將網頁內容移除。開啟此資料夾中的任一個 .aspx 檔案,都會看到如下的內容:

接著即可將此目的資料夾利用前述的方式,部署到 IIS 伺服器上,並依前述的方式,在 IIS 建立此網站的虛擬目錄或Web 應用程式即完成先行編譯後再進行部署的功能。這樣一來便可在瀏覽器上執行具備固定IP和虛擬目錄的網址。