연습: HTTP 처리기 팩터리 만들기 및 등록

Visual Studio 2010

업데이트: 2007년 11월

IHttpHandlerFactory 인터페이스는 요청을 처리하는 데 사용할 HTTP 처리기를 만들고 관리합니다. 따라서 IHttpHandlerFactory 인터페이스를 구현하는 클래스를 만든 다음 이 클래스를 HTTP 처리기로 사용할 수 있습니다.

이러한 방식으로 처리기를 만들면 HTTP 요청 처리를 보다 세부적으로 제어할 수 있습니다. 조건 집합에 따라 여러 가지 처리기를 만드는 HTTP 처리기 팩터리에 URL을 매핑할 수 있습니다. 예를 들어 HTTP 처리기 팩터리를 사용하면 데이터베이스 연결과 같이 제한되거나 비용이 많이 드는 리소스에 액세스하는 HTTP 처리기 개체를 제한된 수만큼 만든 다음 이후 요청에 이러한 처리기 개체를 다시 사용할 수 있습니다.

이 연습에서는 확장명 .sample로 식별되는 리소스의 두 처리기를 만드는 HTTP 처리기 팩터리를 만듭니다. 한 처리기는 HTTP GET 요청 동안 리소스에 사용되며, 다른 처리기는 HTTP POST 요청에 사용됩니다. 첫 번째 처리기는 연습: 동기 HTTP 처리기 만들기에 설명된 처리기의 인스턴스입니다. 두 번째 처리기는 방법: 비동기 HTTP 처리기 만들기에 설명된 처리기의 인스턴스입니다.

이 연습에서 수행할 작업은 다음과 같습니다.

  • HTTP 처리기 팩터리 클래스의 코드를 만드는 방법

  • Web.config 파일에서 처리기 팩터리를 등록하고 .sample 파일 이름 확장명을 매핑하는 방법

  • IIS(인터넷 정보 서비스)에서 .sample 파일 이름 확장명을 ASP.NET에 매핑하는 방법

이 연습을 완료하려면 다음과 같은 요건을 갖추어야 합니다.

  • Visual Studio 또는 Visual Web Developer

  • IIS를 사용하여 실행할 수 있는 ASP.NET 웹 사이트

  • IIS 6.0 또는 IIS 7.0

먼저 처리기 팩터리 클래스를 만듭니다.

HTTP 처리기 팩터리 클래스를 만들려면

  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 처리기 만들기에서 설명한 동기 처리기 또는 방법: 비동기 HTTP 처리기 만들기에서 설명한 비동기 처리기를 반환합니다. 사용자 지정 HTTP 처리기 팩터리에서 이러한 처리기를 반환할 수 있게 하려면 동기 HelloWorldHandler 클래스와 비동기 HelloWorldAsyncHandler 클래스를 둘 다 만들어야 합니다.

HelloWorldHandler 및 HelloWorldAsyncHandler 클래스를 만들려면

  1. 웹 사이트의 App_Code 디렉터리에서 HelloWorldHandler라는 클래스를 만듭니다.

  2. 연습: 동기 HTTP 처리기 만들기의 코드를 클래스 파일에 추가합니다.

  3. 웹 사이트의 App_Code 디렉터리에서 HelloWorldAsyncHandler라는 클래스를 만듭니다.

  4. 방법: 비동기 HTTP 처리기 만들기의 코드를 클래스 파일에 추가합니다.

사용자 지정 HTTP 처리기 팩터리 클래스를 만든 후에는 이 클래스를 응용 프로그램의 Web.config 파일에서 등록해야 합니다. 이렇게 하면 ASP.NET에서 처리기 팩터리 클래스를 사용하여 파일 이름 확장명이 .sample인 리소스에 대한 요청을 처리할 수 있습니다.

IIS 6.0과 IIS 7.0 중 어떤 것으로 작업하는지에 따라 처리기 등록 절차가 달라집니다. 이 단원에서는 IIS 6.0에서 처리기를 등록하는 방법을 설명합니다. 다음 단원에서는 IIS 7.0에서 처리기를 등록하는 방법을 설명합니다.

