다음을 통해 공유


.NET Framework 사용하여 IIS 7.0 모듈 및 처리기 개발

작성자: Mike Volodarsky

개요

이 문서에서는 .NET Framework 기반으로 IIS 7.0 이상의 웹 서버 기능 개발을 시작하는 데 중점을 둡니다. 이 문서에서는 다음을 보여 줍니다.

  1. IIS 모듈 또는 IIS 처리기를 개발할지 여부를 결정하는 방법
  2. Visual Studio, Visual C# Express 또는 .NET Framework 함께 제공되는 명령줄 도구를 사용하여 개발 환경을 설정하는 방법
  3. 첫 번째 프로젝트를 만드는 방법
  4. 간단한 모듈 및 처리기를 개발하는 방법
  5. IIS 서버에 간단한 모듈 및 처리기를 배포하는 방법

실제 관리형 IIS 모듈 및 처리기를 보고 애플리케이션에 대해 다운로드하려면 HttpRedirection 모듈을 사용하여 애플리케이션으로 요청 리디렉션, DirectoryListingModule을 사용하여 IIS 웹 사이트에 대한 멋진 디렉터리 목록 가져오기IconHandler를 사용하여 ASP.NET 애플리케이션에 예쁜 파일 아이콘 표시를 방문하세요.

소개: ASP.NET 사용하여 IIS 기능 개발

IIS 7.0 이전의 IIS 릴리스에는 웹 서버 기능을 빌드하기 위한 기본 확장성 API로 ISAPI라는 C API가 포함되어 있습니다. IIS 7.0 이상은 처음부터 다시 엔지니어링되어 모든 기본 제공 기능이 기반이 되는 새로운 C++ API를 제공하여 웹 서버의 완전한 런타임 확장성을 허용합니다.

이 외에도 IIS는 ASP.NET 2.0과의 긴밀한 통합을 활용하여 웹 서버를 확장하기 위한 완전 충실도 .NET API를 처음으로 제공합니다. 즉, 이제 익숙한 ASP.NET 2.0 API로 빌드된 새 웹 서버 기능으로 IIS를 확장할 수 있습니다. 마찬가지로 IIS에서 기존 ASP.NET 2.0 모듈 및 처리기를 사용하여 ASP.NET 통합을 활용하여 새 코드를 작성하지 않고도 애플리케이션의 기능을 향상시킬 수 있습니다. IIS의 ASP.NET 통합에 대한 자세한 내용은 ASP.NET IIS 7과의 통합을 참조하세요.

무역 도구: 개발 환경 결정

IIS 모듈 및 처리기를 빌드하려면 .NET 어셈블리를 개발하고 컴파일할 수 있는 모든 환경을 사용합니다. 일반적인 옵션 중 일부는 다음과 같습니다.

  1. Visual Studio 2005. 또는 Visual Studio 2008의 최신 베타 릴리스를 다운로드할 수도 있습니다.
  2. Visual C# 2005 Express Edition, 무료 다운로드(또는 Visual Basic 2005 Express를 포함한 기타 Express 도구).
  3. .NET Framework 런타임에 포함된 C# 명령줄 컴파일러(csc.exe)와 즐겨 찾는 소스 편집기(다른 언어의 경우 SDK를 다운로드해야 합니다).

이 문서의 샘플은 C#을 사용하지만 지원되는 다른 .NET 언어로 IIS 구성 요소를 개발할 수 있습니다(관리되는 C++제외). 이 문서에서는 위의 세 가지 환경을 모두 사용하여 IIS 확장성 구성 요소를 개발하는 방법을 보여 줍니다.

참고

IIS는 .NET 확장성을 위해 기존 ASP.NET API를 활용하므로 Windows XP® 및 Windows Server® 2003에서 .NET Framework 2.0으로 IIS .NET 모듈 및 처리기를 개발할 수 있습니다. 그러나 새 IIS 기능을 지원하기 위해 추가된 몇 가지 새로운 ASP.NET API 중 하나를 사용하려는 경우 Windows Vista에서 개발하거나 Windows Vista®의 System.Web.dll 버전 또는 최신 버전의 .NET Framework 3.5를 가져와 코드를 컴파일해야 합니다.

