Verarbeiten von Modelleinstellungen für einen Anwendungspool <processModel>

Übersicht

Mithilfe des Elements <processModel> können Sie viele der Sicherheits-, Leistungs-, Integritäts- und Zuverlässigkeitsfeatures von Anwendungspools in IIS 7 und höher konfigurieren. Es bietet folgende Features:

  • Anwendungspoolidentität, die der Name des Diensts oder Benutzerkontos ist, unter dem der Arbeitsprozess des Anwendungspools ausgeführt wird. Dies wird durch das Attribut identityType definiert. Standardmäßig wird ab IIS 7.5 ein Anwendungspool unter dem integrierten Konto ApplicationPoolIdentity ausgeführt, das dynamisch vom Windows-Prozessaktivierungsdienst (WAS) erstellt wird. (In IIS 7.0 war die Standardidentität das Konto NetworkService.) Sie können den Attributwert identityType in das integrierte Konto NetworkService, das Konto LocalService, das integrierte Konto LocalSystem oder ein benutzerdefiniertes Konto ändern, das Sie erstellen. Wenn Sie ein benutzerdefiniertes Konto auswählen, definieren Sie die Kontoanmeldeinformationen mithilfe der Attribute userName und password. Beachten Sie jedoch, dass die Konten NetworkService,LocalService und LocalSystem mehr Benutzerrechte haben als das Konto ApplicationPoolIdentity. (Warnung: Es ist ein schwerwiegendes Sicherheitsrisiko, einen Anwendungspool mit allgemeinen Benutzerrechten auszuführen.) Darüber hinaus können Sie das Attribut logonType verwenden, um anzugeben, ob sich die Prozessidentität als Batchbenutzer oder -dienst anmelden soll. (Weitere Informationen zu Anmeldetypen finden Sie im Artikel zur Funktion LogonUser.)
  • Web-Gardening and Verwendung von Hardware mit nicht einheitlichem Speicherzugriff (Non-Uniform Memory Access, NUMA), können Sie über das Festlegen des Attributs maxProcesses konfigurieren. Informationen zum Web-Gardening finden Sie unter maxProcesses mit einem Wert größer als eins. Legen Sie für die Verwendung von NUMA-Hardware maxProcesses auf einen Wert von "0" fest, um anzugeben, dass IIS dieselbe Anzahl von Arbeitsprozessen ausführt wie NUMA-Knoten vorhanden sind.
  • Timeout-Einstellungen im Leerlauf, mit denen Sie festlegen können, wie lange ein Arbeitsprozess im Leerlauf bleibt, bevor er heruntergefahren wird. Bearbeiten Sie das Attribut idleTimeout, um diese Einstellung zu konfigurieren.
  • Systemüberwachung durch Aktivieren von Pings gegen den Arbeitsprozess, die maximale Zeit, die es einem Arbeitsprozess ermöglicht, auf einen Ping zu reagieren, und die Häufigkeit von Pings, die an einen Arbeitsprozess gesendet werden, um seine Integrität zu überwachen. Bearbeiten Sie die Attribute pingingEnabled, pingInterval und pingResponseTime, um diese Einstellungen zu konfigurieren.
  • Herunterfahren des Arbeitsprozesses und Startzeitlimits. Der erste Grenzwert wird durch das Attribut shutdownTimeLimit festgelegt und bestimmt das Intervall, das IIS 7 und höher einem Arbeitsprozess zum Abschließen aller Anforderungen erteilt, bevor der WWW-Dienst den Arbeitsprozess beendet. Der zweite Grenzwert wird durch das Attribut startupTimeLimit festgelegt und gibt die Zeitspanne an, in IIS 7 und höher ein Anwendungspool gestartet werden kann.

Kompatibilität

