Visual C# .NET을 사용하여 ASP.NET 조각 캐싱 수행

이 문서에서는 Visual C# .NET을 사용하여 ASP.NET 조각 캐싱을 수행하는 방법을 설명합니다.

원래 제품 버전: Microsoft ASP.NET
원래 KB 번호: 308378

요약

이 문서에서는 ASP.NET 조각 캐싱을 구현하는 방법을 보여 줍니다. 조각 캐싱은 실제로 웹 양식의 코드 조각을 직접 캐시하지 않습니다. 조각 캐싱은 웹 양식 내의 개별 사용자 컨트롤(.ascx)의 캐싱을 나타냅니다. 각 사용자 컨트롤에는 캐싱 동작을 적용하는 방법에 대한 독립적인 캐시 기간 및 구현이 있을 수 있습니다. 이 문서의 샘플 코드는 이 기능을 구현하는 방법을 보여 줍니다.

조각 캐싱은 페이지의 하위 집합만 캐시해야 하는 경우에 유용합니다. 탐색 모음, 머리글 및 바닥글은 조각 캐싱에 적합한 후보입니다.

요구 사항

  • Windows 2000
  • IIS(인터넷 정보 서버)
  • .NET Framework
  • ASP.NET

C# .NET을 사용하여 ASP.NET 웹 애플리케이션 만들기

다음 단계에서는 FragmentCache라는 새 ASP.NET 웹 애플리케이션을 만드는 방법을 보여 줍니다.

  1. Visual Studio .NET 열기

  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.

  3. 새 프로젝트 대화 상자의 프로젝트 형식에서 Visual C# 프로젝트를 클릭한 다음 템플릿에서 ASP.NET 웹 애플리케이션 클릭합니다.

  4. 이름 상자에 FragmentCache를 입력합니다. 위치 상자에서 적절한 서버를 선택합니다. 로컬 서버를 사용하는 경우 서버 이름을 로 http://localhost둘 수 있습니다.

사용자 컨트롤 만들기

이 섹션에서는 이 문서에서 사용할 각 사용자 컨트롤에 대한 샘플 코드와 설명을 제공합니다. 설명된 대로 샘플 코드를 복사하여 associated.ascx 파일 및 코드 숨김 페이지에 붙여넣을 수 있습니다.

사용자 컨트롤 1(FragmentCtrl1.ascx)

다음 사용자 컨트롤 FragmentCtrl1.ascx는 간단합니다. FragmentCtrl1.ascx 는 항목에 대한 캐시 항목이 발생하는 시간을 기록합니다. 이 문서에 대해 만들어진 모든 컨트롤과 마찬가지로 이후 섹션에서 런타임에 설정 및 관련 동작을 보다 쉽게 구분할 수 있도록 컨트롤에 대한 기본 설명이 제공됩니다.

  1. Visual Studio .NET에서 다음과 같이 새 사용자 컨트롤을 만듭니다.

    1. 솔루션 탐색기프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 웹 사용자 컨트롤 추가를 클릭합니다.
    2. 컨트롤 이름을 FragmentCtrl1.ascx로 지정하고 열기를 클릭합니다.
  2. 디자인 탭이 선택되어 있는지 확인합니다. 도구 상자의 Web Forms 섹션에서 웹 양식 레이블 컨트롤을 클릭하고 끌어서 페이지에 레이블 컨트롤을 놓습니다.

  3. 레이블 컨트롤을 클릭합니다. Visual Studio .NET IDE(통합 개발 환경)의 속성 창에서 ID 속성에 CacheEntryTime을 입력하고 Text 속성을 비워 둡니다.

  4. HTML 보기로 전환하고 페이지 맨 위에 다음 @ OutputCache 지시문을 추가합니다.

    <%@ OutputCache Duration="40" VaryByParam="none"%>
    
  5. .ascx 파일을 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 클릭하여 코드 숨김 페이지 원본을 표시합니다.

  6. 레이블 Text 의 속성을 설정하는 CacheEntryTime 이벤트에 다음 코드를 Page_Load 추가합니다.

    private void Page_Load(object sender, System.EventArgs e)
    {
        CacheEntryTime.Text ="FragmentCtrl1: " + DateTime.Now.TimeOfDay.ToString();
    }
    

사용자 컨트롤 2(FragmentCtrl2.ascx)

