Wenn auf die Website von den ersten Benutzern zugegriffen wird, ist die Leistung sehr langsam.
Das Windows Azure-Setup verwendet IIS 7.0, sodass das Aufwärminitialisierungsmodul keine Option ist.
Gibt es eine Möglichkeit, die Website "aufzuwärmen", so dass diese Leistungsgeschwindigkeit kein Problem ist?
Ich habe es mir angeschaut: In Timeouts von Anwendungspools im Leerlauf steuern Azure , aber nicht sicher, ob dies weiterhin ein Problem verursacht, wenn Azure ungefähr alle 29 Stunden den Anwendungspool wiederverwendet.
UPDATE:
Die Bereitstellung ist eine Webrolle, die mehrere Websites enthält. Ist es möglich, die Vorkompilierung dafür zu machen? oder benutzen Sie Webrollen, wie in einer der folgenden Antworten vorgeschlagen?
BEARBEITEN:
Wie @Igorek unten in Bezug auf die Verwendung von Web-Rollen angegeben hat, die sich während des Startvorgangs der Rolle automatisch laden, was im Setup, das ich habe, möglich ist. Hat jemand ein Beispiel, wie man das erreicht?
Ich habe Folgendes untersucht: Steuern der Leerlaufzeiten für Anwendungspools in Windows Azure, aber nicht sicher, ob dies weiterhin ein Problem verursacht, wenn Azure ungefähr alle 29 Stunden den Anwendungspool wieder verwendet.
Es wird kein Problem verursacht, wenn Azure den App-Pool wiederverwendet. Sie können jedoch auch zu dieser Startaufgabe hinzufügen, um die Wiederverwendung des Anwendungspools zu verhindern / zu erhöhen.
Versuchen Sie Folgendes:
Definieren Sie die Aufgabe in Ihrem ServiceDefinition
:
Dann haben Sie Ihre cmd
Datei mit dem folgenden Code (einfach in den Editor kopieren und dann als .cmd
Datei speichern):
Zwei Dinge, auf die Sie achten sollten :
1) Stellen Sie sicher, dass Sie die Datei mit ANSI-Codierung speichern.
2) Wenn Sie dieses Skript in Visual Studio hinzugefügt haben, stellen Sie sicher, dass Sie in den Eigenschaften die Option "Immer kopieren" als Option "In Ausgabeverzeichnis kopieren" auswählen.
Wenn die erste HTTP-Anforderung eintrifft, wird tatsächlich viel zusätzliche Arbeit geleistet - der Anwendungspool wird gestartet, alle benötigten Assemblys werden gefunden, alle als MSIL ausgelieferten Assemblys werden in Maschinencode kompiliert, dann werden die erforderlichen ASP.NET-Aufrufe vorkompiliert ( es sei denn, Sie stellen sie vorkompiliert bereit, aber es ist ziemlich schwierig mit Azure-Tools, also schätze ich, dass Sie das nicht tun. Dies alles braucht etwas Zeit und so müssen die unglücklichen ersten Benutzer warten.
Die Problemumgehung besteht darin, die Site vom Rolleneintrittspunkt OnStart()
aus zu aktualisieren - die Site vorkompilieren und dann eine HTTP-Anforderung an localhost senden.
mattytommos Antwort funktioniert einwandfrei, aber ich bevorzuge es, das gleiche Ziel programmatisch zu erreichen, anstatt mich auf eine cmd-Datei zu verlassen. Sie können es in 3 Schritten tun:
Schritt 1: Sie müssen das NuGet-Paket Microsoft.Web.Administration installieren. Das Paket enthält die Bibliothek, die benötigt wird, um IIS von Ihrem Anwendungscode aus zu steuern.
Schritt 2: Dann fügen Sie dieser Methode einfach einen Aufruf aus dem RoleEntryPoint der Webrolle hinzu. Wenn es nicht existiert, fügen Sie einfach eine Klasse hinzu, die von RoleEntryPoint erbt.
%Vor%Dieser Code konfiguriert nur alle Anwendungspools auf dem Computer, die niemals wiederverwendet werden oder Zeitüberschreitung verursachen.
Schritt 3: Damit dies funktioniert, müssen Sie auch diese Zeile zu ServiceDefinition.csdef hinzufügen:
%Vor%Dadurch wird sichergestellt, dass die OnStart () -Methode des Web RoleEntryPoint mit erhöhten Berechtigungen ausgeführt wird. Andere Teile Ihres Codes sind davon nicht betroffen, was aus Sicherheitsgründen kein Problem darstellt.
Das ist alles. Problem mit langsamen Lasten ist jetzt gelöst:)
Tags und Links azure