IIS를 확장하는 두 가지 방법: 모듈 및 처리기

모든 IIS 웹 서버 기능은 모듈 및 처리기의 두 가지 범주에 적합합니다.

이전 IIS 버전의 ISAPI 필터와 유사한 모듈은 어떤 식으로든 변경하거나 추가하기 위해 모든 요청의 요청 처리에 참여합니다. IIS의 일부 기본 제공 모듈의 예로는 요청의 인증 상태 조작하는 인증 모듈, 나가는 응답을 압축하는 압축 모듈 및 요청 로그에 대한 정보를 기록하는 로깅 모듈이 있습니다.

모듈은 ASP.NET System.Web.IHttpModule 인터페이스를 구현하고 System.Web 네임스페이스의 API를 사용하여 하나 이상의 ASP에 참여하는 .NET 클래스입니다. NET의 요청 처리 단계입니다.

이전 IIS 버전의 ISAPI 확장과 유사한 처리기는 요청을 처리하고 특정 콘텐츠 형식에 대한 응답을 생성합니다. 모듈과 처리기의 기본 차이점은 처리기가 일반적으로 특정 요청 경로 또는 확장에 매핑되고 해당 경로 또는 확장이 해당하는 특정 서버 리소스의 처리를 지원한다는 것입니다. IIS와 함께 제공되는 처리기의 예로는 ASP 스크립트를 처리하는 ASP, 정적 파일을 제공하는 정적 파일 처리기 및 ASP가 있습니다. ASPX 페이지를 처리하는 NET의 PageHandler입니다.

처리기는 ASP.NET System.Web.IHttpHandler 또는 System.Web.IHttpAsyncHandler 인터페이스를 구현하고 System.Web 네임스페이스의 API를 사용하여 지원하는 특정 콘텐츠에 대한 http 응답을 생성하는 .NET 클래스입니다.

IIS 기능 개발을 계획할 때 가장 먼저 물어봐야 할 질문은 이 기능이 특정 URL/확장에 대한 요청을 처리할 책임이 있는지, 아니면 임의 규칙에 따라 모든/일부 요청에 적용되는지 여부입니다. 이전의 경우 은 처리기여야 하고 후자의 경우 모듈이어야 합니다.

이 문서에서는 간단한 모듈과 간단한 처리기, 프로젝트를 만들고 컴파일하는 일반적인 단계 및 서버에 배포하는 특정 단계를 모두 빌드하는 방법을 보여 줍니다.

참고

모듈을 개발하는 경우 처리기를 개발할 필요가 없으며 비자도 마찬가지입니다.

시작: Visual Studio 프로젝트 만들기

모듈 또는 처리기를 빌드하려면 모듈/처리기 클래스를 포함하는 .NET 어셈블리(DLL)를 생성해야 합니다. Visual Studio 또는 Visual Studio Express 도구를 사용하는 경우 첫 번째 단계는 클래스 라이브러리 프로젝트를 만드는 것입니다.

  1. "파일" 메뉴에서 "새로 만들기", "프로젝트 ..."를 선택합니다. 새 프로젝트 대화 상자(아래)에서 "Visual C#" 프로젝트 유형을 선택하고 Visual Studio 설치 템플릿의 오른쪽 목록에서 "클래스 라이브러리"를 선택합니다.

    Visual Studio에서 IIS7 모듈 및 처리기 프로젝트 만들기

  2. ASP.NET 및 IIS 모듈 및 처리기를 개발하는 데 사용되는 API가 포함된 "System.Web.dll" 어셈블리에 대한 참조를 추가해야 합니다. 오른쪽 솔루션 탐색기 트리 뷰의 프로젝트 노드 아래에서 "참조" 노드를 마우스 오른쪽 단추로 클릭하고 "참조 추가 ..."를 선택하고 .NET 탭에서 System.Web 어셈블리 버전 2.0(아래)을 선택합니다.

    System.Web.dll참조 추가

참고