여러 사용자 컨트롤이 동일한 페이지에서 독립적인 동작을 가질 수 있는 방법을 보여주기 위해 캐시 기간이 다른 첫 번째 컨트롤의 다른 버전을 만들 수 있지만 이 섹션에서는 두 번째 컨트롤 인 FragmentCtrl2.ascx를 더 흥미롭게 만듭니다. FragmentCtrl2.ascxVaryByControl 특성을 도입하는 데 사용됩니다. VaryByControl 을 사용하면 지정된 컨트롤의 값에 따라 다른 캐시 항목을 만들 수 있습니다. 이 기능은 다음 섹션에서 런타임에 훨씬 더 명확해졌습니다.

  1. Visual Studio .NET에서 다음과 같이 새 사용자 컨트롤을 만듭니다.

    1. 솔루션 탐색기프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 웹 사용자 컨트롤 추가를 클릭합니다.
    2. 컨트롤 이름을 FragmentCtrl2.ascx로 지정하고 열기를 클릭합니다.
  2. 디자인 탭이 선택되어 있는지 확인합니다. 도구 상자의 Web Forms 섹션에서 웹 양식 레이블 컨트롤을 클릭하고 끌어온 다음 레이블 컨트롤을 페이지로 놓습니다.

  3. 레이블 컨트롤을 클릭합니다. 속성 창의 ID 속성에 CacheEntryTime을 입력하고 Text 속성을 비워 둡니다.

  4. 레이블 컨트롤 바로 뒤에 커서를 놓고 Enter 키를 눌러 페이지의 다음 줄로 이동합니다.

  5. 도구 상자의 Web Forms 섹션에서 Web Form RadioButtonList 컨트롤을 클릭하고 끌어 페이지에 놓습니다. RadioButtonList 컨트롤은 레이블 컨트롤 뒤의 줄에 단독으로 표시됩니다.

  6. RadioButtonList 컨트롤을 클릭합니다. 속성 창의 ID 속성에 MyRadioButtonList를 입력합니다.

  7. 속성 창에서 MyRadioButtonList 컨트롤의 Items 속성을 찾아 컬렉션을 클릭한 다음 컬렉션 옆에 표시되는 줄임표(...) 단추를 클릭합니다.

  8. ListItem 컬렉션 편집기 창에서 다음과 같이 ListItem 멤버를 추가합니다.

    1. 구성원 아래에서 추가를 클릭합니다.
    2. ListItem 속성 섹션에서 텍스트값을예로 설정하고 선택됨True로 설정합니다.
    3. 구성원 아래에서 추가를 다시 클릭합니다.
    4. ListItem 속성 섹션에서 텍스트값을아니요로 설정하고 선택됨False로 설정합니다.
    5. 구성원 아래에서 마지막으로 추가를 클릭합니다.
    6. ListItem 속성 섹션에서 텍스트값을Maybe로 설정하고 Selected를False로 설정합니다.
    7. 확인을 클릭하여 디자인 보기에서 .ascx 파일로 돌아갑니다. RadioButtonList 컨트롤에 포함된 세 개의 라디오 단추가 나타납니다. , 아니요, 어쩌면
  9. RadioButtonList 컨트롤 바로 뒤에 커서를 놓고 Enter 키를 눌러 페이지의 다음 줄로 이동합니다.

  10. 도구 상자의 Web Forms 섹션에서 웹 양식 단추 컨트롤을 클릭하고 끌어 페이지에 놓습니다. Button 컨트롤은 RadioButtonList 컨트롤 뒤 줄에 단독으로 표시됩니다.

  11. 단추 컨트롤을 클릭합니다. 속성 창의 Text 속성에 Submit을 입력합니다.

  12. HTML 보기로 전환하고 페이지 맨 위에 다음 @OutputCache 지시문을 추가합니다.

    <%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="MyRadioButtonList"%>
    
  13. .ascx 파일을 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 클릭하여 코드 숨김 페이지 원본을 표시합니다.

  14. 레이블 Text 의 속성을 설정하는 CacheEntryTime 이벤트에 다음 코드를 Page_Load 추가합니다.

    private void Page_Load(object sender, System.EventArgs e)
    {
        CacheEntryTime.Text = "FragmentCtrl2: " + DateTime.Now.TimeOfDay.ToString();
    }
    

사용자 컨트롤을 포함할 웹 양식 만들기

