IIS 8.0 Anwendungsinitialisierung
von Shaun Eagan
Kompatibilität
Version | Hinweise |
---|---|
IIS 8.0 | Die Anwendungsinitialisierung wurde in IIS 8.0 integriert. |
IIS 7.5 | Die Anwendungsinitialisierung wurde als Out-of-band-Modul für IIS 7.5 veröffentlicht. |
IIS 7.0 | Die Anwendungsinitialisierung wurde für IIS 7.0 nicht unterstützt. |
Problem
Ein häufiges Problem, dem Websiteadministratoren begegnen, ist die Notwendigkeit, Initialisierungs- und „Aufwärmaufgaben“ für eine Webanwendung auszuführen. Größere und komplexere Webanwendungen müssen möglicherweise eine langwierige Startverarbeitung durchführen, speicherinterne Caches initialisieren, Inhalte generieren usw., bevor die erste HTTP-Anforderung verarbeitet werden kann.
Lösung
Mit der Anwendungsinitialisierungsfunktion für IIS 8.0 können Websiteadministratoren IIS 8.0 für die proaktive Ausführung von Initialisierungsaufgaben für eine oder mehrere Webanwendungen konfigurieren. Während eine Anwendung initialisiert wird, kann IIS 8.0 statischen Inhalt als Platzhalter oder „Begrüßungsseite“ zurückgeben, bis die Initialisierungsaufgaben der Anwendung abgeschlossen sind.
Das Feature „Anwendungsinitialisierung“ wird durch eine Kombination aus globalen und anwendungsspezifischen Regeln konfiguriert, die IIS 8.0 mitteilen, wie und wann Webanwendungen initialisiert werden. Das Feature „Anwendungsinitialisierung“ unterstützt auch die Integration mit dem URL-Umschreibungsmodul in IIS, um die komplexere Behandlung von Platzhalterinhalten zu unterstützen, während eine Anwendung noch initialisiert wird.
Hinweis
Es gibt bekannte Inkompatibilitäten zwischen der Anwendungsinitialisierung und dem Routing von Anwendungsanforderungen (Application Request Routing, ARR). Es wird nicht empfohlen, die Anwendungsinitialisierung auf Computern zu verwenden, auf denen ARR installiert ist.
Schrittanweisungen
Voraussetzungen
Das Feature „Anwendungsinitialisierung“ erfordert, dass IIS 8.0 installiert ist. Darüber hinaus muss das Feature „Anwendungsinitialisierung“ innerhalb des Unterfeatures „Anwendungsentwicklung“ von IIS installiert werden.
Der folgende Screenshot der Benutzeroberfläche von Windows Server 2012 Server Manager zeigt das Feature „Anwendungsinitialisierung“.
Hinweis
In dieser exemplarischen Vorgehensweise wird außerdem eine ASP.NET 4.5-Anwendung verwendet, um das Feature „Anwendungsinitialisierung“ zu veranschaulichen. Der Anhang am Ende dieses Dokuments enthält die Beispielanwendung und Anweisungen zum Einrichten der Anwendung auf Ihrem Computer.
Problemumgehungen für bekannte Fehler
- Derzeit gibt es keine bekannten Fehler für dieses Feature.
Globale Anwendungsinitialisierung
Das Feature „Anwendungsinitialisierung“ kann an zwei Stellen konfiguriert werden: in der computerweiten „applicationHost.config“-Datei und in der Datei „web.config“ auf Anwendungsebene. Die Konfiguration in der Datei „applicationHost.config“ enthält „globale“ Anwendungsinitialisierungseinstellungen, während eine „web.config“-Datei auf Anwendungsebene „lokale“ Anwendungsinitialisierungseinstellungen enthält.
In dieser exemplarischen Vorgehensweise konfigurieren Sie eine Beispielanwendung so, dass sie immer initialisiert wird, wenn der Anwendungspool, der der Anwendung zugeordnet ist, gestartet wird. Da Anwendungspoolverhalten nur in „applicationHost.config“ konfiguriert werden kann, wird die Anwendungsinitialisierung bei jedem Start eines Anwendungspools als Teil der „globalen“ Anwendungsinitialisierungseinstellungen betrachtet.
Änderungen in „applicationHost.config“
Öffnen Sie die Datei „applicationHost.config“ unter %WINDIR%\system32\inetsrv\config
in Editor. (Denken Sie daran, den Text-Editor mit der Option „Als Administrator ausführen“ auszuführen.)
Suchen Sie den Konfigurationsabschnitt <applicationPools>, und suchen Sie dann nach dem Anwendungspooleintrag mit dem Namen „.NET v4.5“.
Ändern Sie den Anwendungspooleintrag so, dass der Anwendungspool immer ausgeführt wird. Für Anwendungen, für die eine globale Anwendungsinitialisierung erfolgen soll, muss normalerweise der zugeordnete Anwendungspool gestartet und ausgeführt werden. Das fett formatierte Attribut im Konfigurationsausschnitt zeigt, was dem Konfigurationseintrag hinzugefügt werden soll.
<add name=".NET v4.5" startMode="AlwaysRunning" managedRuntimeVersion="v4.0" />
Scrollen Sie in „applicationHost.config“ etwas weiter nach unten zum <sites>
-Konfigurationselement. In diesem Abschnitt gibt es einen <application>
-Eintrag für die Beispielanwendung (Anweisungen zum Erstellen der Beispielanwendung auf Ihrem Computer finden Sie im Anhang). Die Anwendung wird als „appinit“ bezeichnet und hat einen Pfad-Attributwert von „/appinit“. Ändern Sie den <application>
-Eintrag, indem Sie das fett formatierte preloadEnabled-Attribut wie im Konfigurationsausschnitt gezeigt hinzufügen und dann Ihre Änderungen speichern.
<application path="/appinit" preloadEnabled="true" applicationPool=".NET v4.5">
Das Festlegen von preloadEnabled auf „true“ weist IIS 8.0 darauf hin, dass eine „Fakeanforderung“ an die Anwendung gesendet wird, wenn der zugeordnete Anwendungspool gestartet wird. Deshalb haben wir im vorherigen Schritt den startMode des Anwendungspools auf „AlwaysRunning“ festgelegt.
Mit der Kombination aus dem immer ausgeführten Anwendungspool und der zum dauerhaften Empfangen einer „Fakeanforderung“ markierten Anwendung stellt IIS 8.0 bei jedem Neustart des Computers und/oder Wiederverwenden des World Wide Web-Diensts sicher, dass die Anwendungspoolinstanz ausgeführt wird und dass an die Anwendung „/appinit“ immer eine Fakeanforderung gesendet wird, um das Starten der Anwendung auszulösen.
Änderungen in der „Web.config“-Datei der Anwendung
Öffnen Sie in einer zweiten Instanz von Editor die Datei „web.config“ auf Anwendungsebene, die sich am folgenden Speicherort befindet. (Denken Sie daran, den Text-Editor mit der Option „Als Administrator ausführen“ auszuführen.)
C:\inetpub\wwwroot\appinit
Hinweis: Ändern Sie den Laufwerkbuchstaben, wenn Ihre Standardwebsite auf einem anderen physischen Laufwerk installiert ist.
Die Datei „web.config“ enthält einige Konfigurationsabschnitte, die bereits ausgefüllt wurden, aber auskommentiert sind. Heben Sie die Auskommentierung des Konfigurationsausschnitts auf, der sich innerhalb des Konfigurationsabschnitts <system.webServer>
befindet. Dieser Codeschnipsel befindet sich direkt unterhalb des Kommentars „Exercise 1 - Step 1“ in der Datei „web.config“. Speichern Sie anschließend die Änderungen.
<applicationInitialization
remapManagedRequestsTo="Startup.htm"
skipManagedModules="true" >
<add initializationPage="/default.aspx" />
</applicationInitialization>
Das applicationInitialization-Element weist IIS an, dass eine Anforderung an die Stamm-URL der Anwendung („/default.aspx“ in diesem Beispiel) gesendet werden soll, um die Anwendung zu initialisieren. Während IIS auf den Abschluss der Anforderung an „/default.aspx“ wartet, wird für alle aktiven Browserclients „Startup.htm“ bereitgestellt. „Startup.htm“ ist die „Begrüßungsseite“ für die Anwendung.
Ausführen der Anwendung
Verwenden Sie in einem Eingabeaufforderungsfenster mit erhöhten Rechten den World Wide Web-Dienst mit dem folgenden Befehl:
net stop w3svc & net start w3svc
Denken Sie daran, das Eingabeaufforderungsfenster mit der Option „Als Administrator ausführen“ zu öffnen.
Navigieren Sie mit Internet Explorer zur folgenden URL:
http://localhost/appinit/default.aspx
Der Browser gibt für die ersten Sekunden die statische Seite „Startup.htm“ mit einem grauen Hintergrund zurück, da dies die „Begrüßungsseite“ ist, die in „web.config“ konfiguriert wurde. Sie können die Seite in Ihrem Webbrowser weiterhin aktualisieren und können sehen, dass etwa acht Sekunden später (simuliert mit einem Thread-Sleep in „global.asax“ der Beispielanwendung) der „echte“ Inhalt für „default.aspx“ mit weißem Hintergrund angezeigt wird. Dies gibt an, dass die Anwendungsinitialisierung abgeschlossen ist.
Konfigurieren der überlappenden Prozesswiederverwendung
IIS 8.0 integriert die globale Anwendungsinitialisierung mit überlappender Prozesswiederverwendung, indem die Anwendungsinitialisierung in einem überlappenden Prozess im Hintergrund ausgeführt wird. Wenn IIS erkennt, dass ein aktiver Arbeitsprozess wiederverwendet wird, stellt IIS den aktiven Datenverkehr erst auf den neuen wiederverwendeten Arbeitsprozess um, wenn der neue Arbeitsprozess die Ausführung aller Anwendungsinitialisierungs-URLs im neuen Prozess abgeschlossen hat. Dadurch wird sichergestellt, dass Kunden auf Ihrer Website keine Anwendungsinitialisierungsseiten sehen, sobald eine Anwendung live ist und ausgeführt wird.
Wechseln Sie zurück zur Editor-Instanz mit „applicationHost.config“. Ändern Sie den Anwendungspooleintrag für „.NET v4.5“ so, dass er wie der unten gezeigte Konfigurationsausschnitt aussieht:
<add name=".NET v4.5"
startMode="AlwaysRunning"
managedRuntimeVersion="v4.0" >
<recycling logEventOnRecycle="Schedule">
<periodicRestart requests="30" />
</recycling>
</add>
Denken Sie daran, Ihre Änderungen zu speichern.
Das Element <recycling> weist IIS an, den Arbeitsprozess alle 30 HTTP-Anforderungen wiederzuverwenden.
Erneutes Ausführen der Anwendung
Verwenden Sie in einem Eingabeaufforderungsfenster mit erhöhten Rechten den World Wide Web-Dienst mit dem folgenden Befehl:
net stop w3svc & net start w3svc
Wenn Sie eine neue Instanz von Internet Explorer verwenden, navigieren Sie erneut zu:
http://localhost/appinit/default.aspx
Beachten Sie, dass die Begrüßungsseite „Startup.htm“ mit dem grauen Hintergrund angezeigt wird.
Öffnen Sie als Nächstes den Task-Manager, und stellen Sie sicher, dass die Registerkarte Prozesse angezeigt wird. Sortieren Sie die Prozessliste nach Namen, bis Sie sehen, dass eine Instanz von „w3wp.exe“ ausgeführt wird. Diese Instanz ist der Arbeitsprozess, der derzeit die ASP.NET-Anwendung „appinit“ ausführt.
Aktualisieren Sie den Browser ein paar Mal, bis der Inhalt der tatsächlichen „default.aspx“-Seite zurückgegeben wird. Sie wissen, dass die Anwendung die „echte“ Seite „default.aspx“ ausführt, wenn sich der Hintergrund in Weiß ändert. Ordnen Sie als Nächstes die Fenster auf dem Bildschirm so an, dass Sie sowohl den Task-Manager als auch den Browser sehen können.
Wechseln Sie nun wieder zum Browser, und aktualisieren Sie die Seite mindestens 30 Mal, wodurch IIS den Anwendungspool wiederverwendet. Sie können die Aktualisierung der Seite beenden, wenn eine zweite Instanz von „w3wp.exe“ in der Task-Manager-Prozessliste angezeigt wird, wie unten gezeigt:
Der Screenshot zeigt, dass die zweite Instanz von „w3wp.exe“ aufgrund des zuvor festgelegten Limits für die Prozesswiederverwendung gestartet wurde.
Sie können das Browserfenster für die nächsten zehn Sekunden in regelmäßigen Abständen aktualisieren. Beachten Sie, dass „default.aspx“ weiterhin ausgeführt wird. Nach Abschluss der überlappenden Wiederverwendung verschwindet eine „w3wp.exe“-Instanz aus dem Task-Manager-Prozessfenster.
Während der gesamten Dauer der überlappenden Wiederverwendung sehen Sie weiterhin den Inhalt der „echten“ Seite „default.aspx“, obwohl die Anwendungsinitialisierung für die Anwendung konfiguriert wurde und die Initialisierungs-URL im Hintergrund in der neuen Instanz von „w3wp.exe“ausgeführt wurde.
URL-Umschreibung und Anwendungsinitialisierung
Standardmäßig können Sie bei der Anwendungsinitialisierung nur eine einzelne Begrüßungsseiten-URL angeben, die angezeigt werden soll, während eine Anwendung initialisiert wird. Das Feature „Anwendungsinitialisierung“ unterstützt jedoch einige Servervariablen, die zum Steuern der Anforderungsverarbeitung verwendet werden können, während eine Anwendung initialisiert wird. Auf diese Weise können Sie deklarative Regeln mithilfe des URL-Umschreibungsmoduls erstellen, die komplexere Zuordnungen zu vorgenerierten statischen Inhalten enthalten.
In dieser exemplarischen Vorgehensweise ersetzen Sie das Attribut remapManagedRequestsTo durch eine Reihe von URL-Umschreibungsregeln, die dasselbe Endergebnis erreichen.
Hinweis: Anweisungen zum Installieren von URL Rewrite finden Sie im Anhang.
Änderungen in „applicationHost.config“
Wenn Sie die Instanz von Editor verwenden, in der „applicationHost.config“ geöffnet ist, setzen Sie sowohl den Anwendungspool als auch die Anwendungselemente zurück, um alle globalen Anwendungsinitialisierungsverarbeitungen zu deaktivieren. Die globalen Einstellungen werden in diesem Schritt entfernt, da der Schwerpunkt im Rest der Vorgehensweise auf dem konfigurierten Verhalten der Anwendungsinitialisierung liegt.
Die „applicationHost.config“-Einträge für den Anwendungspool und die Anwendung sind unten dargestellt.
Eintrag für die Anwendungspoolkonfiguration:
<add name=".NET v4.5" managedRuntimeVersion="v4.0" />
Eintrag für die Anwendungskonfiguration:
<application path="/appinit" applicationPool=".NET v4.5">
Denken Sie daran, Ihre Änderungen zu speichern, wenn Sie fertig sind.
Um sicherzustellen, dass die Änderungen in IIS wirksam werden, verwenden Sie außerdem in einem Eingabeaufforderungsfenster mit erhöhten Rechten den World Wide Web-Dienst mit dem folgenden Befehl:
net stop w3svc & net start w3svc
Änderungen an „web.config“ auf Anwendungsebene
Entfernen Sie in der Instanz von Editor, in der „web.config“ auf Anwendungsebene geöffnet ist, das Attribut remapManagedRequestsTo aus dem <applicationInitialization>
-Element. Der <applicationInitialization>
-Konfigurationsabschnitt sollte nun wie dieser Konfigurationsausschnitt aussehen.
<applicationInitialization skipManagedModules="true" >
<add initializationPage="/default.aspx" />
</applicationInitialization>
Da das <applicationInitialization>
-Element keine URL zum Neuzuordnen von Anforderungen mehr definiert, fügen Sie eine Reihe von URL-Umschreibungsregeln hinzu. Fügen Sie als Nächstes eine Umschreibungsregel hinzu, die Anforderungen an „default.aspx“ explizit zuordnet, sowie „/“ zum Weiterleiten an „Startup.htm“. Zwei Regeln sind erforderlich, da das URL-Umschreibungsmodul nicht „weiß“, wie Standarddokumente funktionieren. Da „/“ in ASP.NET-Anwendungen „default.aspx“ entspricht, benötigen Sie zwei URL-Umschreibungsregeln – eine Regel für jede URL-Variation.
Die neuen Regeln werden unten fett formatiert angezeigt. Alternativ können Sie die Auskommentierung der vordefinierten URL-Umschreibungsregeln unter dem Kommentar „Exercise 2 - Step 2 Mapping Requests to the Home Page“ in der Datei „web.config“ aufheben.
<rewrite>
<rules>
<rule name="Home Page-Expanded" stopProcessing="true">
<match url="default.aspx" />
<conditions>
<add input="{APP_WARMING_UP}" pattern="1" />
</conditions>
<action type="Rewrite" url="Startup.htm" />
</rule>
<rule name="Home Page-Short" stopProcessing="true">
<match url="^$" />
<conditions>
<add input="{APP_WARMING_UP}" pattern="1" />
</conditions>
<action type="Rewrite" url="Startup.htm" />
</rule>
</rules>
</rewrite>
Hinweise zu diesen Regeln: Zuerst wird das stopProcessing-Attribut für die <rule />-Elemente auf „true“ festgelegt. Dies ist erforderlich, um später eine Catch-All-URL-Umschreibungsregel hinzuzufügen, und für Anforderungen an „default.aspx“ oder „/“, für die die Catch-All-Regel nicht ausgeführt werden soll.
Beachten Sie zweitens, dass im <condidtions />-Element eine URL-Umschreibungsbedingung vorhanden ist. Diese Bedingung besagt effektiv „Regel nur anwenden, wenn sich die Anwendung in einem Initialisierungszustand befindet“. Die Servervariable „APP_WARMING_UP“ wird von IIS auf den Wert „1“ festgelegt, wenn die Anwendungsinitialisierung aktiv ist und IIS weiterhin alle Initialisierungs-URLs verarbeitet.
Beachten Sie abschließend, dass die Aktion zum Umschreiben der aktiven Anforderung definiert wurde, um stattdessen „Startup.htm“ auszuführen. Mit dieser Regel wird IIS aufgefordert, die Anforderung an den statischen Dateihandler zu übergeben, der dann die statische Seite „Startup.htm“ rendert.
Als Nächstes fügen Sie eine Catch-All-Umschreibungsregel hinzu. Wenn Sie das URL-Umschreibungsmodul in Verbindung mit der Anwendungsinitialisierung verwenden, wird eine Catch-All-Regel benötigt, die ausgelöst wird, wenn keine der vorherigen Regeln übereinstimmt. Fügen Sie die unten gezeigte fett formatierte Regel dem Umschreibungsabschnitt als Catch-All-Regel hinzu. Alternativ können Sie die Auskommentierung der bereits angegebenen Catch-All-Regel in „web.config“ aufheben. Diese befindet sich unter dem Kommentar „Exercise 2 - Step 2 Setting Up a Catch-All Rule“ in der Datei „web.config“.
<rewrite>
<rules>
<rule name="Home Page-Expanded" stopProcessing="true">
<match url="default.aspx" />
<conditions>
<add input="{APP_WARMING_UP}" pattern="1" />
</conditions>
<action type="Rewrite" url="Startup.htm" />
</rule>
<rule name="Home Page-Short" stopProcessing="true">
<match url="^$" />
<conditions>
<add input="{APP_WARMING_UP}" pattern="1" />
</conditions>
<action type="Rewrite" url="Startup.htm" />
</rule>
<rule name="All Other Requests">
<match url=".*" />
<conditions>
<add input="{APP_WARMING_UP}" pattern="1" />
</conditions>
<serverVariables>
<set name="SKIP_MANAGED_MODULES" value="0" />
</serverVariables>
<action type="Rewrite" url="{URL}" />
</rule>
</rules>
</rewrite>
Denken Sie daran, Ihre Änderungen zu speichern, wenn Sie fertig sind.
Die neue Regel gleicht jede URL ab, die sie erreicht, und weist IIS an, die Verarbeitung der Anforderung fortzusetzen, die an die eingehende URL gesendet wurde. Die Regel legt außerdem die Servervariable „SKIP_MANAGED_MODULES“ auf den Wert „0“ fest, der „false“ entspricht. Diese Einstellung weist IIS an, dass die umgeschriebene Anforderung von URL Rewrite auf die gleiche Weise behandelt werden soll wie eine Anforderung, die normal „off the wire“ eingegangen ist.
Ausführen der Anwendung
Verwenden Sie in einem Eingabeaufforderungsfenster mit erhöhten Rechten den World Wide Web-Dienst mit dem folgenden Befehl:
net stop w3svc & net start w3svc
Wenn Sie eine neue Instanz von Internet Explorer verwenden, navigieren Sie erneut zu:
http://localhost/appinit/default.aspx
Obwohl jetzt URL-Umschreibungsregeln verwendet werden, um die Logik der Begrüßungsseite zu definieren, sehen Sie weiterhin dasselbe Verhalten wie in der ersten exemplarischen Vorgehensweise. Zunächst wird die „Startup.htm“-Seite mit grauem Hintergrund angezeigt. Wenn Sie den Browser regelmäßig aktualisieren, wird etwa acht Sekunden später der Seitenhintergrund wieder zu Weiß gewechselt. Dies gibt an, dass die „echte“ Seite „default.aspx“ jetzt bereitgestellt wird, da die Anwendungsinitialisierung abgeschlossen ist.
Komplexe Regeln für Begrüßungsseiten
In den vorherigen exemplarischen Vorgehensweisen wird die Anwendungsinitialisierung als direkte Zuordnung von URL „X“ zu URL „Y“ verwendet. In dieser exemplarischen Vorgehensweise implementieren Sie ein komplexeres Anwendungsinitialisierungsszenario.
Navigieren Sie in Ihrem Browser zu den beiden folgenden URLs:
http://localhost/appinit/ImageHandler.ashx?image=Lighthouse
http://localhost/appinit/ImageHandler.ashx?image=Tulips
Diese URLs sind Beispiele für dynamisch generierten statischen Inhalt. Für diese Beispielanwendung sucht der Code in „ImageHandler.ashx“ nach dem Abfragezeichenfolgenschlüssel „image“. Wenn der Wert dieser Abfragezeichenfolge entweder „Lighthouse“ oder „Tulips“ ist, überträgt der ASP.NET-Handler die entsprechende JPG-Datei, das sich im Ordner „App_Data“ befindet.
Da der Bildhandler nur Bilder zurückgibt, möchten Sie auch während der Anwendungsinitialisierung weiterhin ein entsprechendes Bild zurückgeben können. Obwohl für die Bereitstellung dieser Bilder verwalteter Code verwendet wird, möchten Sie möglicherweise schnell vorab generierte Bilder für Kunden bereitstellen, auch wenn die zugrunde liegende ASP.NET-Anwendung viel Zeit benötigt, um sich selbst zu starten und zu initialisieren.
Änderungen an „web.config“ auf Anwendungsebene
Fügen Sie in der Instanz von Editor, in der „web.config“ auf Anwendungsebene geöffnet ist, eine weitere URL-Umschreibungsregel vor der abschließenden Catch-All-Regel hinzu. Der neue hinzuzufügende Codeausschnitt wird unten angezeigt. Alternativ können Sie die Auskommentierung der bereits angegebenen Bildhandlerregel in „web.config“ aufheben. Diese befindet sich unter dem Kommentar „Exercise 3 - Step 1 Complex Splash Page Rules“ in der Datei „web.config“.
<rule name="Image Handler Remapping" stopProcessing="true">
<match url="ImageHandler.ashx" />
<conditions>
<add input="{APP_WARMING_UP}" pattern="1" />
<add input="{QUERY_STRING}" pattern="image=([A-Za-z]+)&?" />
</conditions>
<action type="Rewrite" url="Images/{C:1}_static.jpg" appendQueryString="false" />
</rule>
Denken Sie daran, Ihre Änderungen zu speichern, wenn Sie fertig sind.
Genau wie bei den Umschreibungsregeln für „default.aspx“ und „/“ ist bei dieser Regel das stopProcessing-Attribut auf „true“ festgelegt, um sicherzustellen, dass Anforderungen an „ImageHandler.ashx“ während der Anwendungsinitialisierung nicht versehentlich unter die abschließende Catch-All-Umschreibungsregel fallen.
Für Anforderungen an „ImageHandler.ashx“ verwendet die Umschreibungsregel eine Erfassungsgruppe für reguläre Ausdrücke, um das angeforderte Bild aus der Abfragezeichenfolge zu extrahieren. Die Übereinstimmungsmusterdefinition pattern="image=([A-Za-z]+)&?" weist IIS an, den Wert der Abfragezeichenfolgenvariablen „image“ zu extrahieren. Dieser Wert wird dann im URL-Attribut des Aktionsattributs verwendet: url="Images/{C:1}_static.jpg".
Das URL-Attribut für das Aktionselement weist das URL-Umschreibungsmodul an, „ImageHandler.ashx“-Anforderungen umzuschreiben, sodass sie stattdessen auf Dateien im Unterverzeichnis „Images“ der Anwendung verweisen. Darüber hinaus wird der vom regulären Ausdruck erfasste Abfragezeichenfolgenwert verwendet, um den Namen der Datei zu bilden, die letztendlich aus dem Unterverzeichnis „Images“ bereitgestellt wird. Beispielsweise wird eine Anforderung an ImageHandler.ashx?image=Tulips in Images/Tulips_static.jpg umgeschrieben.
Wenn Sie mithilfe von Windows Explorer zum Verzeichnis „inetpub\wwwroot\appinit“ navigieren und im Unterverzeichnis „Images“ suchen, werden zwei Dateien angezeigt: eine, die die „statische“ Version von „Tulips.jpg“ darstellt, und die andere, die die „statische“ Version von „Lighthouse.jpg“ darstellt. Diese statischen Bilder dienen als vorgenerierte Inhalte, die während der Initialisierung der Anwendung bereitgestellt werden können.
Ausführen der Anwendung
Verwenden Sie in einem Eingabeaufforderungsfenster mit erhöhten Rechten den World Wide Web-Dienst mit dem folgenden Befehl:
net stop w3svc & net start w3svc
Navigieren Sie mit Internet Explorer zu einer der folgenden Adressen:
http://localhost/appinit/ImageHandler.ashx?image=Lighthouse
oder
http://localhost/appinit/ImageHandler.ashx?image=Tulips
Beachten Sie, dass die zurückgegebenen Bilder in beiden Fällen ein Wasserzeichen enthalten, das angibt, dass es sich um die „statischen“ vorgenerierten Versionen der Bilder handelt. Das Wasserzeichen ist Text im oberen Teil des Bilds mit dem Wortlaut„This image is the static version of...“.
Wenn Sie Ihren Browser ungefähr 10 Sekunden später aktualisieren, ändert sich der zurückgegebene Bildinhalt zum „echten“ Inhalt, der vom „ImageHandler.ashx“-Handler bereitgestellt wird. Das Wasserzeichen verschwindet, was angibt, dass der Inhalt jetzt dynamisch vom ASP.NET-Handler generiert wird, da die Anwendung die Initialisierung abgeschlossen hat.
[Hinweis: Wenn Internet Explorer nicht aktualisiert wird, klicken Sie entweder auf das Symbol „Fehlerhaftes Dokument“ in der Adressleiste oder auf das Aktualisierungssymbol, um ein erneutes Laden der Seit in Internet Explorer zu erzwingen.]
Zusammenfassung
Das IIS 8.0-Anwendungsinitialisierungsfeature bietet Entwicklern und Administratoren die Möglichkeit, statische Inhalte an Browser zurückzugeben, während IIS eine „kalte“ Anwendung initialisiert. Die sofortige Bereitstellung statischer Inhalte an Browser bietet Kunden eine bessere Benutzererfahrung. Anstelle von Kaltstartanwendungen, die zu einer leeren Browserseite oder einem sich drehenden Wartesymbol führen, kann das Feature „Anwendungsinitialisierung“ verwendet werden, um relevante statische Inhalte bereitzustellen, während die zugrunde liegende Anwendung die aufwändige Initialisierungsverarbeitung abschließt.
Der Initialisierungsprozess kann automatisch erfolgen, wenn ein Webserver online gebracht oder wiederverwendet wird. Für Szenarien, in denen Serveradministratoren Anwendungen nicht verschwenderisch initialisieren möchten, kann der Initialisierungsprozess stattdessen bei Bedarf ausgelöst werden, wenn die erste Anforderung bei einer „kalten“ Anwendung eingeht.
Sowohl für die globale als auch für die lokale Anwendungsinitialisierung kann das URL-Umschreibungsmodul integriert werden, um umfangreichere und komplexere Initialisierungsregeln bereitzustellen. Durch die Verwendung von URL-Umschreibungsregeln, die in das Feature „Anwendungsinitialisierung“ integriert sind, ist es möglich, verschiedene Typen von vorgenerierten statischen Inhalten für verschiedene URLs und virtuelle Pfade bereitzustellen, während IIS eine Anwendung im Hintergrund weiter startet.
Anhang – Einrichten der ASP.NET-Beispielanwendung
Hinweis: In den folgenden Schritten wird davon ausgegangen, dass auf Ihrem Server sowohl IIS 8.0 installiert als auch ASP.NET 4.5 für die Verwendung in IIS 8.0 aktiviert ist.
Entpacken der Beispielanwendung
Die ASP.NET-Beispielanwendung ist in der folgenden ZIP-Datei enthalten:
Entpacken Sie die Datei in den Ordner „wwwroot“ auf Ihrem Webserver. Wenn auf Ihrem Webserver beispielsweise die Standardwebsite auf dem Laufwerk „C:\“ installiert ist, entpacken Sie den Inhalt der Datei in c:\inetpub\wwwroot\appinit
.
Erstellen einer Anwendung in IIS 8.0
Nachdem Sie das Beispiel „appinit“ in das Dateisystem extrahiert haben, müssen Sie den Ordner als ASP.NET-Anwendung in IIS 8.0 konfigurieren. Der folgende Screenshot zeigt die „Appinit“-Beispielanwendung, die als Anwendung in IIS 8.0 konfiguriert ist. Beachten Sie außerdem, dass die Anwendung dem Anwendungspool „.NET v4.5“ zugewiesen ist.
Installieren des URL-Umschreibungsmoduls
Die Beispielanwendung verwendet das URL-Umschreibungsmodul für die erweiterte Integration in das Feature „Anwendungsinitialisierung“. Sie müssen das URL-Umschreibungsmodul auf Ihrem Server installieren. Es kann von https://www.iis.net/downloads/microsoft/url-rewrite heruntergeladen werden.
Konfigurieren des URL-Umschreibungsmoduls
Nachdem das URL-Umschreibungsmodul auf Ihrem Webserver installiert wurde, müssen Sie die IIS-Datei „applicationHost.config“ ändern, um die Verwendung der „SKIP_MANAGED_MODULES“-Servervariable zuzulassen, die von der Anwendungsinitialisierungsfunktion unterstützt wird.
Öffnen Sie die computerweite „applicationHost.config“-Datei in einem Text-Editor wie Windows-Editor. Wenn Sie z. B. das Betriebssystem auf dem Laufwerk „C:\“ installiert haben, befindet sich die Datei „applicationHost.config“ unter C:\Windows\System32\inetsrv\config
.
Scrollen Sie in der Datei nach unten, und suchen Sie den Sicherheitsabschnitt. Dieser Abschnitt beginnt mit dem XML-Element <security>.
Geben Sie die folgenden XML-Elemente vor dem Element <security> ein:
<rewrite>
<allowedServerVariables>
<add name="SKIP_MANAGED_MODULES" />
</allowedServerVariables>
</rewrite>
Speichern Sie die Änderungen an der Datei „applicationHost.config“.