共用方式為


逐步解說:建立和註冊 HTTP 處理常式 Factory

更新:2007 年 11 月

IHttpHandlerFactory 介面會建立並管理用於處理要求的 HTTP 處理常式。因此,您可以建立實作 IHttpHandlerFactory 介面的類別,然後使用該類別做為 HTTP 處理常式。

以這種方式建立處理常式,可讓您在處理 HTTP 要求時進行更精密的控制。也可讓您將 URL 對應至 HTTP 處理常式 Factory,依照各種情況建立不同的處理常式。例如,您可以使用 HTTP 處理常式 Factory,建立有限數目的 HTTP 處理常式物件,以用於存取寶貴或有限的資源,例如資料庫連接,然後在未來的要求中重複使用這些處理常式物件。

在本逐步解說中,您要建立 HTTP 處理常式 Factory,它會為副檔名為 .sample 的資源建立兩個處理常式。一個處理常式在 HTTP GET 要求時會使用資源,另一個處理常式則會使用 HTTP POST 要求。第一個處理常式是逐步解說:建立同步的 HTTP 處理常式中所描述之處理常式的執行個體。第二個處理常式是HOW TO:建立非同步的 HTTP 處理常式中所描述之處理常式的執行個體。

本逐步解說所說明的工作包括下列各項:

  • 如何建立 HTTP 處理常式 Factory 類別的程式碼。

  • 如何登錄 Web.config 檔案中的處理常式 Factory,並將 .sample 副檔名對應至此處理常式 Factory。

  • 如何將副檔名 .sample 對應至網際網路資訊服務 (IIS) 中的 ASP.NET。

必要條件

若要完成這個逐步解說,您必須要有:

  • Visual Studio 或 Visual Web Developer。

  • 可以使用 IIS 來執行的 ASP.NET 網站。

  • IIS 6.0 或 IIS 7.0。

建立自訂 HTTP 處理常式 Factory

一開始,您要建立處理常式 Factory 類別。