이제 새로 개발된 사용자 컨트롤을 포함하도록 웹 양식(.aspx)을 만들 수 있습니다. 웹 양식을 만들려면 다음 단계를 수행합니다.

  1. 다음과 같이 visual Studio .NET의 프로젝트에 FragmentCaching.aspx 라는 새 웹 양식을 추가합니다.

    1. 솔루션 탐색기프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 웹 양식 추가를 클릭합니다.
    2. 웹 양식 FragmentCaching.aspx 이름을 지정한 다음 열기를 클릭합니다.
  2. 디자인 탭이 선택되어 있는지 확인합니다. 도구 상자의 Web Forms 섹션에서 웹 양식 레이블 컨트롤을 클릭하고 끌어 페이지에 놓습니다.

  3. 레이블 컨트롤을 클릭합니다. 속성 창에서 ID 속성에 Time을 입력하고 Text 속성을 비워 둡니다.

  4. 레이블 컨트롤 바로 뒤에 커서를 놓고 Enter 키를 눌러 페이지의 다음 줄로 이동합니다.

  5. FragmentCtrl1.ascx를 끌어서 줄의 레이블 컨트롤 다음에 배치되도록 웹 양식에 놓습니다. 컨트롤 바로 뒤에 커서를 놓고 Enter 키를 눌러 페이지의 다음 줄로 이동합니다.

  6. FragmentCtrl2.ascx를 끌어서 줄 자체의 FragmentCtrl1.ascx 다음에 배치되도록 웹 양식에 놓습니다.

  7. HTML 보기에서 웹 양식은 다음 코드와 유사하게 표시됩니다.

    <%@ Page language ="c#" Codebehind="FragmentCaching.aspx.cs"
       AutoEventWireup="false" Inherits="FragmentCache.FragmentCaching" %>
    <%@ Register TagPrefix="uc1" TagName="FragmentCtrl1" Src="FragmentCtrl1.ascx" %>
    <%@ Register TagPrefix="uc1" TagName="FragmentCtrl2" Src="FragmentCtrl2.ascx" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
       <HEAD>
          <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
          <meta name="CODE_LANGUAGE" Content="C#">
          <meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)">
          <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
       </HEAD>
       <body>
          <form id="FragmentCaching" method="post" runat="server">
             <P>
                WebForm Time:
                <asp:Label id="Time" runat="server" ForeColor="Blue"></asp:Label>
             </P>
             <P>
                <uc1:FragmentCtrl1 id="FragmentCtrl11" runat="server">
                </uc1:FragmentCtrl1>
             </P>
             <P>
                <uc1:FragmentCtrl2 id="FragmentCtrl21" runat="server">
                </uc1:FragmentCtrl2>
             </P>
          </form>
       </body>
    </HTML>
    

    참고

    컨트롤이 에 배치되어 있는지 확인합니다.

  8. .aspx 파일을 마우스 오른쪽 단추 로 클릭한 다음 코드 보기를 클릭하여 코드 숨김 페이지 원본을 표시합니다.

  9. 레이블 Text 의 속성을 설정하는 Time 이벤트에 다음 코드를 Page_Load 추가합니다.

    private void Page_Load(object sender, System.EventArgs e)
    {
        Time.Text = "WebFormTime: " + DateTime.Now.TimeOfDay.ToString();
    }
    
  10. 파일 메뉴에서 모두 저장을 클릭하여 사용자 컨트롤, 웹 양식 및 기타 연결된 프로젝트 파일을 저장합니다.

  11. Visual Studio .NET IDE(통합 개발 환경)의 빌드 메뉴에서 빌드를 클릭하여 프로젝트를 빌드합니다.

샘플 실행

이 섹션에서는 런타임에 코드를 보고 캐싱 동작을 감시하는 방법을 보여 줍니다. 그런 다음 코드가 수행하는 방식을 수행하는 이유를 간략하게 설명합니다.

  1. Visual Studio .NET IDE 솔루션 탐색기 FragmentCaching.aspx 웹 양식을 마우스 오른쪽 단추로 클릭한 다음 브라우저에서 보기를 클릭하여 코드를 실행합니다.

  2. 페이지가 브라우저에 표시되면 페이지를 마우스 오른쪽 단추로 클릭한 다음 새로 고침 을 클릭하여 페이지를 새로 고칩니다. Visual Studio .NET IDE 외부에 있는 브라우저에서 페이지를 보는 경우 F5 키를 눌러 페이지를 새로 고칠 수도 있습니다.

    참고

    웹 양식의 시간이 업데이트되었지만 사용자 컨트롤은 연결된 캐시 항목이 만들어진 시간을 계속 표시합니다.

  3. 두 번째 컨트롤에서 제출을 클릭합니다. 컨트롤에 업데이트된 시간이 표시됩니다. 이는 RadioButtonList 컨트롤을 참조하는 사용자 컨트롤에 대한 VaryByControl 특성 설정에 대한 응답입니다.

  4. 아니요를 클릭한 다음 제출을 다시 클릭합니다.

    참고

    사용자 컨트롤의 디스플레이에서 시간이 다시 업데이트됩니다. 이 값 없음 설정에 따라 컨트롤에 대해 새 캐시 항목이 만들어지 때문입니다. Maybe 옵션을 제외하고 이 단계를 반복합니다. 동일한 동작이 표시됩니다.

  5. 예를 클릭한 다음 제출을 다시 클릭합니다. 아니요어쩌면 옵션을 사용하여 이 작업을 반복합니다.

    컨트롤에 대한 이러한 선택 항목은 캐시되며 이전 캐시 진입 시간을 표시합니다. @OutputCache 지시문의 기간 설정을 지나서 제출을 계속 클릭하면 RadioButtonList 컨트롤에 대한 각 특정 값 선택에 대한 사용자 컨트롤의 시간이 업데이트됩니다.

참고

조각 캐싱에 대해 가능한 모든 설정과 시나리오를 다루는 것은 이 문서의 목표가 아닙니다.

문제 해결

  • 출력 캐시된 사용자 컨트롤을 프로그래밍 방식으로 조작하지 마세요. 이는 컨트롤이 캐시 항목이 발생하기 전에 처음 실행된 경우에만 동적으로 생성되기 때문입니다. 출력 캐시는 컨트롤이 만료될 때까지 다른 모든 요청을 충족합니다.

  • 사용자 컨트롤이 호스트되는 웹 폼에 사용자 컨트롤의 기간 시간보다 긴 출력 캐시 기간이 있는 경우 웹 양식의 설정은 컨트롤의 캐싱 동작을 지시합니다.