Version Hinweise
IIS 10.0 Das <processModel> Element wurde in IIS 10.0 nicht geändert.
IIS 8.5 Das Attribut idleTimeoutAction wurde hinzugefügt, um einen Arbeitsprozess zu aktivieren, der für die Dauer des Attributs idleTimeout leer ist, das entweder beendet oder angehalten wird, nicht nur beendet.
IIS 8.0 Das Attribut setProfileEnvironment wurde hinzugefügt, sodass die Umgebung basierend auf dem Benutzerprofil für einen neuen Prozess festgelegt werden kann. Werte wurden für das Attribut maxProcesses hinzugefügt, einschließlich der Unterstützung für den nicht einheitlichen Speicherzugriff (NUMA). Das Attribut logEventOnProcessModel wurde hinzugefügt, um die im Prozess ausgeführte Aktion anzugeben.
IIS 7.5 Das Element <processModel> des Elements <add> wurde in IIS 7.5 aktualisiert, um Einstellungen einzuschließen, mit denen Sie Anwendungen mit der neuen ApplicationPoolIdentity ausführen und den Anmeldetyp für die Prozessidentität angeben können.
IIS 7.0 Das <processModel> Element wurde in IIS 7.0 eingeführt.
IIS 6.0 Das Element <processModel> ersetzt einige der Einstellungen im IIS 6.0-Metabasisobjekt IIsApplicationPools.

Setup

Die Auflistung <applicationPools> ist in der Standardinstallation von IIS 7 und höher enthalten.

Gewusst wie

So bearbeiten Sie Prozessmodellkonfigurationseinstellungen

  1. Öffnen Sie den Internet Information Services (IIS) Manager:

    • Wenn Sie Windows Server 2012 oder Windows Server 2012 R2 verwenden:

      • Klicken Sie in der Taskleiste auf Server-Manager dann auf Tools und dann auf den Internet Information Services (IIS) Manager.
    • Wenn Sie Windows 8 oder Windows 8.1 verwenden:

      • Halten Sie die Windows-Taste gedrückt, drücken Sie den Buchstaben X, und klicken Sie dann auf "Systemsteuerung".
      • Klicken Sie auf Verwaltungund doppelklicken Sie dann auf den Internet Information Services (IIS) Manager.
    • Wenn Sie Windows Server 2008 oder Windows Server 2008 R2 verwenden:

      • Klicken Sie auf der Taskleiste auf Start, zeigen Sie auf Verwaltungund dann auf den Internet Information Services (IIS) Manager.
    • Wenn Sie Windows Vista oder Windows 7 verwenden:

      • Klicken Sie auf der Taskleiste auf "Start" und dann auf "Systemsteuerung".
      • Doppelklicken Sie auf Verwaltungund doppelklicken Sie dann auf den Internet Information Services (IIS) Manager.
  2. Erweitern Sie im Bereich Verbindungen den Servernamen, klicken Sie auf Anwendungspools, und klicken Sie auf den Anwendungspool, den Sie bearbeiten möchten. Screenshot of the I I S Manager window displaying the Application Pools page.

  3. Klicken Sie im Bereich Aktionen auf Erweiterte Einstellungen...

  4. Klicken Sie im Dialogfeld Erweiterte Einstellungen auf die Prozessmodelleigenschaft, die Sie bearbeiten möchten, und bearbeiten Sie sie dann im Eigenschaftenwertabschnitt des Dialogfelds, und klicken Sie dann auf OK. Ändern Sie z. B. das Zeitlimit für das Herunterfahren (Sekunden) und die Startzeitlimits (Sekunden) auf 30.
    Screenshot of the Advanced Settings dialog box. Process Model is highlighted.

Konfigurieren von IIS für die Verwendung mit nicht einheitlicher Speicherzugriff (NUMA)-Hardware

  1. Öffnen Sie den Internet Information Services (IIS) Manager:

    • Vorgehensweise unter Windows Server 2012 oder höher:

      • Klicken Sie in der Taskleiste auf Server-Manager dann auf Tools und dann auf den Internet Information Services (IIS) Manager.
    • Vorgehensweise unter Windows 8 oder höher:

      • Halten Sie die Windows-Taste gedrückt, drücken Sie den Buchstaben X, und klicken Sie dann auf "Systemsteuerung".
      • Klicken Sie auf Verwaltungund doppelklicken Sie dann auf den Internet Information Services (IIS) Manager.
  2. Erweitern Sie im Bereich Verbindungen den Servernamen, und klicken Sie anschließend auf Anwendungspools.

  3. Wählen Sie im Bereich Anwendungspools den Pool aus, den Sie für NUMA konfigurieren möchten.

  4. Wählen Sie im Bereich Aktion die Option Erweiterte Einstellungen aus.

  5. Legen Sie unter dem Bereich ProzessmodellMaximale Arbeitsprozesse auf 0 fest.

    Screenshot of the Advanced Settings pane. Maximum Worker Processes is highlighted in the list.

