Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

SO WIRD'S GEMACHT: Steuerung des Seitenausgabe-Caching in ASP.NET mit Visual C# .NET

Dieser Artikel wurde zuvor veröffentlicht unter D308375
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
308375 HOW TO: Control Page Output Caching in ASP.NET Using Visual C# .NET
In Artikel 308516 wird dieses Thema für Microsoft Visual Basic .NET behandelt.
Hinweis: Die Verwendung der hier aufgeführten Informationen sowie Makro- oder Programmcodes geschieht auf Ihre eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionalität sowie ohne Anspruch auf Support zur Verfügung. Die zur Verfügung gestellten Makro- und Programmierungsbeispiele sollen lediglich exemplarisch die Funktionsweise des Beispiels aufzeigen.

Weitere Informationen zu den von Microsoft angebotenen Supportoptionen finden Sie unter folgender Internetadresse:
Zusammenfassung
Dieser Artikel beschreibt die Verwendung der @ OutputCache-Direktive zur Steuerung des Seitenausgabe-Caching in ASP.NET mit Visual C# .NET. Mit dieser Technik können Sie die am häufigsten besuchten Seiten Ihrer Website zwischenspeichern, was den Durchsatz Ihres Webservers beträchtlich erhöhen kann. Der Durchsatz wird im allgemeinen in Anforderungen pro Sekunde gemessen. Der Beispielcode in diesem Artikel zeigt die Verwendung der Attribute Duration und VaryByParam. Der Artikel enthält jedoch auch eine kurze Beschreibung anderer Ansätze, die Sie in Verbindung mit der @ OutputCache-Direktive verwenden können.

Hinweis: Es ist nicht Zweck dieses Artikels, alle Attribute der @ OutputCache-Direktive und ihre Verwendung im Detail zu beschreiben. Weitere Informationen finden Sie im Abschnitt Informationsquellen.

Zurück zum Anfang

Voraussetzungen

  • Microsoft Windows 2000 oder Windows XP
  • Microsoft .NET Framework
  • Microsoft Internet Information Server (IIS)
  • ASP.NET Premium Edition
Zurück zum Anfang

Einführung in die Direktive "@ OutputCache"

Um die @ OutputCache-Direktive zur Steuerung des Seitenausgabe-Caching zu verwenden, fügen Sie die Direktive einfach am Anfang der Seite hinzu. Die Methode Page.InitOutputCache übersetzt die Direktive in HttpCachePolicy-Klassenmethoden.

Die Direktive @ OutputCache enthält folgende Attribute und Einstellungen:
  • Duration: Dieses Attribut gibt an, wie lange ein Element im Speicher gehalten wird. Der Wert für Duration wird in Sekunden angegeben.
  • VaryByParam: Dieses Attribut bestimmt Cacheeinträge anhand von Get- oder Post-Parametern. Wenn z.B. eine QueryString-Variable namens testVal für das Attribut VaryByParam gesetzt ist, wird jede Seitenanforderung, die einen anderen Wert für testVal enthält, in einer separaten Seite zwischengespeichert. Der folgende Code zeigt die Syntax für das Attribut VaryByParam:
    <%@ OutputCache Duration="Seconds" VaryByParam="testVal"%>
    Hinweis: Sie können ein Sternchen angeben (*), damit alle verschiedenen Versionen des Elements zwischengespeichert werden. Sie können auch "none" angeben, wenn nur eine Version eines zwischengespeicherten Elements existiert.
  • Location: Dieses Attribut legt fest, wo das Element zwischengespeichert wird. Folgende Angaben sind möglich:
    • Any
    • Client
    • Downstream
    • Server
    • None

    Der folgende Code zeigt die Syntax für das Attribut Location:
    <%@ OutputCache Duration="Seconds" Location="Client" %>
  • Der folgende Code zeigt die Syntax für das Attribut VaryByCustom: Dieses Attribut enthält die Standardeinstellung Browser. Das bedeutet, dass für jede anfordernde Browserversion eine andere Instanz eines Elements zwischengespeichert wird. Beispiel: Sowohl Microsoft Internet Explorer 5 als auch Internet Explorer 5.5 fordern das Element an. Wenn VaryByCustom auf Browser gesetzt ist, gibt es für jede Browserversion einen Eintrag im Cache. Sie können das Caching für andere benutzerdefinierte Szenarien nicht über eine Zeichenfolge steuern. Die Zeichenfolge hat keine Bedeutung, es sei denn, Sie überschreiben die Methode HttpApplication.GetVaryByCustomString in der Datei "Global.asax" mit Code.

    Der folgende Code zeigt die Syntax für das Attribut VaryByCustom:
    <%@ OutputCache Duration="Seconds" VaryByCustom="string" %>
  • Der folgende Code zeigt die Syntax für das Attribut VaryByHeader: Dieses Attribut ermöglicht die Angabe eines bestimmten HTTP-Headerwertes als Kriterium für die verschiedenen Cacheeinträge. Der folgende Code zeigt die Syntax für das Attribut VaryByHeader:
    <%@ OutputCache Duration="60" VaryByHeader="Accept-Language" %>
