共用方式為


逐步解說:在 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 模組

首先,您要建立新的網站。

若要建立新的網站

  1. 在 Visual Studio 中,建立新的本機 HTTP 網站,名稱為 WalkthroughIIS7。

    如需建立本機 IIS 網站的詳細資訊,請參閱逐步解說:在 Visual Web Developer 中建立本機 IIS 網站

  2. 按一下 [開始] 功能表上的 [所有程式],然後依序按一下 [附屬應用程式] 和 [執行]。

  3. 在 [開啟] 方塊中,輸入 inetmgr,然後按下 [確定]。

    注意事項:

    如果已啟用使用者帳戶控制 (UAC),則當您嘗試存取 IIS 管理員時,它可能會顯示訊息。如果是,請按一下 [繼續]。如需詳細資訊,請參閱使用者帳戶控制 (英文)。

  4. 確認網站是在整合模式下執行的應用程式集區中。

    如需設定 Web 應用程式模式的詳細資訊,請參閱設定應用程式集區的要求處理模式 (英文)。

您現在可以建立自訂 HTTP 模組。

若要建立自訂 HTTP 模組

  1. 在 Visual Studio 中,於 [方案總管] 中,以滑鼠右鍵按一下 Web 專案節點,然後按一下 [加入新項目]。

    接著會顯示 [加入新項目] 對話方塊。

  2. 請在 [Visual Studio 安裝的範本] 之下選取 [類別]。

  3. 選取您慣用的程式設計語言。

  4. 輸入 CustomModule 做為類別的名稱,然後按一下 [加入]。

    如果網站不包含 App_Code 資料夾,就會顯示訊息詢問您是要否將類別放在 App_Code 資料夾中。如果要,請按一下 []。

  5. 在類別檔案中,移除現有的程式碼然後取代成下列程式碼:

    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 方法沒有功能,但是如果有需要,您可以在此實作處置邏輯。

  6. 按一下 [建置] 功能表中的 [建置網站],以確定模組中沒有錯誤。

本節的最後一個工作,就是要建立 ASP.NET 及 HTML 頁面,讓您稍後在逐步解說中測試自訂模組。

若要建立 ASP.NET 及 HTML 測試頁面

  1. 將名為 ASPXpage.aspx 的新單一檔案 ASP.NET 網頁加入至應用程式的根資料夾。

  2. 移除現有的標記,以下列標記取代:

    <%@ 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>
    
  3. 將名為 HTMLPage.htm 的新 HTML 頁面加入至 Web 應用程式的根資料夾。

  4. 將下列標記加入至 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>
    
  5. 儲存所有變更。

  6. 分別執行 ASPXpage.aspx 頁面和 HTMLpage.htm 頁面,以確定可以在瀏覽器中檢視。

    注意事項:

    維持 Visual Studio 應用程式開啟。您會返回這個應用程式,以確認您要使用 IIS 管理員所做的組態變更。

此時,頁面雖然會執行,但不會叫用自訂模組。您將在下一個程序中,將自訂模組加入至要求管線。

使用 IIS 管理員變更組態

您將在本節使用 IIS 管理員,進行幾項 IIS 應用程式的組態設定。您要登錄自訂模組、加入自訂標頭,以及關閉靜態壓縮。

若要登錄自訂 Managed 程式碼模組

  1. 按一下 [開始] 功能表上的 [所有程式],然後依序按一下 [附屬應用程式] 和 [執行]。

  2. 在 [開啟] 方塊中,輸入 inetmgr,然後按下 [確定]。

    注意事項:

    如果已啟用使用者帳戶控制 (UAC),則當您嘗試存取 IIS 管理員時,它可能會顯示訊息。如果是,請按一下 [繼續]。如需詳細資訊,請參閱使用者帳戶控制 (英文)。

  3. 在 [連線] 窗格中,展開裝載網站的電腦或伺服器的名稱。

  4. 展開 [網站] 資料夾。

  5. 選取網站 WalkthroughIIS7。在 Windows Server 2008 中,如果 Web 應用程式是網站的應用程式,請先展開該網站,然後選取 WalkthroughIIS7。

    根據預設,IIS 管理員的中央窗格會按區域顯示 Web 伺服器組態選項。WalkthroughIIS7 Web 應用程式有兩個區域:[ASP.NET] 和 [IIS]。

  6. 在中央窗格的 [IIS] 區段中,按兩下 [模組] 圖示。

    中央窗格中的 [模組] 詳細資訊會顯示目前為 IIS 設定的所有模組。

  7. 按一下 [執行] 窗格中的 [新增 Managed 模組]。

    [新增 Managed 模組] 對話方塊隨即出現。

  8. 在 [名稱] 方塊中輸入 CustomModule。

    名稱可以是描述模組的任何文字。在本逐步解說中,您只會使用模組的名稱。

  9. 在 [型別] 清單中,選取或輸入模組的 Managed 型別的完整名稱。

    CustomModule 型別會顯示在清單中,因為 IIS 組態包含 App_Code 資料夾中會實作 IHttpModule 的任何類別。

  10. 請確定已選取 [只有對 ASP.NET 應用程式或 Managed 處理常式提出的要求才會啟動] 核取方塊。

    針對這個逐步解說,您要將模組套用至管線中的所有要求,不只是 ASP.NET 的要求而已。

  11. 按一下 [確定]。

    Managed 程式碼模組已加入至模組清單中。您可能需要捲動或重新排序清單,才能看到加入的模組。

