逐步解說:在 IIS 7.0 中設定 ASP.NET 應用程式
更新:2007 年 11 月
如果 ASP.NET Web 應用程式裝載在 IIS 7.0 中,有多種方式可以為應用程式進行組態設定。包括下列項目:
使用 IIS 管理員。如需詳細資訊,請參閱 HOW TO:開啟 IIS 管理員和 Internet Information Services (IIS) 管理員 (英文)。
直接編輯 Web.config 檔案。您可以在 Visual Studio 或 Visual Web Developer 中直接編輯,或使用文字編輯程式。
使用 IIS 7.0 命令列工具 (Appcmd.exe)。這個公用程式可以讓您指定 IIS 組態設定和 Web 應用程式組態設定。如需詳細資訊,請參閱 IIS 7.0 命令列工具 Tool (英文)。
使用 Windows Management Instrumentation (WMI)。IIS 7.0 WMI 提供者 WebAdministration 命名空間內含的類別及方法,可讓您建立指令碼以進行網站、Web 應用程式及其相關物件與屬性的管理工作。如需詳細資訊,請參閱 IIS 7.0:WMI (英文)。
IIS 7.0 的模組化架構,可讓您指定由哪些模組來組成 Web 伺服器的功能。安裝 IIS 7.0 後,預設許多模組不會啟用。當您使用 ASP.NET 網站時,可能要啟用下列模組:
IIS 6 管理相容性模組可讓 Visual Studio 使用 Metabase 呼叫,以便和 IIS 7.0 設定存放區互動。
Windows 驗證模組可讓您偵錯 Visual Studio 中的 Web 應用程式。
如需詳細資訊,請參閱在具有 IIS 7.0 和 Visual Studio 的 Windows Vista 上執行 Web 應用程式和在具有 IIS 7.0 和 Visual Studio 的 Windows Server 2008 上執行 Web 應用程式。
在本逐步解說中,您要使用 IIS 管理員進行組態設定,然後看這些設定如何反映在 Web 應用程式的 Web.config 檔案中。本逐步解說所說明的工作包括下列各項:
建立自訂 Managed 程式碼模組,並將模組放置在 Web 應用程式的 App_Code 目錄中。
使用 IIS 管理員登錄自訂模組。
使用 IIS 管理員加入自訂 HTTP 標頭。
本逐步解說的重點不在於強調模組的功能。而是解說模組如何整合至要求管線,以及使用 IIS 管理員來設定應用程式會如何影響 Web.config 檔案。
必要條件
若要完成這個逐步解說,您必須要有:
Windows Vista 或 Windows Server 2008 上已安裝並執行 IIS 7.0。
至少一個應用程式集區是在 IIS 7.0 整合模式下執行。
IIS 7.0 中已啟用 [IIS 6 管理相容性] 模組。
Visual Studio 2008。
.NET Framework 3.0 版 (含) 以後版本。
電腦上的系統管理員權限。
用於檢查您的電腦和 Web 伺服器之間的 HTTP 要求和回應的工具,例如 Fiddler 工具,您可以從 Fiddler Web 偵錯 Proxy (英文) 網站下載。
注意事項: Fiddler 是由協力廠商提供的工具,Microsoft 並不支援。
建立自訂 HTTP 模組
首先,您要建立新的網站。
若要建立新的網站
在 Visual Studio 中,建立新的本機 HTTP 網站,名稱為 WalkthroughIIS7。
如需建立本機 IIS 網站的詳細資訊,請參閱逐步解說:在 Visual Web Developer 中建立本機 IIS 網站。
按一下 [開始] 功能表上的 [所有程式],然後依序按一下 [附屬應用程式] 和 [執行]。
在 [開啟] 方塊中,輸入 inetmgr,然後按下 [確定]。
注意事項: 如果已啟用使用者帳戶控制 (UAC),則當您嘗試存取 IIS 管理員時,它可能會顯示訊息。如果是,請按一下 [繼續]。如需詳細資訊,請參閱使用者帳戶控制 (英文)。
確認網站是在整合模式下執行的應用程式集區中。
如需設定 Web 應用程式模式的詳細資訊,請參閱設定應用程式集區的要求處理模式 (英文)。
您現在可以建立自訂 HTTP 模組。
若要建立自訂 HTTP 模組
在 Visual Studio 中,於 [方案總管] 中,以滑鼠右鍵按一下 Web 專案節點,然後按一下 [加入新項目]。
接著會顯示 [加入新項目] 對話方塊。
請在 [Visual Studio 安裝的範本] 之下選取 [類別]。
選取您慣用的程式設計語言。
輸入 CustomModule 做為類別的名稱,然後按一下 [加入]。
如果網站不包含 App_Code 資料夾,就會顯示訊息詢問您是要否將類別放在 App_Code 資料夾中。如果要,請按一下 [是]。
在類別檔案中,移除現有的程式碼然後取代成下列程式碼:
Imports System Imports System.Configuration Imports System.Web Imports System.Web.Security Imports System.Web.UI Public Class CustomModule Implements IHttpModule Public Sub New() ' Constructor End Sub Public Sub Init(ByVal app As HttpApplication) Implements IHttpModule.Init AddHandler app.BeginRequest, AddressOf Me.BeginRequest End Sub Public Sub BeginRequest(ByVal source As Object, ByVal e As EventArgs) Dim app As HttpApplication = CType(source, HttpApplication) Dim cont As HttpContext = app.Context Dim notification As String = cont.CurrentNotification.ToString() Dim postNotification As String = cont.IsPostNotification.ToString() cont.Response.Headers.Set("CustomHeader2", "ASPX, Event = " & notification & _ ", PostNotification = " & postNotification + _ ", DateTime = " & DateTime.Now.ToString()) End Sub Public Sub Dispose() Implements IHttpModule.Dispose End Sub End Class
using System; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; public class CustomModule : IHttpModule { public CustomModule() { // Constructor } public void Init(HttpApplication app) { app.BeginRequest += new EventHandler(BeginRequest); } public void BeginRequest(object source, EventArgs e) { HttpApplication app = (HttpApplication)source; HttpContext cont = app.Context; string notification = cont.CurrentNotification.ToString(); string postNotification = cont.IsPostNotification.ToString(); cont.Response.Headers.Set("CustomHeader2", "ASPX, Event = " + notification + ", PostNotification = " + postNotification + ", DateTime = " + DateTime.Now.ToString()); } public void Dispose() { } }
程式碼會執行下列事項:
定義自訂 Managed 程式碼模組,此模組會實作 IHttpModule 介面。
為 HttpApplication 執行個體的 BeginRequest 事件,定義事件處理常式。事件處理常式會定義要加入至回應標頭集合中的自訂標頭。
將處理常式加入至要求管線,以執行模組的 Init 方法中的通知。
因為這個類別會實作 IHttpModule 介面,所以類別必須實作 Init 方法和 Dispose 方法。這個模組中的 Dispose 方法沒有功能,但是如果有需要,您可以在此實作處置邏輯。
按一下 [建置] 功能表中的 [建置網站],以確定模組中沒有錯誤。
本節的最後一個工作,就是要建立 ASP.NET 及 HTML 頁面,讓您稍後在逐步解說中測試自訂模組。
若要建立 ASP.NET 及 HTML 測試頁面
將名為 ASPXpage.aspx 的新單一檔案 ASP.NET 網頁加入至應用程式的根資料夾。
移除現有的標記,以下列標記取代:
<%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script > </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head > <title>ASPX Module Test Page</title> </head> <body> <form id="form1" > <div> <%= Response.Headers.Get("CustomHeader2").ToString() %> </div> </form> </body> </html>
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script > </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head > <title>ASPX Module Test Page</title> </head> <body> <form id="form1" > <div> <%= Response.Headers.Get("CustomHeader2").ToString() %> </div> </form> </body> </html>
將名為 HTMLPage.htm 的新 HTML 頁面加入至 Web 應用程式的根資料夾。
將下列標記加入至 HTML 頁面。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>HTML Module Test Page</title> </head> <body> <div> HTML page. <br /> </div> </body> </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>HTML Module Test Page</title> </head> <body> <div> HTML page. <br /> </div> </body> </html>
儲存所有變更。
分別執行 ASPXpage.aspx 頁面和 HTMLpage.htm 頁面,以確定可以在瀏覽器中檢視。
注意事項: 維持 Visual Studio 應用程式開啟。您會返回這個應用程式,以確認您要使用 IIS 管理員所做的組態變更。
此時,頁面雖然會執行,但不會叫用自訂模組。您將在下一個程序中,將自訂模組加入至要求管線。
使用 IIS 管理員變更組態
您將在本節使用 IIS 管理員,進行幾項 IIS 應用程式的組態設定。您要登錄自訂模組、加入自訂標頭,以及關閉靜態壓縮。
若要登錄自訂 Managed 程式碼模組
按一下 [開始] 功能表上的 [所有程式],然後依序按一下 [附屬應用程式] 和 [執行]。
在 [開啟] 方塊中,輸入 inetmgr,然後按下 [確定]。
注意事項: 如果已啟用使用者帳戶控制 (UAC),則當您嘗試存取 IIS 管理員時,它可能會顯示訊息。如果是,請按一下 [繼續]。如需詳細資訊,請參閱使用者帳戶控制 (英文)。
在 [連線] 窗格中,展開裝載網站的電腦或伺服器的名稱。
展開 [網站] 資料夾。
選取網站 WalkthroughIIS7。在 Windows Server 2008 中,如果 Web 應用程式是網站的應用程式,請先展開該網站,然後選取 WalkthroughIIS7。
根據預設,IIS 管理員的中央窗格會按區域顯示 Web 伺服器組態選項。WalkthroughIIS7 Web 應用程式有兩個區域:[ASP.NET] 和 [IIS]。
在中央窗格的 [IIS] 區段中,按兩下 [模組] 圖示。
中央窗格中的 [模組] 詳細資訊會顯示目前為 IIS 設定的所有模組。
按一下 [執行] 窗格中的 [新增 Managed 模組]。
[新增 Managed 模組] 對話方塊隨即出現。
在 [名稱] 方塊中輸入 CustomModule。
名稱可以是描述模組的任何文字。在本逐步解說中,您只會使用模組的名稱。
在 [型別] 清單中,選取或輸入模組的 Managed 型別的完整名稱。
CustomModule 型別會顯示在清單中,因為 IIS 組態包含 App_Code 資料夾中會實作 IHttpModule 的任何類別。
請確定已選取 [只有對 ASP.NET 應用程式或 Managed 處理常式提出的要求才會啟動] 核取方塊。
針對這個逐步解說,您要將模組套用至管線中的所有要求,不只是 ASP.NET 的要求而已。
按一下 [確定]。
Managed 程式碼模組已加入至模組清單中。您可能需要捲動或重新排序清單,才能看到加入的模組。
若要加入自訂回應標頭
在 IIS 管理員的左窗格中,按一下 WalkthroughIIS7 節點的名稱,以顯示網站的主要組態窗格。
在中央窗格的 [IIS] 設定區段中,按兩下 [HTTP 回應標頭] 圖示。
[HTTP 回應標頭] 功能詳細資訊會顯示在中央窗格中。它會顯示目前已定義的所有 HTTP 回應標頭。
按一下 [執行] 窗格中的 [加入]。
[新增自訂 HTTP 回應標頭] 對話方塊隨即顯示。
在 [名稱] 文字方塊中,輸入 CustomHeader1。
名稱可以是描述標頭的任何文字。
在 [值] 文字方塊中,輸入值 SampleHeader。
您現在要關閉靜態壓縮。這麼做可避免靜態內容 (例如 HTML 頁面) 被壓縮。
若要關閉靜態壓縮
按一下左窗格中 WalkthroughIIS7 節點的名稱,在中央窗格中檢視網站的主要組態窗格。
在 IIS 管理員的中央窗格中,按兩下 [IIS] 設定區段中的 [壓縮] 圖示。
[壓縮] 功能詳細資訊會顯示在中央窗格中。
確定已清除 [啟用靜態內容壓縮(S)] 核取方塊。
確認 Visual Studio 中的組態變更
您已在本逐步解說中,使用 IIS 管理員執行了組態工作。在這個程序中,您要檢視應用程式的 Web.config 檔案中的變更。
若要查看 Web.config 檔案中的模組登錄
返回 Visual Studio 應用程式和 WalkthroughIIS7 應用程式。
在 [方案總管] 中,以滑鼠右鍵按一下網站名稱,然後再按一下 [重新整理資料夾]。
這麼做會使網站資料夾的 Visual Studio 檢視與磁碟上的資料夾及檔案進行同步處理。
如果應用程式內原本沒有包含 Web.config 檔案,則 Web 應用程式中現在便會有 Web.config 檔案。如果應用程式本來就已經有 Web.config 檔案,就會對檔案進行變更。
在 [方案總管] 中,按兩下 Web.config 檔案以檢視其內容。
system.webServer 區段包含您使用 IIS 管理員所做的組態變更。system.webServer 區段具有下列子項目:
modules 項目,會登錄要求處理管線的自訂模組。
httpProtocol 項目,會定義自訂回應標頭。
urlCompression 項目,會停用靜態壓縮。
system.webServer 區段類似下列範例:
<system.webServer> <modules> <add name="CustomModule" type="CustomModule" preCondition="" /> </modules> <httpProtocol> <customHeaders> <add name="CustomHeader1" value="SampleHeader" /> </customHeaders> </httpProtocol> <urlCompression doStaticCompression="false" /> </system.webServer>
如需 system.webServer 區段的詳細資訊,請參閱使用 ASP.NET 組態和 IIS 7.0:system.webServer 區段群組 (IIS 設定結構描述) (英文)。
測試自訂模組
IIS 7.0 有整合的要求管線。所有應用程式資源 (例如 .aspx page 或 .htm 頁面) 的要求都可以引發 Managed 程式碼模組中的管線通知,就像您在本逐步解說中所建立的自訂模組一樣。
注意事項: |
---|
當您在 IIS 管理員中設定 Managed 程式碼模組時,沒有選取 [只有對 ASP.NET 應用程式或 Managed 處理常式提出的要求才會啟動] 選項。如果您當時選取了這個選項,則自訂模組就只會接收 ASP.NET 資源的管線通知,而不會接收靜態資源 (例如 HTML 檔案) 的通知。 |
若要確認自訂模組管線套用至所有資源
在 Visual Studio 中開啟 ASPXpage.aspx 頁面,然後按下 CTRL+F5,在瀏覽器中檢視頁面。
模組中所定義的自訂標頭顯示在瀏覽器中。在 ASP.NET 頁面中,您不能存取 IIS 所定義的自訂標頭,因為這個標頭資訊是在頁面內容轉譯成資料流後才加入的。但是,您可以確認標頭是使用會監視 HTTP 流量的工具 (例如 Fiddler) 所設定的。
開啟 HTTP 流量監視工具,並在瀏覽器中重新整理 ASPXpage.aspx 頁面。
注意事項: 如果 ASPXpage.aspx 頁面的 URL 使用 localhost,請將 localhost 變更為安裝 IIS 7.0 之電腦的名稱。在標準開發的情況下,這也是執行 Visual Studio 的電腦。
確認 CustomHeader1 及 CustomHeader2 顯示在回應的標頭集合中。
在瀏覽器中檢視 HTMLPage.htm。
確認 CustomHeader1 及 CustomHeader2 顯示在回應的標頭集合中。
後續步驟
本逐步解說提供 IIS 7.0 中的 ASP.NET 組態的簡介。IIS 7.0 Web 伺服器和 ASP.NET 的組態設定,會結合成一個組態檔,您可以使用單一的系統管理介面加以編輯。
您可能也想探索 IIS 管理員中的其他設定,以及變更如何反映在組態檔中。如需詳細資訊,請參閱網際網路資訊服務 (IIS) (英文)。
請參閱
工作
逐步解說:使用 MMC 設定 IIS 6.0 中的 ASP.NET 應用程式
概念
將 ASP.NET 應用程式從 IIS 6.0 移至 IIS 7.0