So konfigurieren Sie die Aktion zum Leerlauf-Timeout

  1. Öffnen Sie den Internet Information Services (IIS) Manager:

    • Wenn Sie Windows Server 2012 R2 verwenden:

      • Klicken Sie in der Taskleiste auf Server-Manager dann auf Tools und dann auf den Internet Information Services (IIS) Manager.
    • Vorgehensweise unter Windows 8.1:

      • Halten Sie die Windows-Taste gedrückt, drücken Sie den Buchstaben X, und klicken Sie dann auf "Systemsteuerung".
      • Klicken Sie auf Verwaltungund doppelklicken Sie dann auf den Internet Information Services (IIS) Manager.
  2. Doppelklicken Sie im Bereich Verbindungen auf den Servernamen, doppelklicken Sie auf Anwendungspools, und wählen Sie dann den zu konfigurierenden Anwendungspool aus.

  3. Klicken Sie im Bereich Aktionen auf Erweiterte Einstellungen.

  4. Wählen Sie im Abschnitt Prozessmodell des Dialogfelds Erweiterte Einstellungen für idleTimeoutAction die Option Beenden oder Anhalten aus.

  5. Klicken Sie auf OK.

    Screenshot of the Advanced Settings dialog box. Idle Time out-Action is highlighted and Terminate is selected in the drop down menu.

Konfiguration

Sie konfigurieren das <processModel>-Element auf Serverebene in der Datei ApplicationHost.config.

Attribute

Attribut Beschreibung
identityType Optionales Enumerationsattribut.

Gibt die Kontoidentität an, unter der der Anwendungspool ausgeführt wird.

Hinweis: Ab IIS 7.5 ist der Standardwert ApplicationPoolIdentity. (In IIS 7.0 war der Standardwert NetworkService.)

Das Attribut identityType kann einer der folgenden möglichen Werte sein. Der Standardwert ist NetworkService.

Wert Beschreibung
ApplicationPoolIdentity Gibt an, dass der Anwendungspool unter dem dynamisch erstellten Anwendungspoolidentitätskonto ausgeführt wird. Ab IIS 7.5 ist die Standardidentität ApplicationPoolIdentity, unter der Anwendungspools ausgeführt werden sollen. (In IIS 7.0 war NetworkService die Standardidentität.)

Wenn ein Anwendungspool unter dem Konto ApplicationPoolIdentity ausgeführt wird, greift der Anwendungspool auf Ressourcen als Identität IIS AppPool<AppPool > zu. Für den "DefaultAppPool" ist die Identität beispielsweise "IIS AppPool\DefaultAppPool". Mit dieser Identität können Administratoren Berechtigungen angeben, die sich nur auf die Identität beziehen, unter der der Anwendungspool ausgeführt wird, wodurch die Serversicherheit erhöht wird.

Der numerische Wert ist 4.
LocalService Gibt an, dass der Anwendungspool unter dem integrierten Konto LocalService ausgeführt wird, das über dieselben Benutzerrechte wie NetworkService verfügt.

Wenn ein Anwendungspool unter dem Konto LocalService ausgeführt wird, zeigt der Anwendungspool anonyme Anmeldeinformationen im Netzwerk an.

Hinweis: Das Ausführen eines Anwendungspools unter einem Konto mit allgemeinen Benutzerrechten ist ein ernstes Sicherheitsrisiko.

Der numerische Wert ist 1.
LocalSystem Gibt an, dass der Anwendungspool unter dem integrierten Konto LocalSystem ausgeführt wird, das umfangreiche Berechtigungen auf dem lokalen Computer hat und als Computer im Netzwerk fungiert.

Hinweis: Das Ausführen eines Anwendungspools unter einem Konto mit allgemeinen Benutzerrechten ist ein ernstes Sicherheitsrisiko.

Der numerische Wert ist 0.
NetworkService Gibt an, dass der Anwendungspool unter dem integrierten Konto NetworkService ausgeführt wird. In IIS 7.0 war dies die Standardidentität, unter der Anwendungspools ausgeführt werden sollen; in IIS 7.5 wurde der Standardwert geändert in ApplicationPoolIdentity.

Wenn ein Anwendungspool unter dem Konto NetworkService ausgeführt wird, greift der Anwendungspool als Computerkonto auf Netzwerkressourcen zu.

Der numerische Wert ist 2.
SpecificUser Gibt an, dass der Anwendungspool unter einer benutzerdefinierten Identität ausgeführt wird, die mithilfe der Attribute userName und password konfiguriert wird.