若要加入自訂回應標頭

  1. 在 IIS 管理員的左窗格中,按一下 WalkthroughIIS7 節點的名稱,以顯示網站的主要組態窗格。

  2. 在中央窗格的 [IIS] 設定區段中,按兩下 [HTTP 回應標頭] 圖示。

    [HTTP 回應標頭] 功能詳細資訊會顯示在中央窗格中。它會顯示目前已定義的所有 HTTP 回應標頭。

  3. 按一下 [執行] 窗格中的 [加入]。

    [新增自訂 HTTP 回應標頭] 對話方塊隨即顯示。

  4. 在 [名稱] 文字方塊中,輸入 CustomHeader1。

    名稱可以是描述標頭的任何文字。

  5. 在 [] 文字方塊中,輸入值 SampleHeader。

您現在要關閉靜態壓縮。這麼做可避免靜態內容 (例如 HTML 頁面) 被壓縮。

若要關閉靜態壓縮

  1. 按一下左窗格中 WalkthroughIIS7 節點的名稱,在中央窗格中檢視網站的主要組態窗格。

  2. 在 IIS 管理員的中央窗格中,按兩下 [IIS] 設定區段中的 [壓縮] 圖示。

    [壓縮] 功能詳細資訊會顯示在中央窗格中。

  3. 確定已清除 [啟用靜態內容壓縮(S)] 核取方塊。

確認 Visual Studio 中的組態變更

您已在本逐步解說中,使用 IIS 管理員執行了組態工作。在這個程序中,您要檢視應用程式的 Web.config 檔案中的變更。

若要查看 Web.config 檔案中的模組登錄

  1. 返回 Visual Studio 應用程式和 WalkthroughIIS7 應用程式。

  2. 在 [方案總管] 中,以滑鼠右鍵按一下網站名稱,然後再按一下 [重新整理資料夾]。

    這麼做會使網站資料夾的 Visual Studio 檢視與磁碟上的資料夾及檔案進行同步處理。

    如果應用程式內原本沒有包含 Web.config 檔案,則 Web 應用程式中現在便會有 Web.config 檔案。如果應用程式本來就已經有 Web.config 檔案,就會對檔案進行變更。

  3. 在 [方案總管] 中,按兩下 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 檔案) 的通知。

若要確認自訂模組管線套用至所有資源

  1. 在 Visual Studio 中開啟 ASPXpage.aspx 頁面,然後按下 CTRL+F5,在瀏覽器中檢視頁面。

    模組中所定義的自訂標頭顯示在瀏覽器中。在 ASP.NET 頁面中,您不能存取 IIS 所定義的自訂標頭,因為這個標頭資訊是在頁面內容轉譯成資料流後才加入的。但是,您可以確認標頭是使用會監視 HTTP 流量的工具 (例如 Fiddler) 所設定的。

  2. 開啟 HTTP 流量監視工具,並在瀏覽器中重新整理 ASPXpage.aspx 頁面。

    注意事項:

    如果 ASPXpage.aspx 頁面的 URL 使用 localhost,請將 localhost 變更為安裝 IIS 7.0 之電腦的名稱。在標準開發的情況下,這也是執行 Visual Studio 的電腦。

  3. 確認 CustomHeader1 及 CustomHeader2 顯示在回應的標頭集合中。

  4. 在瀏覽器中檢視 HTMLPage.htm。

  5. 確認 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

其他資源

設定 IIS 7.0 中的模組

設定 IIS 7.0 中的 HTTP 回應標頭