Exemplarische Vorgehensweise: IIS 7.0 Output Caching
von Saad Ladki
Webinhalte können in zwei Kategorien unterteilt werden: statischer Inhalt und dynamischer Inhalt. Statischer Inhalt ändert sich nicht bei jeder Anforderung. Der Inhalt, der an den Webbrowser zurückgegeben wird, ist immer identisch. Beispiele für statische Inhalte sind HTML-, JPG- oder GIF-Dateien.
Die andere Kategorie ist der dynamische Inhalt. Dabei handelt es sich um die Antwort, die für Änderungen des dynamischen Inhalts bei jeder Anforderung generiert wird. Beispiele umfassen ASP.NET- oder PHP-Inhalte.
Es gibt eine große Spanne zwischen diesen beiden Kategorien, die semidynamische Inhalte enthält. Stellen Sie sich eine ASP.NET-Seite mit dynamischem Inhalt vor, die eine Datenbankabfrage ausführt. Diese Abfrage muss keinesfalls bei jeder Anforderung ausgeführt werden, wenn sich die zugrunde liegenden Datenbanktabellen selten ändern.
Das Output Caching-Feature von IIS ist auf semidynamische Inhalte ausgerichtet. Es ermöglicht Ihnen, statische Antworten für dynamische Anforderungen zwischenzuspeichern und eine enorme Skalierbarkeit zu erzielen.
Voraussetzungen
Für diese exemplarische Vorgehensweise benötigen Sie unter Windows® Vista SP1 oder Windows Server® 2008 Beta 3 oder höher IIS 7.0 oder höher. In dieser exemplarischen Vorgehensweise wird zudem das ASP.NET 2.0-Framework verwendet, das beim IIS-Setup als optionale Komponente installiert werden muss.
Übersicht über die exemplarische Vorgehensweise
In der folgenden exemplarischen Vorgehensweise wird die Schnittstelle zur Erweiterbarkeit von IIS verwendet, um JPG-Dateien sprachspezifische Copyrightvermerke hinzuzufügen.
Zunächst wird ein verwalteter Handler hinzugefügt. Das dynamische Einfügen eines Copyrightvermerks in jede JPG-Datei birgt jedoch einen Leistungsaufwand, da verwalteter Code jetzt für jede JPG-Datei ausgeführt werden muss.
Als Nächstes wird WCAT installiert. Dabei handelt es sich um ein Leistungsanalysetool für IIS, mit dem der Durchsatz des JPG-Copyrighthandlers gemessen wird.
Anschließend wird Output Caching hinzugefügt, um die Leistungsbeeinträchtigung aufzuwiegen, die durch das Hinzufügen des Copyrighthandlers entsteht.
Teil I: Schreiben und Konfigurieren des Copyrighthandlers
Erstellen Sie ein Verzeichnis namens „pictures“ als Unterverzeichnis von
%systemroot%\inetpub\wwwroot
. Führen Sie den folgenden Befehl in einer Befehlsshell mit erhöhten Rechten aus:md %systemdrive%\inetpub\wwwroot\pictures
Kopieren Sie einige digitale Bilder in das neue Bildverzeichnis. Bei dieser exemplarischen Vorgehensweise wird davon ausgegangen, dass es sich bei den Bildern um JPG-Dateien handelt.
Hinweis
Aufgrund der Einstellungen für hohe Sicherheit in Internet Explorer unter Windows Server 2008 wird Ihnen möglicherweise ein Sicherheitsdialogfeld angezeigt, das Sie darüber informiert, dass die Website blockiert wird. Fügen Sie wallpaper.iis7.org zur Liste der vertrauenswürdigen Websites hinzu, um das IIS-Hintergrundbild herunterzuladen.
Erstellen Sie eine Anwendung mit dem Befehlszeilentool appcmd.
%windir%\system32\inetsrv\appcmd add app -site.name:"Default Web Site" -path:/pictures -physicalPath:%systemdrive%\inetpub\wwwroot\pictures
Erstellen Sie das Verzeichnis App_Code als Unterverzeichnis von pictures:
md %systemdrive%\inetpub\wwwroot\pictures\App_Code
Öffnen Sie Editor, und fügen Sie den folgenden Code ein.
using System; using System.Web; using System.Drawing; using System.Drawing.Imaging; namespace IIS7Demos { public class imageCopyrightHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { string message = "Copyright © IIS 7.0 Team"; try { string languageHeader; languageHeader = context.Request.Headers["Accept-Language"].Substring(0,2).ToUpper(); switch (languageHeader) { case ("DE"): message = "IIS 7.0 Team - Alle Rechte vorbehalten"; break; case ("ES"): message = "Marca Registrada IIS 7.0 Team"; break; default: break; } } catch { // if something fails, e.g. no Language-Accept header, we go with the english message } InsertCopyrightMessage ( context, message, "yellow" ); } void InsertCopyrightMessage( HttpContext context, string message, string color ) { try { // get physical path of request string strPath = context.Request.PhysicalPath; // load as bitmap Bitmap jpgFile = new Bitmap(strPath); // add copyright message Graphics g = Graphics.FromImage(jpgFile); Font f = new Font("Arial", 20, GraphicsUnit.Pixel); SolidBrush sb = new SolidBrush(Color.FromName(color)); // write copyright message to bitmap g.DrawString( message, f, sb, 5, jpgFile.Height - f.Height - 5 ); f.Dispose(); g.Dispose(); // save it to response stream jpgFile.Save( context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg ); jpgFile.Dispose(); } catch (Exception e) { context.Response.Write(e.Message); } } public bool IsReusable { get { return true; } } } }
Speichern Sie die Datei unter dem Namen
%systemdrive%\inetpub\wwwroot\pictures\App\_Code\imageCopyrightHandler.cs
.Erstellen Sie den Handler, der diesen Code ausführt, wenn eine JPG-Datei angefordert wird:
%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /+[name='imageCopyrightHandler-Integrated',path='*.jpg', verb='GET,HEAD',type='IIS7Demos.imageCopyrightHandler',preCondition='integratedMode']
Außerdem müssen Sie die Verzeichnissuche aktivieren, da noch keine Standardhomepage vorhanden ist:
%windir%\system32\inetsrv\appcmd set config "Default Web Site/pictures" -section:directoryBrowse -enabled:true
Navigieren Sie zur Bilderanwendung, indem Sie Folgendes in die Adressleiste von Internet Explorer eingeben:
http://localhost/pictures
. Klicken Sie in der IIS-Verzeichnisauflistung auf den Link zu Ihrer JPG-Datei. Das JPG-Bild sollte mit dem eingefügten Copyrightvermerk angezeigt werden.Zeigen Sie den Code an. Darin ist ersichtlich, dass der Copyrightvermerk vom Accept-Language-Header abhängt, den der Browser sendet. Wenn Sie eine deutsche Version von Microsoft Server 2008 installiert haben, wird der Copyrightvermerk „IIS 7.0 Team - Alle Rechte vorbehalten“ angezeigt. Wenn Sie über eine spanische Sprachversion verfügen, wird „Marca Registrada IIS 7.0 Team“ angezeigt. In allen anderen Fällen lautet der Copyrightvermerk „Copyright © IIS 7.0 Team“. Eine Möglichkeit zum Testen dieses Codes besteht darin, den Accept-Language-Header zu ändern, den Internet Explorer sendet:
- Öffnen Sie Internet Explorer.
- Öffnen Sie das Menü „Extras“, und klicken Sie auf „Internetoptionen“.
- Klicken Sie auf die Schaltfläche „Sprachen“.
- Klicken Sie auf die Schaltfläche „Hinzufügen…“, und fügen Sie „es“ für Spanisch oder „de“ für Deutsch hinzu.
- Verschieben Sie die neue Sprache über die Schaltfläche „Nach oben verschieben“ an den Anfang der Liste.
- Navigieren Sie zu
http://localhost/pictures/<your_jpg_file>.jpg
. Der Copyrightvermerk wurde in die von Ihnen konfigurierte Sprache geändert. - Vergessen Sie nicht, zum Dialogfeld „Sprachen“ zurückzukehren und die Einstellungen zurückzusetzen. Andernfalls wundern Sie sich möglicherweise zu einem späteren Zeitpunkt, weshalb Ihnen Webseiten in spanischer oder deutscher Sprache angezeigt werden.
Teil II: Leistungstest für imageCopyrightHandler
Sobald der JPG-Copyrighthandler funktioniert, müssen Sie die Geschwindigkeit des Codes ermitteln. Installieren Sie ein IIS 6.0 Resource Kit-Tool, um Leistungstests auszuführen:
Laden Sie die IIS 6.0 Resource Kit-Tools herunter, und installieren Sie diese. Führen Sie eine benutzerdefinierte Installation aus, und installieren Sie lediglich das WCAT-Feature (Web Capacity Analysis Tool). WCAT ist das einzige Feature der IIS 6.0 Resource Kit-Tools, das für die Leistungstests erforderlich ist.
Hinweis
Aufgrund der Einstellungen für hohe Sicherheit in Internet Explorer unter Windows Server 2008 wird Ihnen möglicherweise ein Sicherheitsdialogfeld angezeigt, das Sie darüber informiert, dass die Website blockiert wird. Fügen Sie der Liste der vertrauenswürdigen Websites *.microsoft.com hinzu, um IIS 6.0 Resource Kit herunterzuladen.
Erstellen Sie ein Verzeichnis namens PERFTEST, z. B.:
md %systemdrive%\perftest
Der WCAT-Controller erfordert drei Eingabedateien:
- Eine Skriptdatei, die WCAT angibt, welche URLs angefordert werden sollen. Jede URL erhält einen eindeutigen ClassID-Wert.
- Eine Verteilungsdatei, die WCAT mitteilt, wie die Anforderungen über die in der Skriptdatei angegebenen URLs verteilt werden sollen
- Eine Konfigurationsdatei, in der die Parameter einer bestimmten Ausführung des Leistungstests wie die Dauer der Tests oder die Anzahl der zu simulierenden HTTP-Clients konfiguriert werden
Skriptdatei
Erstellen Sie im proftest-Verzeichnis eine neue Datei namens „script.cfg“, und fügen Sie den folgenden Inhalt ein:
NEW TRANSACTION classId = 1 NEW REQUEST HTTP Verb = "GET" URL = "http://localhost/pictures/<your image name>.JPG" NEW TRANSACTION classId = 2 NEW REQUEST HTTP Verb = "GET" URL = "http://localhost/pictures/<your image name>.JPG"
Hinweis
Ersetzen Sie den Eintrag <your image name> durch die Namen Ihrer JPG-Dateien. Wenn Sie weitere JPG-Dateien haben, können Sie eine neue Transaktion hinzufügen. Stellen Sie sicher, dass jede Transaktion einen neuen ClassID-Wert erhält.
Verteilungsdatei
Die Verteilungsdatei teilt WCAT mit, wie Anforderungen eingestuft werden sollen. Bei den beiden oben genannten URLs wird eine gleichmäßige 50/50-Verteilung angewendet. Jeder ClassID-Wert wird zu 50 Prozent der Zeit angefordert.
Erstellen Sie im proftest-Verzeichnis eine Datei namens
%systemdrive%\perftest\distribution.cfg
, und fügen Sie den folgenden Inhalt ein:1 50 2 50
Konfigurationsdatei
Die folgenden Parameter werden für den Test empfohlen:
- Dauer: 30 Sekunden
- Warmlaufphase: 5 Sekunden
- Abkühlphase: 5 Sekunden
- Simulierte HTTP-Clients: 20
Erstellen Sie im proftest-Verzeichnis eine Datei namens „config.cfg“, und fügen Sie den folgenden Inhalt ein:
Warmuptime 5s Duration 30s CooldownTime 5s NumClientMachines 1 NumClientThreads 20
Starten Sie den Controller, indem Sie die folgenden Befehle ausführen:
Cd \perftest "%programfiles%\IIS Resources\WCAT Controller\wcctl" -c config.cfg -s script.cfg -d distribution.cfg -a localhost
Sobald alle Clients verbunden sind, wird der Leistungstest gestartet.
Da lediglich ein Client verfügbar ist, öffnen Sie eine andere Befehlsshell mit erhöhten Rechten, und führen Sie Folgendes aus:
"%programfiles%\IIS Resources\WCAT Client\wcclient.exe" localhost
Legen Sie dazu in „config.cfg“ NumClientMachines auf eine höhere Zahl fest, und verbinden Sie Clients über den wcclient-Befehl mit dem Controller, indem Sie den Namen des Controllercomputers angeben.
Beispiel: wcclient MyPerfTestControllerMachine
Hinweis
Wenn Sie diese Schritte in einer 64-Bit-Version von Windows ausführen, wird WCAT im Verzeichnis „Programme (x86)“ installiert, und Sie müssen
%programfiles(x86)%
verwenden, um WCAT zu starten.Das sind die Ergebnisse der ersten Ausführung:
######################################################################## WCAT Performance Statistics_________________________________ Server : localhost () #Transactions : 3 (HTTP/1.1) Total Async Sockets : 20 (5 WCAT Pool Threads) Total Elapsed Time : 30 Secs (0 Hrs,0 Mins,30 Secs) Current Connections : 20 Total Connection Attempts : 436 ( 14/Sec) Total Connect Errors : 0 ( 0/Sec) Total Success Connections : 436 ( 14/Sec) Total Consec. Connect Errors: 0 ( 0/Sec) Total Bytes : 32301100 ( 1051 KB/Sec) Total Bytes Written : 32264 ( 1 KB/Sec) Total Bytes Read : 32268836 ( 1050 KB/Sec) Total Requests : 436 ( 14/Sec) Total Responses : 436 ( 14/Sec) Total Socket Reads : 6976 ( 232/Sec) Total Socket Writes : 436 ( 14/Sec) Total Parse Errors : 0 ( 0/Sec) Total Socket Errors : 0 ( 0/Sec) Total I/O Errors : 0 ( 0/Sec) Total Internal Errors : 0 ( 0/Sec) Total Time Outs : 0 ( 0/Sec) Total 200 OK : 436 ( 14/Sec) Total 30X Redirect : 0 ( 0/Sec) Total 304 Not Modified : 0 ( 0/Sec) Total 404 Not Found : 0 ( 0/Sec) Total 500 Server Error : 0 ( 0/Sec) Total Bad Status : 0 ( 0/Sec) Min. Connect Time : 0 MS Avg. Connect Time : 0 MS Max. Connect Time : 16 MS Min. Resp Time (1st Byte) : 1281 MS Avg. Resp Time (1st Byte) : 1371 MS Max. Resp Time (1st Byte) : 1578 MS Min. Response Time (Last) : 1281 MS Avg. Response Time (Last) : 1373 MS Max. Response Time (Last) : 1578 MS Current Outstanding Connects: 0 ( 20 Max) Current Waitable Connects : 0 ( 20 Max) Total Asynchronous Connects : 531 ( 1/Sec) Total Discarded Connects : 0 ( 0/Sec) ########################################################################
Wichtig ist hierbei die Anzahl der Anforderungen pro Sekunde. In diesem Fall werden 14 Anforderungen pro Sekunde ausgeführt.
Beachten Sie jedoch Folgendes: Je größer Ihre JPG-Dateien sind, desto weniger Anforderungen werden angezeigt. Es ist wahrscheinlich, dass Ihr Computer durch das Netzwerk eingeschränkt wird: IIS kann keine weiteren Anforderungen verarbeiten, da das Netzwerk durch die Daten ausgelastet ist, die Sie senden. Die besten Ergebnisse werden bei JPG-Dateien mit einer Größe von 200–300 KB erzielt.
Hinzufügen von Output Caching
Der Code zum dynamischen Einfügen des Copyrightvermerks ist relativ langsam. Vierzehn Anforderungen pro Sekunde sind für einen Webserver nicht viel. IIS weist eine weitaus bessere Leistung auf. Sie müssen lediglich eine Cacherichtlinie erstellen, die URLs mit der JPG-Dateiendung in den Kernelmoduscache versetzt. So fügen Sie die Cacherichtlinie hinzu:
Hinzufügen einer Cacherichtlinie über das IIS-Verwaltungstool
- Navigieren Sie zu „Verwaltungstools“, und wählen Sie „Internetinformationsdienste-Manager (IIS)“ aus.
- Verwenden Sie die Strukturansicht auf der linken Seite, um zur Anwendung „pictures“ zu navigieren.
- Wählen Sie das Menüelement „Regeln für Output Caching“ aus.
- Klicken Sie im Menü „Aktionen“ auf „Hinzufügen…“.
- Fügen Sie dem Cache das JPG-Format als „Dateiendung“ hinzu.
- Wählen Sie im Abschnitt „Zwischengespeicherte Dateien überwachen“ „In Zeitintervallen“ aus, und geben Sie „00:00:10“ als Zeitintervall ein.
- Aktivieren Sie das Kontrollkästchen „Header“, und geben Sie „Accept-Language“ ein.
Hinweis
Die Output Caching-Benutzeroberfläche ist in Versionen vor Windows Vista Service Pack 1 nicht verfügbar.
Hinzufügen einer Cacherichtlinie über die Befehlszeile
Geben Sie den folgenden Befehl ein, um dieselbe Prozedur mit dem appcmd-Tool auszuführen:
%windir%\system32\inetsrv\appcmd set config "Default Web Site/pictures"
-section:caching /+profiles.[extension='.jpg',duration='00:00:10',
policy='CacheForTimePeriod',varyByHeaders='Accept-Language']
Wiederholen Sie die Ausführung des Leistungstests, um die Veränderung der Konfigurationseinstellungen anzuzeigen.
Starten Sie den Controller, indem Sie die folgenden Befehle ausführen:
Cd \perftest "%programfiles%\IIS Resources\WCAT Controller\wcctl" -c config.cfg -s script.cfg -d distribution.cfg -a localhost
Starten Sie den Client mit dem folgenden Befehl:
"%programfiles%\IIS Resources\WCAT Client\wcclient.exe" localhost
Hinweis
Wenn Sie diese Schritte in einer 64-Bit-Version von Windows ausführen, wird WCAT im Verzeichnis
program files (x86)
installiert, und Sie müssen%programfiles(x86)%
verwenden, um WCAT zu starten.
Beispielausgabe
########################################################################
WCAT Performance Statistics_________________________________
Server : localhost ()
#Transactions : 3 (HTTP/1.1)
Total Async Sockets : 20 (5 WCAT Pool Threads)
Total Elapsed Time : 30 Secs (0 Hrs,0 Mins,30 Secs)
Current Connections : 19
Total Connection Attempts : 13020 ( 434/Sec)
Total Connect Errors : 0 ( 0/Sec)
Total Success Connections : 13019 ( 433/Sec)
Total Consec. Connect Errors: 0 ( 0/Sec)
Total Bytes : 958045737 (31186 KB/Sec)
Total Bytes Written : 963406 ( 31 KB/Sec)
Total Bytes Read : 957082331 (31155 KB/Sec)
Total Requests : 13019 ( 433/Sec)
Total Responses : 13019 ( 433/Sec)
Total Socket Reads : 258283 ( 8609/Sec)
Total Socket Writes : 13019 ( 433/Sec)
Total Parse Errors : 0 ( 0/Sec)
Total Socket Errors : 0 ( 0/Sec)
Total I/O Errors : 0 ( 0/Sec)
Total Internal Errors : 0 ( 0/Sec)
Total Time Outs : 0 ( 0/Sec)
Total 200 OK : 13019 ( 433/Sec)
Total 30X Redirect : 0 ( 0/Sec)
Total 304 Not Modified : 0 ( 0/Sec)
Total 404 Not Found : 0 ( 0/Sec)
Total 500 Server Error : 0 ( 0/Sec)
Total Bad Status : 0 ( 0/Sec)
Min. Connect Time : 0 MS
Avg. Connect Time : 0 MS
Max. Connect Time : 63 MS
Min. Resp Time (1st Byte) : 0 MS
Avg. Resp Time (1st Byte) : 33 MS
Max. Resp Time (1st Byte) : 125 MS
Min. Response Time (Last) : 0 MS
Avg. Response Time (Last) : 45 MS
Max. Response Time (Last) : 141 MS
Current Outstanding Connects: 0 ( 20 Max)
Current Waitable Connects : 0 ( 20 Max)
Total Asynchronous Connects : 14093 ( 147/Sec)
Total Discarded Connects : 0 ( 0/Sec)
########################################################################
Erweiterte Themen zu Output Caching
Leistungsindikatoren
Um die Leistung im Ausgabecache zu ermitteln, zeigen Sie im Zuverlässigkeits- und Leistungsmonitor die Indikatoren für den Ausgabecache an. Dort werden einige interessante Leistungsindikatoren angezeigt. Das folgende Beispiel veranschaulicht die Verwendung des Zuverlässigkeits- und Leistungsmonitors zusammen mit dem Ausgabecache.
- Starten Sie unter Windows Server 2008 PERFMON über das Startmenü. Wechseln Sie zu „Verwaltungstools“, und klicken Sie auf „Zuverlässigkeits- und Leistungsmonitor“. Unter Vista befindet sich „Verwaltungstools“ in der Systemsteuerung.
- Wählen Sie in der Strukturansicht auf der rechten Seite „Leistungsmonitor“ aus, und klicken Sie auf der Symbolleiste auf das große Pluszeichen (+).
- Navigieren Sie zum Indikator „Webdienstcache“, und klicken Sie darauf, um ihn zu öffnen.
- Fügen Sie den Indikator „Zwischengespeicherte URIs (gesamt)“ hinzu.
- Führen Sie den WCAT-Test erneut aus.
Die Anzahl der zwischengespeicherten URIs steigt in Abhängigkeit zur Anzahl der Elemente, die Sie während des Leistungstests anfordern.
Regeln zur Zwischenspeicherung im Kernelmodus in IIS
Der IIS-Ausgabecache unterstützt zwei Cacherichtlinien. Die reguläre Richtlinie für Ausgabecaches nutzt einen Cache, der sich in einem IIS-Arbeitsprozess befindet. Die andere Cacherichtlinie ist eine Cacherichtlinie im Kernelmodus, bei der sich der Cache im Kernelmodustreiber HTTP.SYS befindet.
Durch das Zwischenspeichern von Inhalten im Kernelmodus kann Ihre Website schneller geladen werden. Ändern Sie die Konfiguration der Bildanwendung so, dass der Kernelmoduscache verwendet wird. Das ist die aktuelle Konfiguration (%systemdrive%\inetpub\wwwroot\pictures\web.config
):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<directoryBrowse enabled="true" />
<caching>
<profiles>
<add extension=".jpg" policy="CacheForTimePeriod"
duration="00:00:10" varyByHeaders="Accept-Language" />
</profiles>
</caching>
</system.webServer>
</configuration>
Ändern Sie diese jetzt so, dass die Zwischenspeicherung im Kernelmodus verwendet wird:
Öffnen Sie
%systemdrive%\inetpub\wwwroot\pictures\web.config
.Ändern Sie die Einstellung.
<caching> <profiles> <add extension=".jpg" policy="CacheForTimePeriod" duration="00:00:10" varyByHeaders="Accept-Language" /> </profiles> </caching>
Folgendermaßen:
<caching> <profiles> <add extension=".jpg" kernelCachePolicy="CacheForTimePeriod" duration="00:00:10" /> </profiles> </caching>
Es ist somit nicht mehr erforderlich, das varyByHeaders-Attribut zu verwenden. Das liegt daran, dass das kernelModeCache-Attribut einige der Features nicht unterstützt, die der Ausgabecache im Benutzermodus unterstützt.
Einschränkungen des Ausgabecaches im Kernelmodus
Es gibt zwei wesentliche Unterschiede zwischen dem Ausgabecache im Benutzermodus und dem Ausgabecache im Kernelmodus.
- Der Ausgabecache im Kernelmodus unterstützt keine Module und Features, die im Benutzermodus ausgeführt werden müssen, wie die Authentifizierung oder Autorisierung. Beispiel: Wenn Authentifizierungsschemas wie die Basisauthentifizierung oder die Windows-Authentifizierung aktiviert sind, funktioniert die Cacherichtlinie nicht. Der Inhalt wird zwar bereitgestellt, jedoch nicht zwischengespeichert. Informationen dazu, ob der Inhalt zwischengespeichert wird, finden Sie im Abschnitt „Problembehandlung beim Zwischenspeichern“. Weitere Details zu den möglichen Gründen, weshalb Antworten nicht im Kernelmodus zwischengespeichert werden, finden Sie in diesem Knowledge Base-Artikel.
- Der Ausgabecache im Kernelmodus unterstützt das Attribut varyByHeaders, jedoch nicht varyByQuerystring.
Problembehandlung beim Zwischenspeichern
Die Ereignispufferung für fehlerhafte Anforderung (Failed Request Event Buffering, FREB) stellt die beste Möglichkeit dar, um herauszufinden, ob Ihre Anforderung zwischengespeichert wird. FREB teilt Ihnen mit, weshalb Inhalte nicht zwischengespeichert werden. Das folgende Beispiel enthält ein FREB-Protokoll. In diesem Fall teilt Ihnen das HTTPSYS_CACHEABLE-Ereignis mit, dass die Anforderung nicht zwischengespeichert wird, da der Kernelmoduscache nicht aktiviert ist.
Ausführlichere Informationen zum Arbeiten mit FREB finden Sie unter Problembehandlung bei fehlgeschlagenen Anforderungen mithilfe der Ablaufverfolgung in IIS 7.
Verwenden Sie den folgenden Befehl, um herauszufinden, welche Inhalte im Kernelmodus zwischengespeichert werden:
netsh http show cachestate
Schwierigkeiten beim Zwischenspeichern
Selbst wenn Sie Output Caching aktivieren, werden Anforderungen nicht sofort durch IIS zwischengespeichert. Anforderungen werden von IIS erst nach einigen Wiederholungen so eingestuft, dass sie zwischengespeichert werden sollten. Die Einstufung für die Zwischenspeicherung kann über den Abschnitt „ServerRuntime“ konfiguriert werden, der in diesem MSDN-Artikel beschrieben wird.
Die beiden Eigenschaften frequentHitTimePeriod und frequentHitThreshold bestimmen die Einstufung für die Zwischenspeicherung. Eine Anforderung wird lediglich dann zwischengespeichert, wenn innerhalb der über <frequentHitTimePeriod> festgelegten Dauer mehr Anforderungen für eine zwischenspeicherbare URL eingehen, als über die <frequentHitThreshold>
-Einstellung festgelegt wurde.
Die Standardeinstellung für frequentHitTimePeriod ist zehn Sekunden.
Die Standardeinstellung für frequentHitThreshold ist zwei.
Zwischenspeichern Ihrer am häufigsten verwendeten Seiten
Im obigen Beispiel werden alle Dateien mit der JPG-Dateiendung im Ausgabecache zwischengespeichert. Das funktioniert nicht immer, da gelegentlich eine genauere Auswahl erforderlich ist und lediglich ein bestimmtes Dokument im Ausgabecache zwischengespeichert werden soll. Mit den folgenden Schritten können Sie diese Einstellung für Ihre am häufigsten angeforderte Seite (Ihre Standardhomepage) konfigurieren:
Erstellen Sie im
%systemdrive%\inetpub\wwwroot\pictures
-Verzeichnis eine Datei namens „default.aspx“, und fügen Sie den folgenden Code hinzu:<%=DateTime.Now%>
Navigieren Sie zu „Verwaltungstools“, und wählen Sie „Internetinformationsdienste-Manager (IIS)“ aus.
Verwenden Sie die Strukturansicht auf der linken Seite, um zur Anwendung „pictures“ zu navigieren.
Klicken Sie unten auf der Seite auf „Inhaltsansicht“.
Wählen Sie Ihre Standardhomepage aus, z. B. die Seite „default.aspx“.
Klicken Sie im Menü „Aktionen“ auf der rechten Seite auf „Zur Featureansicht wechseln“. Jede von Ihnen konfigurierte Einstellung wird jetzt ausschließlich auf die Standardhomepage angewendet.
Öffnen Sie die Einstellung „Regeln für Output Caching“.
Fügen Sie „.aspx“ als Dateiendung hinzu.
Wählen Sie „Zwischenspeicherung im Kernelmodus“ aus. Daraufhin können Sie „In Zeitintervallen“ auswählen, „Zwischengespeicherte Dateien überwachen“ aktivieren und „00:00:30“ als Zeitintervall eingeben.
Navigieren Sie in Internet Explorer zu
http://localhost/pictures
. Wenn Sie die Seite ständig aktualisieren, ändert sich die angezeigte Uhrzeit 30 Sekunden lang nicht. Drücken Sie hierzu STRG+F5, um sicherzustellen, dass die Seite nicht aus dem Browsercache abgerufen wird.
Zusammenfassung
Die Verwendung des IIS Output Caching-Features für semidynamische Inhalte kann Ihre Website verbessern. Dadurch können Sie eine erhebliche Verbesserung der Leistung und Durchsatzkapazität verzeichnen. Eine einfache Konfigurationsänderung reicht aus, um dieses Feature nutzen zu können.