Zurück zum Anfang

Beispiel: @ OutputCache Duration

Die folgende Vorgehensweise zeigt die Verwendung des Attributs Duration beim Seitenausgabe-Caching zur Angabe der Cachingdauer für ein Element.
  1. Erstellen Sie ein neues Visual Basic ASP.NET-Anwendungsprojekt:
    1. Öffnen Sie Visual Studio .NET.
    2. Zeigen Sie im Menü Datei auf Neu und klicken Sie auf Projekt.
    3. Klicken Sie im Dialogfeld Neues Projekt hinzufügen unter Projekttypen auf Visual C#-Projekte. Klicken Sie dann unter Vorlagen auf ASP.NET-Webanwendung. Im Textfeld Name geben Sie OutputCacheDemo ein. Klicken Sie auf OK.
  2. Erstellen Sie eine neue .aspx-Seite in Visual Studio .NET:
    1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten. Klicken Sie auf Hinzufügen und dann auf Web Form hinzufügen.
    2. Im Textfeld Name geben Sie OutputCacheDuration.aspx ein. Klicken Sie dann auf Öffnen.
  3. Löschen Sie den Standardcode, den Visual Studio .NET zur Seite hinzufügt.
  4. Markieren Sie den folgenden Code, klicken Sie mit der rechten Maustaste darauf und klicken Sie dann auf Kopieren. Klicken Sie in Visual Studio .NET im Menü Bearbeiten auf Als HTML einfügen, um den Code in die .aspx-Seite einzufügen:
    <%@ OutputCache Duration="20" VaryByParam="none"%><HTML>   <HEAD>   <script language="C#" runat="server">   void Page_Load(object sender, EventArgs e)    {	      Label1.Text = "Time: " + DateTime.Now.TimeOfDay.ToString();   }   </script>   </HEAD>   <body>      <STRONG>@ OutputCache Duration Sample</STRONG>      <hr>      <br>      <asp:Label id="Label1" runat="server">Label</asp:Label>      <br>   </body></HTML>
  5. Klicken Sie im Menü Datei auf OutputCacheDuration.aspx speichern, um die Seite zu speichern.
  6. Klicken Sie im Menü Erstellen in der integrierten Entwicklungsumgebung (IDE = Integrated Development Environment) auf Erstellen.
  7. Klicken Sie mit der rechten Maustaste im Projektmappen-Explorer auf OutputCacheDuration.aspx, um das Beispiel auszuführen. Klicken Sie dan auf Im Browser anzeigen.
  8. Wenn die Seite im Browser erscheint, achten Sie auf die angezeigte Zeit.
  9. Aktualisieren Sie die Seite im Browser. Die Zeit ist dieselbe wie vorher. Wenn Sie die Seite nach Ablauf der eingestellten Dauer von 20 Sekunden aktualisieren, wird eine neu zwischengespeicherte Version der Seite angezeigt.

    Hinweis: Wenn Sie die Seite in einem externen Browser anzeigen, können Sie die Seite mit F5 aktualisieren. Wenn Sie die Seite im internen Browser der Visual Studio .NET IDE anzeigen, können Sie mit der rechten Maustaste auf die Seite klicken und dann auf Aktualisieren klicken.
Zurück zum Anfang

Beispiel: @ OutputCache VaryByParam