Hinweis: Um nicht verschlüsselte Kennwortzeichenfolgen in Konfigurationsdateien zu speichern, verwenden Sie immer AppCmd.exe oder IIS-Manager, um Kennwörter einzugeben. Wenn Sie diese Verwaltungstools verwenden, werden die Kennwortzeichenfolgen automatisch verschlüsselt, bevor sie in die XML-Konfigurationsdateien geschrieben werden. Dies bietet eine bessere Kennwortsicherheit als das Speichern unverschlüsselter Kennwörter.

Hinweis: Verwaltete Dienstkonten können verwendet werden, um Dienste und Aufgaben zum Freigeben ihrer eigenen Domänenkonten zu aktivieren und die automatische Kennwortverwaltung zu aktivieren, ohne dass ein Administrator Kennwörter manuell verwalten muss. Weitere Informationen finden Sie unter Neuigkeiten zu verwalteten Dienstkonten.

Der numerische Wert ist 3.
idleTimeout Optionales timeSpan-Attribut.

Gibt an, wie lange (in Minuten) ein Arbeitsprozess im Leerlauf ausgeführt werden soll, wenn keine neuen Anforderungen empfangen werden und der Arbeitsprozess keine Anforderungen verarbeitet. Nach Ablauf der zugewiesenen Zeit sollte der Arbeitsprozess anfordern, dass er vom WWW-Dienst heruntergefahren wird.

Der Standardwert ist 00:20:00.

Um das Feature zur Leerlaufzeitüberschreitung zu deaktivieren, setzen Sie diesen Wert auf 00:00:00.
idleTimeoutAction Optionales Enumerationsattribut.

Gibt die auszuführende Aktion an, wenn die Leerlaufzeitüberschreitung erreicht wurde. Vor IIS 8.5 würde ein Arbeitsprozess, der für die Dauer des Attributs idleTimeout im Leerlauf war, beendet. Nach IIS 8.5 haben Sie die Wahl, einen Arbeitsprozess zu beenden, der den Grenzwert idleTimeout erreicht, oder anzuhalten, indem Sie ihn vom Arbeitsspeicher auf den Datenträger verschieben. Das Anhalten eines Prozesses dauert wahrscheinlich kürzer und verbraucht weniger Arbeitsspeicher als das Beenden.

