Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
von Shaun Eagan
Compatibility
| Version | Hinweise |
|---|---|
| IIS 8.0 | Die Anwendungsinitialisierung wurde für 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, das Websiteadministratoren gegenüberstehen, ist die Notwendigkeit, Initialisierungsaufgaben und "Aufwärmen" Aufgaben für eine Webanwendung auszuführen. Größere und komplexere Webanwendungen müssen möglicherweise eine langwierige Startverarbeitung durchführen, speicherinterne Caches in den Vordergrund stellen, Inhalte generieren usw. vor der Bereitstellung der ersten HTTP-Anforderung.
Lösung
Das IIS 8.0-Anwendungsinitialisierungsfeature ermöglicht Es Websiteadministratoren, IIS 8.0 so zu konfigurieren, dass Initialisierungsaufgaben für eine oder mehrere Webanwendungen proaktiv ausgeführt werden. Während eine Anwendung initialisiert wird, kann IIS 8.0 auch so konfiguriert werden, dass statische Inhalte als Platzhalter oder "Begrüßungsseite" zurückgegeben werden, bis eine Anwendung ihre Initialisierungsaufgaben abgeschlossen hat.
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 IIS Url Rewrite Module, um die komplexere Behandlung von Platzhalterinhalten zu unterstützen, während eine Anwendung noch initialisiert wird.
Hinweis
Es gibt bekannte Inkompatibilitäten zwischen Anwendungsinitialisierung und Anwendungsanforderungsrouting (ARR). Es wird nicht empfohlen, die Anwendungsinitialisierung auf Computern zu verwenden, auf dem ARR installiert ist.
Schrittweise Anleitungen
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 Windows Server 2012 Server Manager-Benutzeroberfläche zeigt das Feature "Anwendungsinitialisierung".
Hinweis
In dieser exemplarischen Vorgehensweise wird auch 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: die computerweite applicationHost.config Datei und die web.config Datei 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.configkonfiguriert werden kann, wird beim Starten eines Anwendungspools die Anwendungsinitialisierung als Teil der "globalen" Anwendungsinitialisierungseinstellungen betrachtet.
Änderungen in applicationHost.config
Öffnen Sie die Datei applicationHost.config im Editor, die sich bei %WINDIR%\system32\inetsrv\config befindet. (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, soll 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 ein Stück weiter in applicationHost.config zum Konfigurationselement <sites>. 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 des PreloadEnabled auf "true" weist IIS 8.0 darauf hin, dass eine "gefälschte" Anforderung an die Anwendung gesendet wird, wenn der zugeordnete Anwendungspool gestartet wird. Deshalb legen wir im vorherigen Schritt den startMode des Anwendungspools auf "AlwaysRunning" fest.
Wenn die Kombination des Anwendungspools immer ausgeführt wird und die Anwendung selbst so gekennzeichnet ist, dass immer eine gefälschte Anforderung empfangen wird, wenn der Computer neu gestartet wird und/oder der World Wide Web-Dienst wiederverwendet wird, stellt IIS 8.0 sicher, dass die Anwendungspoolinstanz ausgeführt wird und dass die Anwendung "/appinit" immer eine gefälschte Anforderung gesendet wird, um die Anwendung zum Starten auszulösen.
Änderungen im web.config der Anwendung
Öffnen Sie mit einer zweiten Instanz von Notepad die anwendungsbezogene web.config-Datei, 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 bereits einige Konfigurationsabschnitte, die bereits vorkonfiguriert, aber auskommentiert sind. Kommentieren Sie den Konfigurationsausschnitt, der sich im <system.webServer> Konfigurationsabschnitt befindet. Dieser Codeausschnitt befindet sich direkt unterhalb des Kommentars "Übung 1 – Schritt 1" in der web.config Datei. Speichern Sie dann Ihre Ä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) ausstellen soll, um die Anwendung zu initialisieren. Während IIS auf den Abschluss der Anforderung "/default.aspx" wartet, wird "Startup.htm" an alle aktiven Browserclients bereitstellen. "Startup.htm" ist die "Begrüßungsseite" für die Anwendung.
Ausführen der Anwendung
Öffnen Sie ein Eingabeaufforderungsfenster mit erhöhten Rechten und starten Sie den World Wide Web-Service mit dem folgenden Befehl neu:
net stop w3svc & net start w3svc
Denken Sie daran, das Eingabeaufforderungsfenster mit der Option "Als Administrator ausführen" auszuführen!
Navigieren Sie mit Internet Explorer zur folgenden URL:
http://localhost/appinit/default.aspx
Der Browser gibt die statische Seite "Startup.htm" mit einem grauen Hintergrund für die ersten Sekunden zurück, da dies die "Begrüßungsseite" ist, die in web.configkonfiguriert wurde. Sie können die Seite in Ihrem Webbrowser weiterhin aktualisieren und beobachten, dass etwa acht Sekunden später (simuliert mit einem Threadschlaf im global.asax) der Beispielanwendung den "echten" Inhalt für default.aspx mit weißem Hintergrund erhalten. Dies gibt an, dass die Anwendungsinitialisierung abgeschlossen ist.
Konfigurieren der überlappenden Prozesswiederverwendung
IIS 8.0 integriert die globale Anwendungsinitialisierung mit überlappendem Prozessrecycling, indem die Anwendungsinitialisierung in einem überlappenden Prozess im Hintergrund ausgeführt wird. Wenn IIS erkennt, dass ein aktiver Arbeitsprozess neu gestartet wird, leitet IIS den aktiven Datenverkehr erst auf den neu gestarteten Arbeitsprozess um, wenn der neue Arbeitsprozess die Ausführung aller Anwendungsinitialisierungs-URLs abgeschlossen hat. Dadurch wird sichergestellt, dass Kunden, die Ihre Website durchsuchen, keine Anwendungsinitialisierungsseiten sehen, sobald eine Anwendung live ist und ausgeführt wird.
Wechseln Sie zurück zur Instanz von Notepad, die applicationHost.config hat. Ändern Sie den Eintrag im Anwendungspool für ".NET v4.5", damit er dem unten gezeigten Konfigurationsausschnitt entspricht.
<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 <Recyclingelement> weist IIS an, den Arbeitsprozess alle 30 HTTP-Anforderungen wiederzuverwenden.
Ausführen der Anwendung ein zweites Mal
Öffnen Sie ein Eingabeaufforderungsfenster mit erhöhten Rechten und setzen Sie den World Wide Web-Dienst mit dem folgenden Befehl zurück:
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.
Rufen Sie als Nächstes den Task-Manager auf, und stellen Sie sicher, dass die Registerkarte "Prozesse " angezeigt wird. Sortieren Sie die Prozessliste nach Namen, bis eine Instanz von w3wp.exe ausgeführt wird. Diese Instanz ist der Arbeitsprozess, der derzeit die "appinit" ASP.NET Anwendung ausführt.
Aktualisieren Sie den Browser ein paar Mal, bis der Inhalt von der tatsächlichen default.aspx Seite zurückgegeben wird. Sie wissen, dass die Anwendung die "echte" default.aspx Seite ausführt, wenn sich der Hintergrund in Weiß ändert. Ordnen Sie als Nächstes die Fenster auf dem Bildschirm an, damit 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 Aufgaben-Manager-Prozessliste angezeigt wird, wie unten gezeigt:
Der Screenshot zeigt, dass die zweite Instanz von w3wp.exe aufgrund des zuvor festgelegten Prozessrecyclinglimits gestartet ist.
Sie können das Browserfenster in regelmäßigen Abständen für die nächsten zehn Sekunden aktualisieren. Beachten Sie, dass default.aspx weiterhin ausgeführt wird. Wenn das überlappende Recycling abgeschlossen ist, wird eine w3wp.exe Instanz aus dem Aufgaben-Manager-Prozessfenster ausgeblendet.
Während der gesamten Dauer des überlappenden Recyclings wird Ihnen weiterhin der Inhalt der "realen" default.aspx angezeigt, 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-Neuschreibung und Anwendungsinitialisierung
Standardmäßig können Sie bei der Anwendungsinitialisierung nur eine einzelne "Begrüßungsseite"-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 Rewrite Module erstellen, das komplexere Zuordnungen zu vorgenerierten statischen Inhalten enthält.
In dieser exemplarischen Vorgehensweise ersetzen Sie das Attribut remapManagedRequestsTo durch eine Reihe von Url Rewrite-Regeln, die dasselbe Endergebnis erreichen.
Hinweis: Anweisungen zum Installieren von URL Rewrite finden Sie im Anhang.
Änderungen in applicationHost.config
Wenn Sie die Instanz von Notepad verwenden, die applicationHost.config geöffnet hat, setzen Sie sowohl den Anwendungspool als auch die Anwendungselemente zurück, um die gesamte globale Anwendungsinitialisierungsverarbeitung zu deaktivieren. Die globalen Einstellungen werden in diesem Schritt entfernt, da sich der Rest dieser exemplarischen Vorgehensweise auf das konfigurierte Anwendungsinitialisierungsverhalten konzentriert.
Die applicationHost.config Einträge für den Anwendungspool und die Anwendung sind wie unten dargestellt.
Anwendungspoolkonfigurationseintrag:
<add name=".NET v4.5" managedRuntimeVersion="v4.0" />
Anwendungskonfigurationseintrag:
<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, recyceln Sie in einem Eingabeaufforderungsfenster mit erhöhten Rechten den World Wide Web Service mit dem folgenden Befehl:
net stop w3svc & net start w3svc
Änderungen an web.config auf Anwendungsebene
Entfernen Sie mithilfe der Instanz von Notepad, die die web.config der Anwendungsebene geöffnet hat, 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-Neuschreibregeln hinzu. Fügen Sie als Nächstes eine Neuschreibregel hinzu, die Anforderungen an "default.aspx" explizit zuordnet, sowie "/" zum Weiterleiten an "Startup.htm". Zwei Regeln sind erforderlich, da das Url Rewrite Module nicht weiß, wie Standarddokumente funktionieren. Da "/" in ASP.NET Anwendungen "default.aspx" entspricht, benötigen Sie zwei Url-Neuschreibregeln – eine Regel für jede URL-Variation.
Die neuen Regeln werden unten fett formatiert angezeigt. Alternativ können Sie die vorgegebenen URL-Rewrite-Regeln unter dem Kommentar "Übung 2 – Schritt 2 Zuordnungsanforderungen zur Startseite" in der Datei web.config auskommentieren.
<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>
Einige zu beachtende Punkte zu diesen Regeln: Zuerst ist das stopProcessing-Attribut bei den <Regel/>-Elementen auf "true" gesetzt. Dies ist erforderlich, um eine Catch-All-URL-Neuschreibregel später hinzuzufügen, und für Anforderungen an default.aspx oder "/", die die Catch-All-Regel nicht ausführen soll.
Beachten Sie zweitens, dass in den <Bedingungen/> Elementen eine URL-Neuschreibbedingung vorhanden ist. Diese Bedingung besagt effektiv" "Nur Regel 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.htmrendert.
Als Nächstes fügen Sie eine Catch-All-Neuschreibregel hinzu. Wenn Sie das URL-Rewrite-Modul in Kombination mit der Anwendungsinitialisierung verwenden, ist eine Catch-All-Regel erforderlich, die ausgeführt wird, wenn keine der vorherigen Regeln übereinstimmt. Fügen Sie die unten gezeigte fett formatierte Regel dem Überarbeitungsabschnitt als Allgemeinregel hinzu. Alternativ können Sie die Auskommentierung der vorgefüllten Catch-All-Regel in web.config aufheben, die sich unter dem Kommentar "Übung 2 – Schritt 2 Einrichten einer Catch-All Regel" in der web.config Datei befindet.
<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>
Speichern Sie Ihre Änderungen, wenn Sie fertig sind!
Die neue Regel stimmt mit jeder URL überein, die sie erreicht, und weist IIS an, die Verarbeitung der Anforderung fortzusetzen, die an die eingehende URL vorgenommen wurde. Die Regel legt außerdem eine Servervariable namens "SKIP_MANAGED_MODULES" auf einen Wert von "0" fest, der "false" entspricht. Diese Einstellung weist IIS an, dass die umgeschriebene Anforderung von Url Rewrite auf die gleiche Weise behandelt werden sollte wie wenn die Anforderung normalerweise von der Leitung gelangt war.
Ausführen der Anwendung
Öffnen Sie ein Eingabeaufforderungsfenster mit erhöhten Rechten und setzen Sie den World Wide Web-Dienst mit dem folgenden Befehl zurück:
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 URL-Rewrite-Regeln jetzt verwendet werden, um die Logik der Begrüßungsseite zu definieren, zeigt sich weiterhin dasselbe Verhalten wie im ersten Beispiel. Die Startup.htm Seite mit grauem Hintergrund wird zunächst angezeigt. Wenn Sie den Browser regelmäßig neu laden, wechselt der Seitenhintergrund nach etwa acht Sekunden erneut zu Weiß, was darauf hinweist, dass jetzt die "echte" default.aspx Seite bereitgestellt wird, weil die Anwendungsinitialisierung abgeschlossen ist.
Regeln für komplexe Begrüßungsseiten
In den vorherigen Tutorials wird die Anwendungsinitialisierung als einfache 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=Lighthousehttp://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 "Tulpen" ist, überträgt der ASP.NET-Handler das entsprechende JPG, das sich im ordner App_Data befindet.
Da der Bildhandler gerade Bilder zurückgibt, möchten Sie auch während der Anwendungsinitialisierung weiterhin ein entsprechendes Bild zurückgeben können. Obwohl die Mechanik der Bereitstellung dieser Bilder verwalteten Code verwendet, können Sie Kunden schnell vorab generierte Bilder ausliefern, auch wenn die zugrunde liegende ASP.NET-Anwendung lange benötigt, um zu starten und sich zu initialisieren.
Änderungen an web.config auf Anwendungsebene
Fügen Sie mithilfe der Instanz von Notepad, die die web.config auf Anwenderebene geöffnet hat, eine weitere URL-Umschreibregel vor der endgültigen Catch-All-Regel hinzu. Der neue hinzuzufügende Codeausschnitt wird unten angezeigt. Alternativ können Sie die Auskommentierung der vorgefüllten Bildhandlerregel in web.config aufheben, die sich unter dem Kommentar "Übung 3 – Schritt 1 Komplexe Begrüßungsseitenregeln" in der web.config Datei befindet.
<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>
Speichern Sie Ihre Änderungen, wenn Sie fertig sind.
Genau wie bei den Rewrite-Regeln für default.aspx und "/" hat diese Regel das stopProcessing-Attribut auf "true" festgelegt, um sicherzustellen, dass Anforderungen an ImageHandler.ashx nicht versehentlich in die endgültige Catch-All-Neuschreibregel während der Anwendungsinitialisierung fallen.
Für Anforderungen an "ImageHandler.ashx" verwendet die Rewrite-Regel eine Erfassungsgruppe für reguläre Ausdrücke, um das angeforderte Bild aus der Abfragezeichenfolge zu extrahieren. Das Musterdefinitionsmuster für Übereinstimmungen="image=([A-Za-z]+)&?" weist IIS an, den Wert der Abfragezeichenfolgenvariable "image" zu extrahieren. Dieser Wert wird dann im URL-Attribut des Aktionsattributes verwendet: url="Images/{C:1}_static.jpg".
Das URL-Attribut für das Action-Element weist das Url-Rewrite-Modul an, Anforderungen an ImageHandler.ashx stattdessen auf Dateien im Unterverzeichnis "Images" der Anwendung umzuleiten. 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=Tulpen in Images/Tulips_static.jpgumgeschrieben.
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.jpgdarstellt, und die andere, die die "statische" Version von Lighthouse.jpgdarstellt. Diese statischen Bilder dienen als vorgenerierte Inhalte, die während der Initialisierung der Anwendung bereitgestellt werden können.
Ausführen der Anwendung
Öffnen Sie ein Eingabeaufforderungsfenster mit erhöhten Rechten und setzen Sie den World Wide Web-Dienst mit dem folgenden Befehl zurück:
net stop w3svc & net start w3svc
Navigieren Sie mit Internet Explorer zu einer der folgenden Optionen:
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 "statische" vorgenerierten Versionen der Bilder handelt. Das Wasserzeichen ist Text im oberen Teil des Bilds, der besagt: "Dieses Bild ist die statische Version von...."
Wenn Sie Ihren Browser nach ungefähr 10 Sekunden aktualisieren, sehen Sie, dass sich der zurückgegebene Bildinhalt in den "echten" Inhalt ändert, der vom ImageHandler.ashx 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 internet Explorer zu erzwingen, die Seite neu zu laden.]
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 zu bedienen, während die zugrunde liegende Anwendung die teure Initialisierungsverarbeitung abgeschlossen hat.
Der Initialisierungsprozess kann automatisch erfolgen, wenn ein Webserver online gebracht oder wiederverwendet wird. Für Szenarien, in denen Serveradministratoren anwendungen nicht gierig 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 Rewrite-Modul integriert werden, um umfangreichere und komplexere Initialisierungsregeln bereitzustellen. Mit der Verwendung von in das Feature "Anwendungsinitialisierung" integrierten Url Rewrite-Regeln ist es möglich, verschiedene Typen von vorgenerierten statischen Inhalten für verschiedene URLs und virtuelle Pfade zu bedienen, während IIS im Hintergrund das Starten einer Anwendung fortsetzt.
Anhang – Einrichten des Beispiels ASP.NET Anwendung
Hinweis: In den folgenden Schritten wird davon ausgegangen, dass Ihr 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
Das Beispiel ASP.NET Anwendung ist in der folgenden .zip Datei enthalten:
Entpacken Sie die Datei in den Ordner "wwwroot" auf Ihrem Webserver. Wenn Ihr Webserver beispielsweise die "Standardwebsite" auf dem Laufwerk "C:\" installiert hat, entzippen Sie den Inhalt der Datei in c:\inetpub\wwwroot\appinit.
Erstellen einer Anwendung in IIS 8.0
Nachdem Sie das Beispiel "appinit" auf das Dateisystem entzippen, 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-Neuschreibmoduls
Die Beispielanwendung verwendet das Url Rewrite-Modul für die erweiterte Integration in das Feature "Anwendungsinitialisierung". Sie müssen das Url Rewrite-Modul auf Ihrem Server installieren. es kann von: heruntergeladen werden. https://www.iis.net/downloads/microsoft/url-rewrite
Konfigurieren des URL-Neuschreibmoduls
Nachdem das Url Rewrite-Modul auf Ihrem Webserver installiert wurde, müssen Sie die IIS-applicationHost.config-Datei ändern, um die Verwendung der servervariablen SKIP_MANAGED_MODULES zuzulassen, die von der Anwendungsinitialisierungsfunktion unterstützt wird.
Öffnen Sie die maschinenweite Datei applicationHost.config in einem Text-Editor wie Notepad. 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 nach unten in der Datei, und suchen Sie den Sicherheitsabschnitt. Dieser Abschnitt beginnt mit dem Xml-Element: <Sicherheit>.
Geben Sie die folgenden XML-Elemente vor dem <Sicherheitselement> ein:
<rewrite>
<allowedServerVariables>
<add name="SKIP_MANAGED_MODULES" />
</allowedServerVariables>
</rewrite>
Speichern Sie die Änderungen in der applicationHost.config Datei.