若要建立 HTTP 處理常式 Factory 類別

  1. 如果 ASP.NET 網站還沒有 App_Code 資料夾,請在網站的根目錄下建立一個。

  2. 在網站的 App_Code 目錄中,建立名為 HelloWorldHandler 的類別。

  3. 將下列程式碼加入至類別檔案。

    Imports System
    Imports System.Web
    
    Class HandlerFactory
        Implements IHttpHandlerFactory
    
        Public Function GetHandler(ByVal context As HttpContext, _
                ByVal requestType As String, ByVal url As [String],_ 
                ByVal pathTranslated As [String]) As IHttpHandler _
                Implements IHttpHandlerFactory.GetHandler
            Dim handlerToReturn As IHttpHandler
            Dim requestType as String = _      
                context.Request.RequestType.ToLower()
            If "get" = requestType Then
                handlerToReturn = New HelloWorldHandler()
            Else
                If "post" = requestType Then
                    handlerToReturn = New HelloWorldAsyncHandler()
                Else
                    handlerToReturn = Nothing
                End If
            End If
            Return handlerToReturn
        End Function
    
        Public Sub ReleaseHandler(ByVal handler As IHttpHandler) _
            Implements IHttpHandlerFactory.ReleaseHandler
        End Sub
    
        Public ReadOnly Property IsReusable() As Boolean
            Get
                Return False
            End Get
        End Property
    End Class
    
    using System;
    using System.Web;
    
    class HandlerFactory : IHttpHandlerFactory
    {
        public IHttpHandler GetHandler(HttpContext context, 
            string requestType, String url, String pathTranslated)
        {
            IHttpHandler handlerToReturn;
            if ("get" == context.Request.RequestType.ToLower())
            {
                handlerToReturn = new HelloWorldHandler();
            }
            else if ("post" == context.Request.RequestType.ToLower())
            {
                handlerToReturn = new HelloWorldAsyncHandler();
            }
            else
            {
                handlerToReturn = null;
            }
            return handlerToReturn;
        }
        public void ReleaseHandler(IHttpHandler handler)
        {
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
    

    這個程式碼會實作 IHttpHandlerFactory 介面的 GetHandler 方法。如果是 GET 要求,這個方法會傳回同步處理常式介面。如果要求為 POST 要求,則會傳回非同步處理常式介面。

建立自訂 HTTP 處理常式

自訂 HTTP 處理常式 Factory 會傳回逐步解說:建立同步的 HTTP 處理常式中所描述的同步處理常式,或HOW TO:建立非同步的 HTTP 處理常式中所描述的非同步處理常式。您必須同時建立同步 HelloWorldHandler 類別和非同步 HelloWorldAsyncHandler 類別,才能讓自訂 HTTP 處理常式 Factory 可以傳回這些處理常式。

若要建立 HelloWorldHandler 和 HelloWorldAsyncHandler 類別

  1. 在網站的 App_Code 目錄中,建立名為 HelloWorldHandler 的類別。

  2. 逐步解說:建立同步的 HTTP 處理常式中的程式碼加入至類別檔案。

  3. 在網站的 App_Code 目錄中,建立名為 HelloWorldAsyncHandler 的類別。

  4. HOW TO:建立非同步的 HTTP 處理常式中的程式碼加入至類別檔案。

在 IIS 6.0 中登錄自訂 HTTP 處理常式 Factory

建立了自訂 HTTP 處理常式 Factory 類別後,必須在應用程式的 Web.config 檔案中登錄。這樣 ASP.NET 就能夠使用處理常式 Factory 類別,以服務對副檔名為 .sample 的資源所提出的要求。

視您所使用的是 IIS 6.0 或 IIS 7.0,登錄處理常式的程序有所不同。本節說明如何在 IIS 6.0 中註冊處理常式。下一節描述如何在 IIS 7.0 中登錄處理常式。

若要在 IIS 6.0 中登錄處理常式 Factory

  1. 如果網站還沒有 Web.config 檔案,請在網站的根目錄下建立一個。

  2. 將下列反白顯示的項目加入至 Web.config 檔。

    <configuration>
      <system.web>
        <httpHandlers>      <add verb="GET,POST" path="*.sample"        type="HandlerFactory" />    </httpHandlers>
      </system.web>
    </configuration>
    

    程式碼會以類別名稱和 HandlerFactory 的處理常式名稱,登錄處理常式 Factory。

  3. 使用 IIS 管理員,為 .sample 副檔名登錄應用程式副檔名對應。如需詳細資訊,請參閱 HOW TO:在 IIS 中設定 HTTP 處理常式副檔名

在 IIS 7.0 中登錄自訂 HTTP 處理常式 Factory

在 IIS 7.0 中,應用程式能夠以傳統 (Classic) 或整合 (Integrated) 模式執行。在傳統模式下,處理要求的方式和在 IIS 6.0 中差不多。在整合模式下,IIS 7.0 會使用允許和 ASP.NET 共用要求、模組和其他功能的管線來管理要求。

在 IIS 7.0 中,必須要在 Web.config 檔案或 IIS 管理員中登錄處理常式 Factory。因為管理工作集中在 IIS 7.0 中,所以在應用程式 Web.config 檔案中的變更,都會反映在應用程式的 IIS 管理員介面中,反之亦然。在下列程序中,處理常式會登錄在 Web.config 檔案中。

若要在以傳統模式執行的 IIS 7.0 中登錄處理常式 Factory

  1. 如果網站中沒有 Web.config 檔案,請建立一個。

  2. 將下列反白顯示的項目加入至 Web.config 檔。

    注意事項:

    取代 aspnet_isapi.dll 檔案的正確路徑。.dll 檔案位於安裝 .NET Framework 的資料夾中。預設為 C:\WINDOWS\Microsoft.NET\Framework\version。

    <configuration>
      <system.webServer>
        <handlers>      <add  verb="GET,POST" path="*.sample"         name="HandlerFactory"         type="HandlerFactory"         modules="IsapiModule"/>         scriptProcessor="%path%\aspnet_isapi.dll"    </handlers>
      </system.webServer>
    </configuration>
    

    組態項目會依類別名稱登錄自訂處理常式 Factory,並將 .sample 副檔名對應到該處理常式。

    注意事項:

    因為您正在註冊的是自訂副檔名,所以 handlers 區段和 httpHandlers 區段中都要註冊處理常式。在傳統模式下,基於回溯相容性的考量,會使用 modules 屬性 (Attribute) 將處理常式會指定為 ISAPI 模組。ASP.NET ISAPI dll 的路徑是使用 scriptProcessor 屬性 (Attribute) 所指定。handlers 區段中需要 name 屬性 (Attribute)。

若要在以整合模式執行的 IIS 7.0 中登錄處理常式 Factory

  1. 如果網站還沒有 Web.config 檔案,請在網站的根目錄下建立一個。

  2. 將下列反白顯示的項目加入至 Web.config 檔。

    <configuration>
      <system.webServer>
        <handlers>      <add verb="GET,POST" path="*.sample"         name="HandlerFactory"        type="HandlerFactory"/>    </handlers>
      </system.webServer>
    </configuration>
    

    組態項目會依類別名稱登錄自訂處理常式 Factory,並將 .sample 副檔名對應到該處理常式。

    注意事項:

    登錄會在 handlers 區段中完成,但不在 httpHandlers 區段中。name 屬性 (Attribute) 是必要項。

測試自訂 HTTP 處理常式 Factory

已經建立和登錄自訂 HTTP 處理常式 Factory 之後,您可以對其進行測試。

若要測試自訂 HTTP 處理常式 Factory

  1. 在應用程式中建立 HTML 網頁 (具有 .htm 的副檔名)。

  2. 在網頁的 body 區段中,加入下列標記。

    <form action="Sample.sample" method="get">
      <input type="submit" value="Submit to Sample.sample via Get" />
    </form>
    <br />
    <form action="Sample.sample" method="post">
      <input type="submit" value="Submit to Sample.sample via Post" />
    </form>
    
  3. 在瀏覽器中要求 HTML 頁面。

  4. 按一下其中一個按鈕。

    當您按一下第一個按鈕,HTTP 處理常式 Factory 會建立並呼叫同步 HTTP 處理常式,以回應要求。當您按下第二個按鈕,HTTP 處理常式 Factory 會藉由建立和呼叫非同步 HTTP 處理常式來回應要求。

請參閱

工作

HOW TO:建立非同步的 HTTP 處理常式

逐步解說:建立同步的 HTTP 處理常式

概念

IIS 5.0 和 6.0 的 ASP.NET 應用程式生命週期概觀

其他資源

HTTP 處理常式簡介