IIS 특정 ASP.NET API를 활용하지 않으려는 경우 Windows XP 및 Windows Server 2003에서 System.Web 어셈블리 버전 2.0을 사용할 수 있습니다. 이 어셈블리를 참조하는 컴파일된 모듈 및 처리기는 문제 없이 Windows Vista 및 Windows Server 2008의 IIS에서 배포 및 작동할 수 있습니다. 모듈에서 몇 가지 IIS 특정 ASP.NET API를 사용하려면 Windows Vista, Windows Server 2008에서 개발하거나 .NET Framework 3.5에서 System.Web.dll 어셈블리를 가져와야 합니다. IIS 특정 API에는 HttpServerUtility.TransferRequest, HttpResponse.Headers 컬렉션, HttpApplication.LogRequest 이벤트 등이 포함됩니다.

코드 작성: 간단한 모듈 빌드

첫 번째 작업은 간단한 모듈을 빌드하는 것입니다. 문서의 뒷부분에서 샘플 처리기도 빌드합니다.

모듈을 만들려면 System.Web.IHttpModule 인터페이스를 구현하는 클래스를 정의합니다.

  1. 프로젝트 시스템에서 생성된 "class1.cs" 파일을 삭제하고 오른쪽 트리 보기에서 MyIIS7Project 프로젝트를 마우스 오른쪽 단추로 클릭하고 "추가", 새 항목"을 선택하고 "클래스"를 선택하고 이름 필드에 "MyModule.cs"를 입력하여 MyModule이라는 새 C# 클래스를 추가합니다.

  2. 해당 형식에 쉽게 액세스할 수 있도록 System.Web 네임스페이스를 가져옵니다.

  3. MyModule 클래스가 IHttpModule 인터페이스를 구현하고 인터페이스 멤버 Dispose() 및 Init()를 정의합니다. IHttpModule 인터페이스를 마우스 오른쪽 단추로 클릭하고 "인터페이스 구현" 옵션을 선택하여 이 작업을 신속하게 수행합니다.

    Visual Studio의 간단한 IHttpModule 클래스 Visual Studio

    Dispose() 메서드는 모듈이 언로드될 때 관리되지 않는 리소스를 결정적으로 클린 위한 것이므로 가비지 수집기에서 모듈 instance 완료하기 전에 리소스를 해제할 수 있습니다. 대부분의 경우 이 메서드를 비워 둘 수 있습니다.

    Init(HttpApplication 컨텍스트) 메서드는 관심 있는 기본 메서드입니다. 모듈의 초기화를 수행하고 모듈을 HttpApplication 클래스에서 사용할 수 있는 하나 이상의 요청 처리 이벤트에 연결합니다. 요청 처리 중에 모듈이 구독한 각 이벤트에 대해 호출되어 해당 서비스를 실행하고 수행할 수 있습니다. 이러한 작업을 하려면 다음을 수행합니다.

  4. 모듈 클래스의 메서드를 제공된 httpApplication instance 이벤트 중 하나에 연결하여 하나 이상의 요청 처리 이벤트를 구독합니다. 메서드는 System.EventHandler 대리자 서명을 따라야 합니다. OnPreExecuteRequestHandler라는 새 메서드를 정의하고 이를 HttpApplication에 연결합니다. 서버가 요청에 대한 요청 처리기를 호출하기 직전에 발생하는 PreRequestRequestHandlerExecute 이벤트:

    public void Init(HttpApplication context) 
    { 
        context.PreRequestHandlerExecute += 
            newEventHandler(OnPreRequestHandlerExecute) 
    }
    

    Visual Studio에서 IHttpModule.Init() 구현 Visual Studio에서

    이 시점에서 모듈은 각 요청에 대해 PreRequestHandlerExecute 이벤트를 수신하도록 설정됩니다. 수신하려는 다른 모든 이벤트에 대해 이 작업을 반복할 수 있습니다.

  5. 이제 모듈에서 사용할 수 있는 ASP.NET API 중 일부를 사용하는 것을 보여 주는 유용한 작업을 수행합니다. 요청이 참조자 헤더를 지정하는지 확인하고, 이 헤더가 있으면 다른 웹 사이트에서 웹 사이트에 연결하는 것을 방지하는 바보 같은 방법으로 거부합니다. 처리기가 모든 요청에서 실행되기 직전에 호출되는 OnPreRequestHandlerExecute 메서드에서 이 작업을 수행합니다.

    public void OnPreRequestHandlerExecute (
       Object source, EventArgs e) 
    { 
       HttpApplication app = (HttpApplication)source; 
       HttpRequest    request = app.Context.Request; 
    
       if (!String.IsNullOrEmpty( request.Headers["Referer"] )) 
       { 
           throw new HttpException(403, 
                                                   "Uh-uh!"); 
       } 
    }
    

    IHttpModule 구현

    참고

    HttpApplication instance 원본 인수를 통해 모듈에 제공되며 캐스팅이 필요합니다. HttpContext 개체와 같은 HttpApplication instance 요청을 나타내는 포함된 HttpRequest 개체에서 나머지 요청 개체 모델에 액세스할 수 있습니다.