Sie können eine Aktion zur Leerlaufzeitüberschreitung des Anhaltens mit der gefälschten Anforderung der Anwendungsinitialisierung konfigurieren (siehe applicationInitialization.

Das Attribut idleTimeoutAction kann die folgenden möglichen Werte aufweisen. Der Standardwert ist Terminate.
Wert Beschreibung
Terminate Beendet einen Leerlauf-Arbeitsprozess. Dies erfordert einen längeren Startzeitraum, wenn auf die Website anschließend von einem Benutzer zugegriffen wird und der Arbeitsprozess gestartet wird.

Der numerische Wert ist 0.
Suspend Hält einen Leerlauf-Arbeitsprozess an. Dadurch bleibt der Arbeitsprozess aktiv, wird jedoch vom Arbeitsspeicher auf den Datenträger verschoben, wodurch die verbrauchten Systemressourcen reduziert werden. Wenn eine Anforderung anschließend eingeht, lädt der Speicher-Manager die Seitendateien, die für die Anforderung vom Datenträger in den Arbeitsspeicher erforderlich sind, wahrscheinlich schneller verfügbar, als wenn er zuvor beendet wurde.

Der numerische Wert ist 1.
loadUserProfile Optionales boolesches Attribut.

Gibt an, ob IIS das Benutzerprofil für die Anwendungspoolidentität lädt. Das Festlegen dieses Werts auf false bewirkt, dass IIS auf das IIS 6.0-Verhalten zurückgesetzt wird. IIS 6.0 lädt das Benutzerprofil nicht für eine Anwendungspoolidentität.

Der Standardwert ist false.
logEventOnProcessModel Optionales flags-Attribut.

Gibt an, welche Aktion im Prozess bei der Ereignisanzeige protokolliert wird. In IIS 8.0 ist die einzige Aktion, die angewendet wird, die Aktion zur Leerlaufzeitüberwachung, in der der Prozess beendet wird, da er für den Zeitraum des idleTimeout-Zeitraums leer war.

Der Flagname ist gleich IdleTimeout. Der Wert lautet 1.

Der Standardwert ist IdleTimeout.
logonType Optionales Enumerationsattribut.

Gibt den Anmeldetyp für die Prozessidentität an. (Weitere Informationen zu Anmeldetypen finden Sie im Artikel zur Funktion LogonUser.)

Hinweis: Dieses Attribut wurde in IIS 7.5 eingeführt.

Das Attribut logonType kann einer der folgenden möglichen Werte sein; der Standardwert ist LogonBatch.
Wert Beschreibung
LogonBatch Gibt an, dass sich die Anwendungspoolidentität als Batchbenutzer anmelden soll.

Der numerische Wert ist 0.
LogonService Gibt an, dass sich die Anwendungspoolidentität als Dienst anmelden soll.

Der numerische Wert ist 1.
manualGroupMembership Optionales boolesches Attribut.

Gibt an, ob die IIS_IUSRS Gruppensicherheits-ID (SID) dem Arbeitsprozesstoken hinzugefügt wird. Wenn false, verwendet IIS automatisch eine Anwendungspoolidentität, als wäre sie Mitglied der integrierten IIS_IUSRS Gruppe, die Zugriff auf erforderliche Datei- und Systemressourcen hat. Wenn true, muss eine Anwendungspoolidentität explizit allen Ressourcen hinzugefügt werden, die ein Arbeitsprozess zur Laufzeit benötigt.

Der Standardwert ist false.
maxProcesses Optionales Uint-Attribut.

Gibt die maximale Anzahl von Arbeitsprozessen an, die für den Anwendungspool verwendet würden.
  • Ein Wert von "1" gibt ein Maximum eines einzelnen Arbeitsprozesses für den Anwendungspool an. Dies wäre die Einstellung auf einem Server, auf dem keine NUMA-Knoten vorhanden sind.
  • Ein Wert von "2" oder mehr gibt einen Web-Garden an, der mehrere Arbeitsprozesse für einen Anwendungspool verwendet (falls erforderlich).
  • Ein Wert von "0" gibt an, dass IIS dieselbe Anzahl von Arbeitsprozessen ausführt, wie es nicht einheitliche Speicherzugriffsknoten (NUMA) gibt. IIS identifiziert die Anzahl der NUMA-Knoten, die auf der Hardware verfügbar sind und startet dieselbe Anzahl von Arbeitsprozessen. Wenn Sie beispielsweise vier NUMA-Knoten haben, werden maximal vier Arbeitsprozesse für diesen Anwendungspool verwendet. In diesem Beispiel würde das Festlegen von maxProcesses auf einen Wert von "0" oder "4" dasselbe Ergebnis haben.
Der Standardwert ist 1.
password Optionales Zeichenfolgeattribut.

Gibt das Kennwort an, das dem Attribut userName zugeordnet ist. Dieses Attribut ist nur erforderlich, wenn der Wert von identityTypeSpecificUser ist.

Hinweis: Um nicht verschlüsselte Kennwortzeichenfolgen in Konfigurationsdateien zu speichern, verwenden Sie immer AppCmd.exe oder den IIS-Manager, um Kennwörter einzugeben. Wenn Sie diese Verwaltungstools verwenden, werden die Kennwortzeichenfolgen automatisch verschlüsselt, bevor sie in die XML-Konfigurationsdateien geschrieben werden. Dies bietet eine bessere Kennwortsicherheit als das Speichern unverschlüsselter Kennwörter.
pingingEnabled Optionales boolesches Attribut.

Gibt an, ob Ping für den Arbeitsprozess aktiviert ist.

Der Standardwert ist true.
pingInterval Optionales timeSpan-Attribut.

Gibt die Zeit zwischen Pings zur Integritätsüberwachung an, die der WWW-Dienst an einen Arbeitsprozess sendet.

Der Standardwert ist 00:00:30 (30 Sekunden).
pingResponseTime Optionales timeSpan-Attribut.

Gibt die Zeit an, zu der ein Arbeitsprozess erhält, um auf einen Ping für die Integritätsüberwachung zu reagieren. Nachdem das Zeitlimit überschritten wurde, beendet der WWW-Dienst den Arbeitsprozess.

Der Standardwert ist 00:01:30 (1 Minute 30 Sekunden).
requestQueueDelegatorIdentity Optionales String -Attribut.

Gibt die Kontoidentität an, die über die Berechtigung zum Delegieren von HTTP-Anforderungen an den Anwendungspool verfügt.

Hinweis: Dieses Attribut ist in der IIS-Manager-Benutzeroberfläche (Internet Information Services) nicht verfügbar.
setProfileEnvironment Optionales boolesches Attribut.

Wenn setProfileEnvironment auf True festgelegt ist, erstellt WAS beim Erstellen eines Arbeitsprozesses einen Umgebungsblock, der an CreateProcessAsUser übergeben werden soll. Dadurch wird sichergestellt, dass die Umgebung basierend auf dem Benutzerprofil für den neuen Prozess festgelegt wird.

Der Standardwert ist True.
shutdownTimeLimit Optionales timeSpan-Attribut.

Gibt die Zeit an, die der W3SVC-Dienst wartet, nachdem er eine Wiederverwendung initiiert hat. Wenn der Arbeitsprozess nicht innerhalb des shutdownTimeLimit heruntergefahren wird, wird er vom W3SVC-Dienst beendet.

Der Standardwert ist 00:01:30 (1 Minute 30 Sekunden).
startupTimeLimit Optionales timeSpan-Attribut.

Gibt die Zeit an, zu der IIS auf den Start eines Anwendungspools wartet. Wenn der Anwendungspool nicht innerhalb von startupTimeLimit gestartet wird, wird der Arbeitsprozess beendet, und die Anzahl des schnellen Fail-Schutzes wird erhöht.

Der Standardwert ist 00:01:30 (1 Minute 30 Sekunden).
userName Optionales Zeichenfolgeattribut.

Gibt die Identität an, unter der der Anwendungspool ausgeführt wird, wenn der identityTypeSpecificUser ist.

Untergeordnete Elemente

Keine.

Konfigurationsbeispiel

Im folgenden Konfigurationsbeispiel wird das Anwendungspoolelement <add> verwendet, um einen neuen Anwendungspool namens Contoso zu erstellen. Das Element <recycling> konfiguriert die Protokollierung für den Neustart des Anwendungspools, das Element <periodicRestart> konfiguriert, wann der Anwendungspool neu gestartet wird, und das Element <processModel> konfiguriert die Attribute shutdownTimeLimit und startupTimeLimit für das Herunterfahren und Starten der Arbeitsprozesse im Anwendungspool für jeweils 30 Sekunden. Wenn diese Zeitlimits überschritten werden, beendet IIS den Arbeitsprozess.

<add name="Contoso">
   <recycling logEventOnRecycle="Schedule">
      <periodicRestart>
         <schedule>
            <clear />
            <add value="03:00:00" />
         </schedule>
      </periodicRestart>
   </recycling>
   <processModel identityType="NetworkService" shutdownTimeLimit="00:00:30" startupTimeLimit="00:00:30" />
</add>

Beispielcode

In den folgenden Beispielen werden die Werte der Eigenschaftswerte processModel.shutdownTimeLimit und processModule.startupTimeLimit jeweils auf 30 Sekunden für einen Anwendungspool namens Contoso geändert.

AppCmd.exe

appcmd.exe set apppool "Contoso" /processModel.shutdownTimeLimit:00:00:30

appcmd.exe set apppool "Contoso" /processModel.startupTimeLimit:00:00:30

Sie können auch die folgende Syntax verwenden:

appcmd.exe set config -section:system.applicationHost/applicationPools /[name='Contoso'].processModel.shutdownTimeLimit:"00:00:30" /commit:apphost

appcmd.exe set config -section:system.applicationHost/applicationPools /[name='Contoso'].processModel.startupTimeLimit:"00:00:30" /commit:apphost

Hinweis

Sie müssen unbedingt den Commitparameterapphost festlegen, wenn Sie AppCmd.exe verwenden, um diese Einstellungen zu konfigurieren. Dadurch werden die Konfigurationseinstellungen auf den entsprechenden Speicherortabschnitt in der Datei ApplicationHost.config festgelegt.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection applicationPoolsSection = config.GetSection("system.applicationHost/applicationPools");
         ConfigurationElementCollection applicationPoolsCollection = applicationPoolsSection.GetCollection();

         ConfigurationElement addElement = FindElement(applicationPoolsCollection, "add", "name", @"Contoso");
         if (addElement == null) throw new InvalidOperationException("Element not found!");

         ConfigurationElement processModelElement = addElement.GetChildElement("processModel");
         processModelElement["shutdownTimeLimit"] = TimeSpan.Parse("00:00:30");
         processModelElement["startupTimeLimit"] = TimeSpan.Parse("00:00:30");

         serverManager.CommitChanges();
      }
   }

   private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
   {
      foreach (ConfigurationElement element in collection)
      {
         if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
         {
            bool matches = true;
            for (int i = 0; i < keyValues.Length; i += 2)
            {
               object o = element.GetAttributeValue(keyValues[i]);
               string value = null;
               if (o != null)
               {
                  value = o.ToString();
               }
               if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
               {
                  matches = false;
                  break;
               }
            }
            if (matches)
            {
               return element;
            }
         }
      }
      return null;
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim applicationPoolsSection As ConfigurationSection = config.GetSection("system.applicationHost/applicationPools")
      Dim applicationPoolsCollection As ConfigurationElementCollection = applicationPoolsSection.GetCollection
      Dim addElement As ConfigurationElement = FindElement(applicationPoolsCollection, "add", "name", "Contoso")

      If (addElement Is Nothing) Then
         Throw New InvalidOperationException("Element not found!")
      End If

      Dim processModelElement As ConfigurationElement = addElement.GetChildElement("processModel")
      processModelElement("shutdownTimeLimit") = TimeSpan.Parse("00:00:30")
      processModelElement("startupTimeLimit") = TimeSpan.Parse("00:00:30")
      serverManager.CommitChanges()
   End Sub

   Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
      For Each element As ConfigurationElement In collection
         If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
            Dim matches As Boolean = True
            Dim i As Integer
            For i = 0 To keyValues.Length - 1 Step 2
               Dim o As Object = element.GetAttributeValue(keyValues(i))
               Dim value As String = Nothing
               If (Not (o) Is Nothing) Then
                  value = o.ToString
               End If
               If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
                  matches = False
                  Exit For
               End If
            Next
            If matches Then
               Return element
            End If
         End If
      Next
      Return Nothing
   End Function


End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools", "MACHINE/WEBROOT/APPHOST");
var applicationPoolsCollection = applicationPoolsSection.Collection;

var addElementPos = FindElement(applicationPoolsCollection, "add", ["name", "Contoso"]);
if (addElementPos == -1) throw "Element not found!";

var addElement = applicationPoolsCollection.Item(addElementPos);
var processModelElement = addElement.ChildElements.Item("processModel");
processModelElement.Properties.Item("shutdownTimeLimit").Value = "00:00:30";
processModelElement.Properties.Item("startupTimeLimit").Value = "00:00:30";

adminManager.CommitChanges();

function FindElement(collection, elementTagName, valuesToMatch) {
   for (var i = 0; i < collection.Count; i++) {
      var element = collection.Item(i);
      if (element.Name == elementTagName) {
         var matches = true;
         for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
            var property = element.GetPropertyByName(valuesToMatch[iVal]);
            var value = property.Value;
            if (value != null) {
               value = value.toString();
            }
            if (value != valuesToMatch[iVal + 1]) {
               matches = false;
               break;
            }
         }
         if (matches) {
            return i;
         }
      }
   }
   return -1;
}

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools", "MACHINE/WEBROOT/APPHOST")
Set applicationPoolsCollection = applicationPoolsSection.Collection

addElementPos = FindElement(applicationPoolsCollection, "add", Array("name", "Contoso"))
If siteElementPos = -1 Then
   WScript.Echo "Element not found!"
   WScript.Quit
End If

Set addElement = applicationPoolsCollection.Item(addElementPos)
Set processModelElement = addElement.ChildElements.Item("processModel")
processModelElement.Properties.Item("shutdownTimeLimit").Value = "00:00:30"
processModelElement.Properties.Item("startupTimeLimit").Value = "00:00:30"

adminManager.CommitChanges()

Function FindElement(collection, elementTagName, valuesToMatch)
   For i = 0 To CInt(collection.Count) - 1
      Set element = collection.Item(i)
      If element.Name = elementTagName Then
         matches = True
         For iVal = 0 To UBound(valuesToMatch) Step 2
            Set property = element.GetPropertyByName(valuesToMatch(iVal))
            value = property.Value
            If Not IsNull(value) Then
               value = CStr(value)
            End If
            If Not value = CStr(valuesToMatch(iVal + 1)) Then
               matches = False
               Exit For
            End If
         Next
         If matches Then
            Exit For
         End If
      End If
   Next
   If matches Then
      FindElement = i
   Else
      FindElement = -1
   End If
End Function