ASP.NET 2.0/3.5 Konfiguration für gemeinsames Hosting
von Walter Oliver
Einführung
IIS bietet Verbesserungen für dynamische Inhalte, insbesondere für ASP.NET. In IIS 7 und höher ist das ASP.NET Laufzeiterweiterungsmodell in den Core-Server integriert. Dadurch können Entwickler IIS vollständig mit den umfangreichen Funktionen von ASP.NET 2.0 oder höher und dem .NET Framework erweitern, statt systemnähere C++-APIs zu verwenden. Vorhandene ASP.NET Anwendungen profitieren von der engeren Integration, da vorhandene Features wie Formularauthentifizierung, Rollen und Ausgabezwischenspeicherung für alle Inhaltstypen verwendet werden können, nicht nur für .aspx-Seiten.
Weitere Informationen zu einigen der wichtigsten Features und Vorteile der ASP.NET Integration in IIS finden Sie in der Core Web Server Übersicht. Informationen dazu und zum Installieren von .NET Framework 3.5 finden Sie unter https://www.microsoft.com/net/ oder auf der ASP.NET Community-Website.
Die folgenden Einstellungen wurden auf dem Webserver als Teil der freigegebenen Hostingarchitektur verwendet, die im Artikel „Planen der Webhostingarchitektur“ im Hosting-Leitfaden erwähnt wurde. Wenn Sie mehr darüber erfahren möchten, warum diese Einstellungen empfohlen werden, und um weitere Details zur Konfiguration zu erhalten, laden Sie das ASP.NET 4 Hosting-Bereitstellungshandbuch herunter.
Konfigurieren von Vertrauensstufen
Mit Vertrauensstufen können Sie Sicherheitsregeln für ASP.NET definieren. Sie definieren, welche Arten von Vorgängen eine Anwendung ausführen kann, z. B. das Lesen vom Datenträger oder den Zugriff auf die Registrierung. Die empfohlene Vertrauensstufe ist „Mittel“, was viele häufige Vorgänge zulässt, aber viele der gefährlichen Anwendungen einschränkt. Wenn Sie mehr erlauben möchten, als die mittlere Vertrauensstufe zulässt, sollten Sie eine eigene Vertrauensstufe erstellen.
Um eine eigene Vertrauensstufe und zusätzliche Berechtigungen zu konfigurieren
Navigieren Sie zum Verzeichnis
%windir%\Microsoft.NET\Framework \{version}\ CONFIG
.Kopieren Sie die Datei für die mittlere Vertrauensrichtlinie, „web_mediumtrust.config“, um eine neue Richtliniendatei im selben Verzeichnis
%windir%\Microsoft.NET\Framework\{version}\ CONFIG\
zu erstellen.Benennen Sie die Datei um, um anzugeben, dass es sich um eine benutzerdefinierte Vertrauensstufe handelt, z. B. „web_CustomTrust.config“.
Öffnen Sie die neue Datei „web_CustomTrust.config“ und suchen Sie den Abschnitt WebPermission.
...
<IPermission class="WebPermission"
version="1" <ConnectAccess> <URI uri="$OriginHost$" /> </ConnectAccess> </IPermission>
...
Bearbeiten Sie WebPermission so, dass das Element ConnectAccess entfernt wird und Unrestricted auf true festgelegt ist.
...
<IPermission class="WebPermission"
version="1" Unrestricted="true"/>
...
Kommentieren Sie PrintingPermission und EnvironmentPermissionaus, es sei denn, sie sind für die geteilte Hostingumgebung erforderlich.
Fügen Sie das neue Element
<trustLevel>
zum Abschnitt<securityPolicy>
der Datei „Web.config“ hinzu, wie unten dargestellt:<location allowOverride="true">
<system.web> <securityPolicy> <trustLevel name="Full" policyFile="internal" /> <trustLevel name="High" policyFile="web_hightrust.config" /> <trustLevel name="Medium" policyFile="web_mediumtrust.config" /> <trustLevel name="Low" policyFile="web_lowtrust.config" /> <trustLevel name="Minimal" policyFile="web_minimaltrust.config" /> <trustLevel name="Custom" policyFile="web_CustomTrust.config" /> </securityPolicy> <trust level="Custom" originUrl="" /> </system.web> </location>
Sperren Sie die Vertrauensstufe, sodass sie nicht von Anwendungen auf dem Server geändert werden kann, indem Sie das Location-Element allowOverride auf false festlegen.
<location allowOverride="false"> <system.web> <securityPolicy> <trustLevel name="Full" policyFile="internal" /> <trustLevel name="High" policyFile="web_hightrust.config" /> <trustLevel name="Medium" policyFile="web_mediumtrust.config" /> <trustLevel name="Low" policyFile="web_lowtrust.config" /> <trustLevel name="Minimal" policyFile="web_minimaltrust.config" /> <trustLevel name="Custom" policyFile="web_CustomTrust.config" /> </securityPolicy> <trust level="Custom" originUrl="" /> </system.web> </location>
Konfigurieren von Inhalten, die von einem Remotedateiserver bereitgestellt werden sollen
Beim Konfigurieren von ASP.NET für die Arbeit mit Inhalten, die auf einem Remotedateiserver gespeichert sind, sind einige zusätzliche Schritte erforderlich.
Wenn IIS Inhalte von einem Remotedateiserver empfängt, wird die Identität des authentifizierten Benutzers imitiert. Dies ist entweder der Benutzer, der speziell als virtueller Verzeichnisbenutzer festgelegt wurde, oder wenn er nicht angegeben ist, der anonyme Benutzer. Der IIS-Leitfaden gibt an, dass der Anwendungspoolbenutzer als anonymer Benutzer verwendet werden soll. In diesem Fall ist die imitierte Identität also die Anwendungspoolidentität. Die Verwendung einer Identität für den gesamten Zugriff (anonym, Anwendungspool und virtuelles Verzeichnis) vereinfacht eine Bereitstellung erheblich.
Um einige ASP.NET Anwendungen von einem Remotedateiserver auszuführen, muss der imitierte Benutzer Zugriff auf die Windows Temp- und die temporären Kompilierungsverzeichnisse haben.
Wie man ASP.NET Inhalte über eine Dateiserverfreigabe anbietet
Erteilen Sie Berechtigungen für alle Anwendungspoolidentitäten für das Verzeichnis
%windir%\Temp
, indem Sie die ACLs für den Ordner bearbeiten.Fügen Sie eine Code Access Security Richtlinie (CAS) hinzu, um ASP.NET geeigneten Zugriff auf die Dateiserverfreigabe zu ermöglichen. Öffnen Sie dafür eine Eingabeaufforderung mit erhöhten Rechten und führen Sie den folgenden Befehl aus:
%windir%\Microsoft.NET\Framework\v2.0.50727\caspol -m -ag 1. -url "file://\\remotefileserver\content$\*" FullTrust
Konfigurieren von Garbage Collector-Einstellungen
Das .NET Framework verwendet die automatische Garbage Collection zum Verwalten des Arbeitsspeichers für alle Anwendungen. Wenn der Garbage Collector (GC) entscheidet, dass genügend Müll angesammelt wurde und dies effizient ist, führt er eine Sammlung aus, um Speicherplatz freizugeben. Dieser Prozess läuft vollständig automatisch, aber es gibt Einstellungen, die den Prozess effizienter gestalten können.
Weitere Informationen zur GC finden Sie unter „Kapitel 5 – Verbessern der Leistung von verwaltetem Code“ im Abschnitt Garbage Collection Erläutert.
Aktivieren des Arbeitsstations-Garbage Collectors
Standardmäßig wird der Server GC vom .NET Framework verwendet, um für die Geschwindigkeit und CPU-Auslastung zu optimieren. Bei gemeinsam genutztem Hosting, bei dem Arbeitsspeicher häufiger die Einschränkung für eine Reihe aktiver Websites ist, sollte der Arbeitsstations-GC verwendet werden. Der Arbeitsstations-GC optimiert den Arbeitsspeicher.
Weitere Informationen zu dieser Einstellung finden Sie im KB-Artikel „Möglicherweise wird eine Fehlermeldung angezeigt, oder der Computer reagiert nicht mehr, wenn Sie Webanwendungen hosten, die ASP.NET auf einem Computer mit Windows Server 2003 verwenden“ (https://support.microsoft.com/kb/911716
).
Deaktivieren des gleichzeitigen Garbage Collectors
Es gibt 3 Versionen der GC: Server, Arbeitsstation mit Gleichzeitigkeit aktiviert und Arbeitsstation mit Gleichzeitigkeit deaktiviert. Der gleichzeitige Arbeitsstations-GC ist für Clientszenarien vorgesehen. Genau wie der Server GC Durchsatz und Skalierbarkeit zu Kosten des Speichers priorisiert, priorisiert der gleichzeitige Arbeitsstations-GC die Reaktionsfähigkeit zu Kosten des Speichers. Um den Arbeitsspeicher zu optimieren, deaktivieren Sie die gleichzeitige Garbage Collection, wenn Sie die Arbeitsstations-GC verwenden.
Aktivieren der Einstellung „gcTrimCommitOnLowMemory“
Da der GC Speicher für zukünftige Belegungen freihält, kann sein belegter Speicher größer sein als der unbedingt erforderliche Speicher. Dieser Speicher kann im Hinblick auf Situationen reduziert werden, in denen eine hohe Auslastung des Systemspeichers vorherrscht. Wenn die Einstellung aktiviert ist, wertet der GC die Speichersystemlast aus und wechselt in einen eingeschränkten Modus, wenn die Last 90 % erreicht. Dabei bleibt der eingeschränkte Modus bestehen, bis die Last unter 85 % fällt. Wenn die Umstände es erlauben, kann der GC bestimmen, dass die Einstellung der aktuellen Anwendung nicht hilft und sie ignorieren.
Um die GC-Einstellung zu konfigurieren
Navigieren Sie zum Verzeichnis
%windir%\Microsoft.NET\Framework\{version}
.Öffnen Sie die Datei aspnet.config, und suchen Sie das Element
<gcServer>
. Wenn das Element nicht vorhanden ist, erstellen Sie einen Eintrag mithilfe von Schritt 3....
<configuration> <runtime> <gcServer enabled="true"/> </runtime> </configuration> ...
Fügen Sie die folgenden drei Elemente im Abschnitt
<runtime>
hinzu:...
<configuration> <runtime> <gcServer enabled="false" />
<gcConcurrent enabled="false" /> <gcTrimCommitOnLowMemory enabled="true" /> </runtime> </configuration> ...
Speichern Sie die Datei, und schließen Sie sie.