Die folgende Vorgehensweise zeigt die Verwendung des Attributs VaryByParam beim Seitenausgabe-Caching, um verschiedene zwischengespeicherte Versionen einer Seite zu ermöglichen, basierend auf einem der Werte ihrer QueryString-Variable.
  1. Erstellen Sie eine neue .aspx-Seite in Visual Studio .NET:
    1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten. Klicken Sie auf Hinzufügen und dann auf Web Form hinzufügen.
    2. Im Textfeld Name geben Sie OutputCacheVaryByParam.aspx ein. Klicken Sie dann auf Öffnen.
  2. Löschen Sie den Standardcode, den Visual Studio .NET zur Seite hinzufügt.
  3. Markieren Sie den folgenden Code, klicken Sie mit der rechten Maustaste darauf und klicken Sie dann auf Kopieren. Klicken Sie in Visual Studio .NET im Menü Bearbeiten auf Als HTML einfügen, um den Code in die .aspx-Seite einzufügen:
    <%@ OutputCache Duration="20" VaryByParam="testVal"%><HTML>   <HEAD>      <script language="C#" runat="server">   void Page_Load(object sender, EventArgs e)    {	      Label1.Text = "Time: " + DateTime.Now.TimeOfDay.ToString();   }   </script>   </HEAD>   <body>      <P>         <STRONG>@ OutputCache VaryByParam Sample</STRONG>      </P>      <P>         <hr>      </P>      <P>         <br>         <asp:Label id="Label1" runat="server"></asp:Label>         <br>         <hr>         <a href=http://yourservername/OutputCacheDemo/OutputCacheVaryByParam.aspx?testVal=123">testVal(123)</a>         <br>         <a href=http://yourservername/OutputCacheDemo/OutputCacheVaryByParam.aspx?testVal=345">testVal(345)</a>      </P>   </body></HTML>
    Hinweis: Sie müssen die zwei Hyperlinks im obigen Code auf den Namen Ihres Webservers ändern. Möglicherweise stellen Sie auch fest, dass das Attribut VaryByParam variabel ist, basierend auf dem Wert der QueryString-Variable testVal. Das führt dazu, dass die Seitenausgabe für jede Instanz zwischengespeichert wird, bei der der Wert der QueryString-Variable für testVal derselbe ist.
  4. Klicken Sie im Menü Datei auf OutputCacheVaryByParam.aspx speichern, um die Seite zu speichern.
  5. Klicken Sie im Menü Erstellen in der IDE auf Erstellen.
  6. Klicken Sie mit der rechten Maustaste im Projektmappen-Explorer auf OutputCacheVaryByParam.aspx, um das Beispiel auszuführen. Klicken Sie dan auf Im Browser anzeigen.
  7. Wenn die Seite im Browser angezeigt wird, klicken Sie auf testVal(123). Dadurch geht der Browser zurück auf die Seite, wobei aber die QueryString-Variable testVal auf "123" gesetzt ist. Achten Sie auf die Zeit.
  8. Klicken Sie nochmals auf testVal(123). Die Zeit ist dieselbe wie vorher. Die Seitenausgabe wurde aufgrund des Wertes der Variable testVal zwischengespeichert.
  9. Klicken Sie auf testVal(345). Eine neue Zeit erscheint auf der Seite.
  10. Klicken Sie nochmals auf testVal(345). Die vorherige Seitenausgabe ist zwischengespeichert und wird im Browser angezeigt.
  11. Klicken Sie auf testVal(123), um zur ersten Instanz zurückzukehren. Beachten Sie, dass verschiedene Cacheversionen der Seitenausgabe erscheinen, basierend auf dem angegebenen Wert der Variable QueryString.
Zurück zum Anfang

Problembehandlung

  • Wenn Sie VaryByParam verwenden, denken Sie daran, dass Änderungen der Groß-/Kleinschreibung der Variable QueryString zusätzliche Cacheeinträge zur Folge haben.
  • Beachten Sie, dass Duration in Sekunden angegeben wird.
  • Wenn Sie VaryByCustom verwenden, die Methode HttpApplication.GetVaryByCustomString in der Datei "Global.asax" überschreiben und keine Entsprechung zu der benutzerdefinierten Zeichenfolge gefunden wird, die mit dem Attribut geliefert wird, wird die Standardeinstellung Browser verwendet.
Zurück zum Anfang
Informationsquellen
Weitere Informationen zum Seitenausgabe-Caching finden Sie auf folgenden Microsoft-Websites:Zurück zum Anfang
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Eigenschaften

Artikelnummer: 308375 – Letzte Überarbeitung: 05/30/2006 06:38:07 – Revision: 3.1

Microsoft ADO.NET 1.1, Microsoft ADO.NET 1.0, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition

  • kbgrpdsasp kbhowtomaster KB308375
Feedback
>=""> var varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write(" (language);" class="ng-binding" id="language-es-ve">Venezuela - Español
did=1&t=">=4050&did=1&t=">&did=1&t=">ment.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?"> w.location.protocol) + "//c.microsoft.com/ms.js'><\/script>");