위의 코드는 Referrer 헤더가 지정되었는지 확인하고, 이 경우 403 권한 없는 오류 코드가 있는 요청을 거부합니다.

코드 작성: 간단한 처리기 빌드

다음 작업은 간단한 처리기를 빌드하는 것입니다. 이 문서의 앞부분에서 샘플 모듈을 빌드했습니다. 모듈을 빌드하는 방법을 읽어보려면 뒤로 이동합니다.

처리기를 만들려면 System.Web.IHttpHandler 인터페이스를 구현하는 클래스를 정의해야 합니다(페이지를 비동기적으로 실행하려면 System.Web.IHttpAsyncHandler를 구현할 수도 있음). 이러한 작업을 하려면 다음을 수행합니다.

  1. 아직 없는 경우 프로젝트 시스템에서 생성된 "class1.cs" 파일을 삭제하고 오른쪽 트리 보기에서 MyIIS7Project 프로젝트를 마우스 오른쪽 단추로 클릭하고 "추가", 새 항목"을 선택하고 "클래스"를 선택하고 이름 필드에 "MyHandler.cs"를 입력하여 MyHandler라는 새 C# 클래스를 추가합니다.

  2. 해당 형식에 쉽게 액세스할 수 있도록 System.Web 네임스페이스를 가져옵니다.

  3. MyHandler 클래스가 IHttpHandler 인터페이스를 구현하고 인터페이스 멤버 IsReusableProcessRequest()를 정의합니다. IHttpHandler 인터페이스를 마우스 오른쪽 단추로 클릭하고 "인터페이스 구현" 옵션을 선택하여 이 작업을 신속하게 수행할 수 있습니다.

    Visual Studio에서 IHttpHandler 인터페이스 구현 Visual Studio

    IsReusable()은 처리기 instance 후속 요청에 다시 사용할 수 있는지 여부를 나타냅니다. 경우에 따라 요청을 처리한 후 처리기가 다른 요청을 처리하는 잘못된 상태일 수 있습니다. 특히 이전 요청에 대한 데이터를 멤버 변수에 저장한 경우 그렇습니다. 런타임은 다시 사용할 수 있는 것으로 표시된 경우에도 처리기의 동일한 instance 사용하여 두 요청을 동시에 처리하지 않습니다. 처리기가 멤버 변수에 요청별 상태를 저장하지 않고 필요한 만큼 여러 번 호출되는 ProcessRequest 함수를 가질 수 있는 경우 이 속성을 true로 반환하여 재사용을 허용합니다.

    ProcessRequest() 메서드는 처리기의 기본 진입점입니다. 해당 역할은 제공된 HttpContext instance 사용할 수 있는 HttpRequest instance 지정된 요청을 처리하고 HttpContext에서 사용할 수 있는 HttpResponse instance 사용하여 적절한 응답을 생성하는 것입니다. ProcessRequest() 메서드는 ExecuteRequestHandler 요청 처리 단계 동안 런타임에서 호출되고 구성된 처리기 매핑에 따라 요청이 처리기에 매핑된 경우에만 호출됩니다. 이는 애플리케이션에 대한 모든 요청에 대한 알림을 받는 모듈과 다릅니다.

  4. 먼저 IsReusable 속성을 구현합니다. 처리기는 요청에 대한 멤버 상태를 저장하지 않으며 다른 요청으로 ProcessRequest()에 대한 여러 호출을 지원할 수 있으므로 true를 반환하여 재사용 가능한 것으로 표시합니다.

    public bool IsReusable
    {
        get { return true; }
    
  5. 마지막으로 처리기가 실제로 유용한 작업을 수행하도록 ProcessRequest() 메서드를 구현해 보겠습니다. 작업을 멋지고 간단하게 유지하기 위해 처리기는 필요에 따라 쿼리 문자열에 표준 시간대를 지정할 수 있도록 서버의 현재 시간을 반환합니다. 목표는 와 같은 http://myserver/time.tmURL을 요청하고 서버에서 현재 시간을 가져올 수 있도록 하는 것입니다. 또한 를 요청 http://myserver/time.tm?utc=true하여 보편적으로 조정된 시간을 사용할 수 있습니다. 구현은 다음과 같습니다.

    public void ProcessRequest(HttpContext context) 
    { 
        DateTime dt; 
        String useUtc = context.Request.QueryString["utc"]; 
        if (!String.IsNullOrEmpty(useUtc) && 
                useUtc.Equals("true")) 
        { 
            dt = DateTime.UtcNow; 
        } 
        else 
        { 
            dt = DateTime.Now; 
        } 
        context.Response.Write( 
            String.Format( "<h1>{0}</h1>", 
                           dt.ToLongTimeString() 
                           ) ); 
    }
    

    HttpRequest.QueryString 컬렉션을 사용하여 QueryString 변수를 검색하고 HttpResponse.Write 메서드를 사용하여 응답에 현재 시간을 작성합니다. 이는 처리기에서 수행할 수 있는 작업 종류의 샘플일 뿐입니다. HttpRequest 클래스는 요청에 대한 더 많은 정보를 제공하며 HttpResponse 클래스는 클라이언트에 반환된 응답을 형성하는 다양한 방법을 제공합니다.

    Visual Studio에서 IHttpHandler.ProcessRequest 구현 Visual Studio에서

처리기가 완료되었습니다.

코드 완료: 모듈/처리기 컴파일

이제 모듈 및 처리기가 구현되었으므로 ASP.NET 런타임에 로드할 수 있는 어셈블리로 컴파일할 수 있습니다. Visual Studio 또는 Visual Studio Express 사용하는 경우 "Ctrl-Shift-B"를 누르거나 프로젝트를 마우스 오른쪽 단추로 클릭하고 "빌드"를 선택하여 도구에서 직접 프로젝트를 컴파일합니다.

.DLL 어셈블리는 와 함께 ProjectDirectory>\bin\debug 폴더에 생성<됩니다. 프로젝트의 디버깅 단계 동안 예외에 소스 코드 줄을 포함하여 서버에서 어셈블리를 디버깅하는 데 사용할 수 있는 PDB 기호 파일입니다.

프로덕션 서버에 어셈블리를 업로드하는 경우 솔루션 노드를 마우스 오른쪽 단추로 클릭하고, Configuration Manager 선택하고, 형식을 디버그로 변경하여 솔루션 구성을 "릴리스"로 변경해야 합니다. 어셈블리의 릴리스 버전을 업로드합니다(PDB 파일을 숨김). 이렇게 하면 어셈블리에서 디버깅 정보가 제거되고 최적화되어 코드가 더 빨라집니다.

Visual Studio를 사용하지 않는 경우 프레임워크 런타임에 포함된 C# 명령줄 컴파일러를 사용하여 프로젝트를 컴파일합니다. 프로젝트를 컴파일하려면 명령줄 프롬프트를 엽니다(Windows Vista 또는 Windows Server 2008에 있는 경우 "관리자 권한으로 실행" 옵션을 사용하여 명령줄 프롬프트를 실행해야 함).

> %windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library /out:MyIIS7Project.dll /debug \*.cs /r:System.Web.dll

그러면 MyIIS7Project.DLL 및 MyIIS7Project.PDB 파일이 생성됩니다. 어셈블리의 릴리스 버전을 빌드하려면 /debug 스위치를 생략하고 /o 스위치를 포함하여 어셈블리를 최적화합니다.

서버에 어셈블리 배포

이제 사용자 지정 모듈 및 처리기를 구현했으므로 웹 애플리케이션에 배포합니다. 애플리케이션에 모듈 또는 처리기를 배포하는 여러 가지 방법과 필요에 맞게 배포를 조정하는 데 사용할 수 있는 다양한 구성 옵션이 있습니다. 아래에서 가장 기본적인 배포 단계를 보여 줍니다. 전체 서버에 대한 모듈/처리기를 배포하는 방법을 포함하여 배포 및 구성 옵션에 대한 자세한 내용은 시리즈의 다음 문서인 IIS 모듈 및 처리기 배포(출시 예정)를 참조하세요.

아래 단계에서는 모듈 및 처리기를 IIS 서버의 기존 애플리케이션에 배포한다고 가정합니다. 만든 애플리케이션이 없는 경우 일반적으로 에 있는 "기본 웹 사이트"의 루트 애플리케이션을 %systemdrive%\inetpub\wwwroot사용합니다. 아래 예제에서는 모듈 및 처리기를 기본 웹 사이트에 있는 "myiis7project"라는 애플리케이션에 배포합니다.

모듈 및 처리기를 배포하려면 먼저 구현이 포함된 어셈블리를 ASP.NET 애플리케이션에서 사용할 수 있도록 합니다.

  1. 애플리케이션의 루트에 있는 /BIN 디렉터리에 이전에 컴파일된 MyIIS7Project.dll 어셈블리를 복사합니다. 이 디렉터리가 없으면 만듭니다.

  2. 애플리케이션에 로드할 모듈 및 처리기를 구성합니다. 시작 메뉴를 통해 IIS7 관리 도구를 열고 시작/검색 상자에 inetmgr.exe 입력하고 Enter 키를 누릅니다. 도구에서 왼쪽 트리 보기에서 서버 노드를 두 번 클릭한 다음 "사이트" 노드를 확장하고 모듈 및 처리기를 추가할 사이트 또는 애플리케이션을 두 번 클릭합니다.

  3. "모듈" 기능 아이콘을 선택하고 "관리되는 모듈 추가 ..." 작업을 클릭하고 결과 대화 상자에서 모듈 이름(임의)과 정규화된 모듈 유형 "MyIIS7Modules.MyModule"을 입력합니다. 도구가 자동으로 bin에 어셈블리를 로드하고 IHttpModule 인터페이스를 구현하는 형식을 검색하므로 드롭다운 상자에서 형식을 선택할 수도 있습니다. 확인을 눌러 모듈을 추가합니다.

    IIS7 모듈 추가

  4. 사이트/애플리케이션 노드를 다시 두 번 클릭하고 "처리기 매핑" 기능 아이콘을 선택하여 처리기를 추가합니다. 그런 다음 "관리되는 처리기 추가" 작업을 클릭하고 결과 대화 상자에서 경로에 대해 "time.tm", 형식에 대해 "MyIIS7Modules.MyHandler", 이름(임의)에 "MyHandler"를 지정합니다. 다시 말하지만, 관리 도구가 어셈블리에서 이 형식을 자동으로 검색했기 때문에 형식이 드롭다운 상자에 있습니다. 확인을 눌러 처리기를 추가합니다.

    IIS7 처리기 추가

위의 작업으로 생성된 애플리케이션 구성은 MyModule 모듈을 애플리케이션에 로드하도록 구성하고(모든 요청에 대해 실행할 수 있음) MyHandler 처리기를 매핑하여 요청을 애플리케이션 내 의 time.tm URL에 처리합니다.

이 구성을 사용하면 모듈 및 애플리케이션을 IIS 통합 모드 애플리케이션에서만 실행할 수 있습니다. 모듈 및 처리기가 IIS의 클래식 모드 애플리케이션과 이전 버전의 IIS에서도 실행되도록 하려면 모듈 및 처리기에 대한 클래식 ASP.NET 구성도 추가해야 합니다. 또한 IIS 또는 이전 버전의 IIS에서 클래식 모드로 실행하는 경우 처리기를 사용하려면 .tm 확장을 IIS 스크립트맵에서 ASP.NET 매핑하는 스크립트 맵을 만들어야 하며, 모듈은 ASP.NET 매핑된 확장에 대한 요청에 대해서만 실행됩니다. 이에 대한 자세한 내용은 IIS 모듈 및 처리기 배포(출시 예정)를 참조하세요.

IIS 명령줄 도구, AppCmd.exe또는 스크립트 또는 관리 코드에서 IIS 구성을 조작하거나 구성을 web.config 파일에 직접 배치하여 모듈 및 처리기를 추가할 수도 있습니다. 이러한 추가 옵션은 IIS 모듈 및 처리기 배포(출시 예정)에서 자세히 설명합니다.

모듈 및 처리기 테스트

모듈/처리기를 배포하고 구성했습니다. 이제 테스트하려면 다음을 수행합니다.

  1. 애플리케이션에서 "time.tm"을 요청하여 처리기를 테스트합니다. 성공하면 서버의 현재 시간이 표시됩니다. 예를 들어 http://localhost/myiis7project/time.tm 기본 웹 사이트의 myiis7project 애플리케이션에 처리기를 배포할 때 애플리케이션에 요청합니다.

    처리기가 이 애플리케이션에 올바르게 배포된 경우 서버에 현재 시간이 표시됩니다.

    IIS7 처리기 테스트

    또한 시간을 UTC로 표시하도록 요청 http://localhost/myiis7project/time.tm?utc=true 합니다.

  2. 모듈을 테스트합니다. 애플리케이션에서 /time.tm URL에 연결하는 page.html 라는 간단한 html 페이지를 만듭니다.

    page.html

    <html>
      <body>
          <a href="time.tm">View current server time</a>
      </body>
    </html>
    

    그런 다음 링크를 표시하도록 http://localhost/myiis7project/page.html 요청합니다. 링크를 클릭하면 다음과 같은 오류가 발생합니다.

    IIS7 모듈 테스트

    위의 동일한 URL을 요청하지 않고 시간을 성공적으로 확인했는지 물어볼 수 있습니다. 이는 사용자가 브라우저에서 URL을 직접 입력하는 대신 웹 사이트로 이동하는 링크를 클릭할 때마다 브라우저에서 추가되는 참조 헤더를 지정하는 애플리케이션에 대한 요청을 거부하도록 모듈이 구성되었기 때문입니다. 따라서 URL을 직접 요청했을 때 해당 URL에 액세스할 수 있었지만 다른 페이지의 링크를 따라갔을 때 모듈에서 요청이 거부되었습니다.

요약

이 문서에서는 친숙한 ASP.NET API를 사용하여 IIS 모듈 및 처리기를 개발하고 애플리케이션에 배포하기 위한 기본 단계를 설명했습니다. 또한 개발 환경에 대한 선택 사항과 모듈과 처리기를 빌드할 시기를 결정하는 방법에 대해서도 설명했습니다. 이 문서의 정보를 통해 IIS 애플리케이션에 권한을 부여하는 첫 번째 모듈 및 처리기를 빌드할 수 있습니다.

ASP에 대한 기본 인증을 사용하도록 설정하는 예제 모듈을 검토할 수도 있습니다. .NET을 사용하여 모듈 개발에서 NET의 멤버 자격 공급자.

관리되는 IIS 모듈 및 처리기가 애플리케이션에 가치를 추가하는 방법에 대한 더 많은 예제를 검사 HttpRedirection 모듈을 사용하여 애플리케이션에 대한 리디렉션 요청, DirectoryListingModule을 사용하여 IIS 웹 사이트에 대한 멋진 디렉터리 목록 가져오기IconHandler를 사용하여 ASP.NET 애플리케이션에 예쁜 파일 아이콘 표시를 방문하여 애플리케이션에 대해 다운로드해야 합니다.