IIS 6.0에서 처리기 팩터리를 등록하려면

  1. 웹 사이트에 Web.config 파일이 없는 경우 사이트의 루트에 해당 파일을 만듭니다.

  2. 아래에 강조 표시된 요소를 Web.config 파일에 추가합니다.

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

    이 코드는 클래스 이름과 처리기 이름이 HandlerFactory인 처리기 팩터리를 등록합니다.

  3. IIS 관리자를 사용하여 .sample 파일 이름 확장명의 응용 프로그램 확장명 매핑을 등록합니다. 자세한 내용은 방법: IIS에서 HTTP 처리기 확장 구성을 참조하십시오.

IIS 7.0에서 응용 프로그램은 기본 또는 통합 모드로 실행될 수 있습니다. 기본 모드에서는 요청이 IIS 6.0에서와 거의 같은 방법으로 처리됩니다. 통합 모드에서는 IIS 7.0이 요청, 모듈 및 기타 기능을 ASP.NET과 함께 공유할 수 있도록 하는 파이프라인을 사용하여 요청을 관리합니다.

IIS 7.0에서는 Web.config 파일 또는 IIS 관리자에서 처리기 팩터리를 등록합니다. IIS 7.0을 중심으로 관리되기 때문에 응용 프로그램의 Web.config 파일에 대한 변경 사항이 응용 프로그램의 IIS 관리자 인터페이스에 반영되고, 반대의 경우도 마찬가지입니다. 이후 절차에서 처리기가 Web.config 파일에 등록됩니다.

기본 모드에서 실행되는 IIS 7.0에서 처리기 팩터리를 등록하려면

  1. 웹 사이트에 Web.config 파일이 아직 없으면 새로 만듭니다.

  2. 아래에 강조 표시된 요소를 Web.config 파일에 추가합니다.

    ms227439.alert_note(ko-kr,VS.100).gif참고:

    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>
    

    구성 요소는 사용자 지정 처리기 팩터리를 클래스 이름별로 등록하고 .sample 파일 이름 확장명을 해당 처리기에 매핑합니다.

    ms227439.alert_note(ko-kr,VS.100).gif참고:

    사용자 지정 파일 이름 확장명을 등록하는 것이기 때문에 handlers 섹션 및 httpHandlers 섹션 모두에서 처리기를 등록합니다. 기본 모드에서는 이전 버전과의 호환성을 위해 modules 특성을 사용하여 처리기를 ISAPI 모듈로 지정합니다. ASP.NET ISAPI dll의 경로는 scriptProcessor 특성을 사용하여 지정됩니다. name 특성은 handlers 섹션에 필수적입니다.

통합 모드에서 실행되는 IIS 7.0에서 처리기 팩터리를 등록하려면

  1. 웹 사이트에 Web.config 파일이 없는 경우 사이트의 루트에 해당 파일을 만듭니다.

  2. 아래에 강조 표시된 요소를 Web.config 파일에 추가합니다.

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

    구성 요소는 사용자 지정 처리기 팩터리를 클래스 이름별로 등록하고 .sample 파일 이름 확장명을 해당 처리기에 매핑합니다.

    ms227439.alert_note(ko-kr,VS.100).gif참고:

    등록은 httpHandlers 섹션이 아닌 handlers 섹션에서 이루어집니다. name 특성은 필수적 요소입니다.

사용자 지정 HTTP 처리기 팩터리 테스트

사용자 지정 HTTP 처리기 팩터리를 만들고 등록한 후에는 테스트할 수 있습니다.

사용자 지정 HTTP 처리기 팩터리를 테스트하려면

  1. 응용 프로그램에서 파일 이름 확장명이 .htm인 HTML 페이지를 만듭니다.

  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 처리기 팩터리는 동기 HTTP 처리기를 만들고 호출하여 요청에 응답합니다. 두 번째 단추를 클릭하면 HTTP 처리기 팩터리는 비동기 HTTP 처리기를 만들고 호출하여 요청에 응답합니다.

표시: