Visual C# .NET Kullanarak ASP.NET Parça Önbelleği Gerçekleştirme

Bu makalede, ASP.NET'de Visual C# .NET kullanılarak Parça Önbelleğe Alma işleminin nasıl gerçekleştirilmesi açıklanır.

Orijinal ürün sürümü: Microsoft ASP.NET
Özgün KB numarası: 308378

Özet

Bu makalede, ASP.NET parça önbelleğinin nasıl uygulandığı gösterilmektedir. Parça önbelleğe alma aslında bir Web Formunun kod parçalarını doğrudan önbelleğe almaz; parça önbelleğe alma, bir Web Formu içindeki tek tek kullanıcı denetimlerinin (.ascx) önbelleğe alınmasını ifade eder. Her kullanıcı denetimi, önbelleğe alma davranışının nasıl uygulanacağını gösteren bağımsız önbellek sürelerine ve uygulamalarına sahip olabilir. Bu makaledeki örnek kodda bu işlevselliğin nasıl elde edileci gösterilmektedir.

Parça önbelleğe alma, bir sayfanın yalnızca bir alt kümesini önbelleğe almanız gerektiğinde kullanışlıdır. Gezinti çubukları, üst bilgi ve alt bilgiler parça önbelleği için iyi adaylardır.

Gereksinimler

  • Windows 2000
  • Internet Information Server (IIS)
  • .NET Framework
  • ASP.NET

C# .NET kullanarak ASP.NET Web uygulaması oluşturma

Aşağıdaki adımlarda FragmentCache adlı yeni bir ASP.NET Web uygulamasının nasıl oluşturulacağı gösterilmektedir.

  1. Visual Studio .NET'i açma

  2. Dosya menüsünde, Yeni'nin üzerine gelin ve Proje'ye tıklayın.

  3. Yeni Proje iletişim kutusunda, Proje Türleri'nin altında Visual C# Projeleri'ne tıklayın ve ardından Şablonlar'ın altında Web Uygulaması'nı ASP.NET tıklayın.

  4. Ad kutusuna FragmentCache yazın. Konum kutusunda uygun sunucuyu seçin. Yerel sunucuyu kullanıyorsanız, sunucu adını olarak http://localhostbırakabilirsiniz.

Kullanıcı denetimlerini oluşturma

Bu bölümde, bu makalede kullanacağınız her kullanıcı denetiminin örnek kodu ve açıklamaları sağlanır. Örnek kodu kopyalayıp açıklandığı gibi associated.ascx dosyasına ve arka planda kod sayfasına yapıştırabilirsiniz.

Kullanıcı denetimi 1 (FragmentCtrl1.ascx)

Aşağıdaki kullanıcı denetimi FragmentCtrl1.ascx basittir. FragmentCtrl1.ascx , öğe için önbellek girişinin gerçekleştiği zamanı yazar. Bu makale için oluşturulan tüm denetimlerde olduğu gibi, sonraki bölümlerde çalışma zamanında ayarları ve ilişkili davranışları ayırt etmek için denetim için temel bir açıklama sağlanır.

  1. Visual Studio .NET'te aşağıdaki gibi yeni bir kullanıcı denetimi oluşturun:

    1. Çözüm Gezgini'daproje düğümüne sağ tıklayın, Ekle'nin üzerine gelin ve Web Kullanıcısı Denetimi Ekle'ye tıklayın.
    2. Denetimi FragmentCtrl1.ascx olarak adlandırın ve Aç'a tıklayın.
  2. Tasarım sekmesinin seçili olduğundan emin olun. Araç kutusunun Web Forms bölümünden bir Web Formu Etiketi denetimine tıklayıp sürükleyin ve Etiket denetimini sayfaya bırakın.

  3. Etiket denetimine tıklayın. Visual Studio .NET tümleşik geliştirme ortamının (IDE) Özellikler bölmesinde, ID özelliğine CacheEntryTime yazın ve Text özelliğini boş bırakın.

  4. HTML görünümüne geçin ve sayfanın en üstüne aşağıdaki @ OutputCache yönergeyi ekleyin:

    <%@ OutputCache Duration="40" VaryByParam="none"%>
    
  5. .ascx dosyasına sağ tıklayın ve ardından Arka planda kod sayfa kaynağını görüntülemek için Kodu Görüntüle'ye tıklayın.

  6. Etiketin Text özelliğini ayarlayan CacheEntryTime olaya aşağıdaki kodu Page_Load ekleyin:

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

Kullanıcı denetimi 2 (FragmentCtrl2.ascx)

Birden çok kullanıcı denetiminin aynı sayfada nasıl bağımsız davranışlara sahip olabileceğini göstermek için ilk denetimin farklı bir önbellek süresine sahip başka bir sürümünü oluşturabilirsiniz ancak bu bölüm ikinci denetimi ( FragmentCtrl2.ascx) daha ilginç hale getirir. FragmentCtrl2.ascx , VaryByControl özniteliğini tanıtmak için kullanılır. VaryByControl , belirtilen denetimin değerlerine göre farklı önbellek girdileri yapılmasına izin verir. Bu işlev, sonraki bölümde çalışma zamanında çok daha net hale getiriliyor.

  1. Visual Studio .NET'te aşağıdaki gibi yeni bir kullanıcı denetimi oluşturun:

    1. Çözüm Gezgini'daproje düğümüne sağ tıklayın, Ekle'nin üzerine gelin ve Web Kullanıcısı Denetimi Ekle'ye tıklayın.
    2. Denetimi FragmentCtrl2.ascx olarak adlandırın ve Aç'a tıklayın.
  2. Tasarım sekmesinin seçili olduğundan emin olun. Araç kutusunun Web Forms bölümünden bir Web Formu Etiketi denetimine tıklayıp sürükleyin ve ardından Etiket denetimini sayfaya bırakın.

  3. Etiket denetimine tıklayın. Özellikler bölmesinde, ID özelliğine CacheEntryTime yazın ve Text özelliğini boş bırakın.

  4. İmleci Etiket denetiminin hemen arkasına getirin ve ardından sayfada bir sonraki satıra geçmek için ENTER tuşuna basın.

  5. Araç kutusunun Web Forms bölümünden bir Web Formu RadioButtonList denetimine tıklayıp sürükleyin ve bunu sayfaya bırakın. RadioButtonList denetimi, Etiket denetiminden sonraki satırda tek başına görünmelidir.

  6. RadioButtonList denetimine tıklayın. Özellikler bölmesinde, Id özelliğine MyRadioButtonList yazın.

  7. Özellikler bölmesinde MyRadioButtonList denetiminin Items özelliğini bulun, Koleksiyon'a tıklayın ve koleksiyon'un yanında görüntülenen üç nokta (...) düğmesine tıklayın.

  8. ListItem Koleksiyonu Düzenleyici penceresinde ListItem üyelerini aşağıdaki gibi ekleyin:

    1. Üyeler'in altında Ekle'ye tıklayın.
    2. ListItem özellikleri bölümünde, Metin ve Değer'iEvet olarak, Seçili'yide True olarak ayarlayın.
    3. Üyeler'in altında Yeniden Ekle'ye tıklayın.
    4. ListItem özellikleri bölümünde Metin ve Değer'iHayır, Seçili'yiise False olarak ayarlayın.
    5. Üyeler'in altında Son bir kez ekle'ye tıklayın.
    6. ListItem özellikleri bölümünde, Metin ve Değer'iBelki, Seçili'yiise False olarak ayarlayın.
    7. Tasarım görünümünde .ascx dosyasına dönmek için Tamam'a tıklayın. RadioButtonList denetiminde bulunan üç radyo düğmesinin göründüğüne dikkat edin: Evet, Hayır ve Belki.
  9. İmleci RadioButtonList denetiminin hemen arkasına getirin ve sayfada bir sonraki satıra gitmek için ENTER tuşuna basın.

  10. Araç kutusunun Web Forms bölümünden bir Web Formu Düğmesi denetimine tıklayıp sürükleyin ve bunu sayfaya bırakın. Düğme denetimi, RadioButtonList denetiminden sonraki satırda tek başına görünmelidir.

  11. Düğme denetimine tıklayın. Özellikler bölmesinde, Metin özelliğine Gönder yazın.

  12. HTML görünümüne geçin ve sayfanın en üstüne aşağıdaki @OutputCache yönergeyi ekleyin:

    <%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="MyRadioButtonList"%>
    
  13. .ascx dosyasına sağ tıklayın ve ardından Arka planda kod sayfa kaynağını görüntülemek için Kodu Görüntüle'ye tıklayın.

  14. Etiketin Text özelliğini ayarlayan CacheEntryTime olaya aşağıdaki kodu Page_Load ekleyin:

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

Kullanıcı denetimlerini içerecek Web Formunu oluşturma

Artık yeni geliştirilen kullanıcı denetimini içerecek şekilde Web Formu (.aspx) oluşturabilirsiniz. Web Formu oluşturmak için şu adımları izleyin:

  1. Visual Studio .NET'te projenize aşağıdaki gibi FragmentCaching.aspx adlı yeni bir Web Formu ekleyin:

    1. Çözüm Gezgini'daproje düğümüne sağ tıklayın, Ekle'nin üzerine gelin ve Web Formu Ekle'ye tıklayın.
    2. Web Formu FragmentCaching.aspx adlandırın ve Aç'a tıklayın.
  2. Tasarım sekmesinin seçili olduğundan emin olun. Araç kutusunun Web Forms bölümünden bir Web Formu Etiketi denetimine tıklayıp sürükleyin ve bunu sayfaya bırakın.

  3. Etiket denetimine tıklayın. Özellikler bölmesinde, Id özelliğine Time yazın ve Text özelliğini boş bırakın.

  4. İmleci Etiket denetiminin hemen arkasına getirin ve sayfada bir sonraki satıra gitmek için ENTER tuşuna basın.

  5. FragmentCtrl1.ascx dosyasını sürükleyin ve Etiket denetiminden sonra tek başına konumlandırılmış olması için Web Formu'na bırakın. İmleci denetimin hemen arkasına getirin ve sayfada bir sonraki satıra gitmek için ENTER tuşuna basın.

  6. FragmentCtrl2.ascx dosyasını sürükleyin ve Tek başına bir satırda FragmentCtrl1.ascx'in arkasına yerleştirilerek Web Formu'na bırakın.

  7. HTML görünümünde, Web Formu aşağıdaki koda benzer şekilde görünmelidir:

    <%@ 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>
    

    Not

    Denetimlerin

  8. .aspx dosyasına sağ tıklayın ve ardından Arka planda kod sayfa kaynağını görüntülemek için Kodu Görüntüle'ye tıklayın.

  9. Etiketin Text özelliğini ayarlayan Time olaya aşağıdaki kodu Page_Load ekleyin:

    private void Page_Load(object sender, System.EventArgs e)
    {
        Time.Text = "WebFormTime: " + DateTime.Now.TimeOfDay.ToString();
    }
    
  10. Kullanıcı denetimlerini, Web Formunu ve diğer ilişkili proje dosyalarını kaydetmek için Dosya menüsünde Tümünü Kaydet'e tıklayın.

  11. Visual Studio .NET tümleşik geliştirme ortamındaki (IDE) Derlememenüsünden, projeyi derlemek için Oluştur'a tıklayın.

Örneği çalıştırma

Bu bölümde, önbelleğe alma davranışına tanık olmak için kodun çalışma zamanında nasıl görüntülendiğini gösterir ve sonra kodun neden bu şekilde çalıştığını kısaca açıklar.

  1. Visual Studio .NET IDE Çözüm Gezgini, FragmentCaching.aspx Web Formu'na sağ tıklayın ve kodu çalıştırmak için Tarayıcıda Görüntüle'ye tıklayın.

  2. Sayfa tarayıcıda göründükten sonra sayfaya sağ tıklayın ve sonra sayfayı yenilemek için Yenile'ye tıklayın. Sayfayı Visual Studio .NET IDE dışında bir tarayıcıda görüntülüyorsanız, sayfayı yenilemek için F5 tuşuna da basabilirsiniz.

    Not

    Web Formu'nda saat güncelleştirildi, ancak kullanıcı denetimleri yine de ilişkili önbellek girdisinin yapıldığı zamanı görüntüler.

  3. İkinci denetimde Gönder'e tıklayın. Denetimin güncelleştirilmiş bir zaman görüntülediğine dikkat edin. Bu, RadioButtonList denetimine başvuran kullanıcı denetimi için VaryByControl öznitelik ayarına yanıt olarak sağlanır.

  4. Hayır'a tıklayın ve sonra yeniden Gönder'e tıklayın.

    Not

    Saat, kullanıcı denetiminin ekranında yeniden güncelleştirilir. Bunun nedeni, denetim için bu Değer yok ayarına göre yeni bir önbellek girişi yapılmasıdır. Belki seçeneği dışında bu adımı yineleyin. Aynı davranışı görüyorsunuz.

  5. Evet'e tıklayın ve sonra yeniden Gönder'e tıklayın. Bu işlemi Hayır ve Belki seçenekleriyle yineleyin.

    Bu denetim seçimleri önbelleğe alınır ve önceki önbellek giriş zamanını görüntüler. @ OutputCache yönergesinin süre ayarından sonra Gönder'e tıklamaya devam ederseniz, kullanıcı denetiminin saati RadioButtonList denetimi için belirli her değer seçimi için güncelleştirilir.

Not

Parça önbelleği için tüm olası ayarları ve senaryoları ele almak bu makalenin amacı değildir.

Sorun giderme

  • Çıkış önbelleğe alınmış bir kullanıcı denetimini program aracılığıyla işlemeye çalışmayın. Bunun nedeni, denetimin yalnızca önbellek girişi gerçekleşmeden önce ilk kez çalıştırıldığında dinamik olarak oluşturulmasıdır. Çıkış önbelleği, denetimin süresi dolana kadar diğer tüm istekleri karşılar.

  • Kullanıcı denetimlerinin barındırıldığı Web Formunun, kullanıcı denetimlerinin süre sürelerinden daha uzun bir çıkış önbelleği süresi varsa, Web Formu'nun ayarı denetimlerin önbelleğe alma davranışını belirler.