Freigeben über


Fehlereinstellungen für einen <Anwendungspoolfehler>

Übersicht

Das <failure> Element des <add> Elements in der <applicationPools> Auflistung konfiguriert die auszuführenden Aktionen, wenn ein Anwendungspool fehlschlägt. Die Attribute autoShutdownExe, orphanActionExe,rapidFailProtection des <failure> Elements können besonders hilfreich sein, wenn Anwendungen zur Problembehandlung oder zum Debuggen von Anwendungen behoben werden, da sie die Flexibilität bieten, die Aktion anzugeben, die Internetinformationsdienste (INTERNET Information Services, IIS) ausführen wird, wenn eine Anwendung fehlschlägt, z. B. das Ausführen einer externen ausführbaren Datei zum Protokollieren oder Debuggen des Fehlers.

Kompatibilität

Version Hinweise
IIS 10.0 Das <failure> Element wurde in IIS 10.0 nicht geändert.
IIS 8.5 Das <failure> Element wurde in IIS 8.5 nicht geändert.
IIS 8.0 Das <failure> Element wurde in IIS 8.0 nicht geändert.
IIS 7.5 Das <failure> Element wurde in IIS 7.5 nicht geändert.
IIS 7.0 Das <failure> Element wurde in IIS 7.0 eingeführt.
IIS 6.0 Das <failure> Element ersetzt Teile der IIS 6.0 IIsApplicationPools-Metabasiseigenschaft.

Setup

Die <applicationPools> Auflistung ist in der Standardinstallation von IIS 7 enthalten.

Gewusst wie

So bearbeiten Sie Konfigurationseinstellungen für den Schnellfehlerschutz

  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-Managerdann 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 Verwaltung und 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 Verwaltung und 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 Verwaltung und 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.
    Image of Connections pane displaying App Default Pool option highlighted.

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

  4. Klicken Sie im Dialogfeld Erweiterte Einstellungen auf die Schnellfehlerschutzeigenschaft, die Sie bearbeiten möchten, und bearbeiten Sie dann den Wert im Eigenschaftenwertabschnitt des Dialogfelds, und klicken Sie dann auf OK. Ändern Sie z. B. das Fehlerintervall (Minuten) auf 4 und maximale Fehler auf 4.
    Screenshot of Advanced Settings dialog box displaying Maximum Failures highlighted.

Konfiguration

Attribute

Attribut Beschreibung
autoShutdownExe Optionales Zeichenfolgeattribut. Gibt eine ausführbare Datei an, die ausgeführt werden soll, wenn der WWW-Dienst einen Anwendungspool herunterfährt. Sie können das autoShutdownParams-Attribut verwenden, um Parameter an die ausführbare Datei zu senden.
autoShutdownParams Optionales Zeichenfolgeattribut. Gibt Befehlszeilenparameter für die ausführbare Datei an, die im autoShutdownExe-Attribut angegeben ist.
loadBalancerCapabilities Optionales Enumerationsattribut. Gibt das Verhalten an, wenn ein Arbeitsprozess nicht gestartet werden kann, z. B. wenn die Anforderungswarteschlange voll ist oder sich ein Anwendungspool im Schnellfehlerschutz befindet. Das loadBalancerCapabilities-Attribut kann einer der folgenden möglichen Werte sein: Der Standardwert ist HttpLevel.

Wert Beschreibung
HttpLevel Gibt an, dass ein 503-Fehlercode zurückgegeben wurde. Lastenausgleichsgeräte, die nicht HTTP-fähig sind, wechseln nicht zu einem anderen Knoten, da die 503-Antwort dem Lastenausgleich angibt, dass der Computer fehlerfrei ist.

Der numerische Wert ist 2.

TcpLevel Gibt an, dass die TCP-Verbindung beendet wird. Dies ist nützlich, wenn Sie einen Lastenausgleich verwenden, der nicht HTTP-fähig ist.

Der numerische Wert ist 1.

orphanActionExe Optionales Zeichenfolgeattribut. Gibt eine ausführbare Datei an, die ausgeführt werden soll, wenn der WWW-Dienst einen Arbeitsprozess verwaist (wenn das Attribut orphanWorkerProcess auf true festgelegt ist). Sie können das Attribut orphanActionParams verwenden, um Parameter an die ausführbare Datei zu senden.
orphanActionParams Optionales Zeichenfolgeattribut. Gibt Befehlszeilenparameter für die ausführbare Datei an, die vom Attribut orphanActionExe benannt wird. Verwenden Sie %1%, um die Prozess-ID des verwaisten Prozesses anzugeben.
orphanWorkerProcess Optionales boolesches Attribut. Gibt an, ob ein Arbeitsprozess einem verwaisten Zustand zugewiesen werden soll, anstatt ihn zu beenden, wenn ein Anwendungspool fehlschlägt.

Der Standardwert ist false.
rapidFailProtection Optionales boolesches Attribut. Die Einstellung auf "true" weist den WWW-Dienst an, alle Anwendungen, die sich in einem Anwendungspool befinden, aus dem Dienst zu entfernen, wenn:

  • Die Anzahl der Abstürze des Arbeitsprozesses das Maximum erreicht hat, das im rapidFailProtectionMaxCrashes-Attribut angegeben ist.
  • Die Abstürze innerhalb der Anzahl von Minuten auftreten, die im rapidFailProtectionInterval-Attribut angegeben sind.
Der Standardwert ist true.
rapidFailProtectionInterval Optionales timeSpan-Attribut. Gibt die Anzahl der Minuten an, bevor die Fehleranzahl für einen Prozess zurückgesetzt wird.

Der Standardwert beträgt 00:05:00 (5 Minuten).
rapidFailProtectionMaxCrashes Optionales uint-Attribut. Gibt die maximale Anzahl von Fehlern an, die innerhalb der Anzahl von Minuten zulässig sind, die durch das rapidFailProtectionInterval-Attribut angegeben werden. Hinweis: Ab IIS 7.5 muss dieser Wert zwischen 1 und 2147483647 sein.

Der Standardwert ist 5.

Untergeordnete Elemente

Keine.

Konfigurationsbeispiel

Das folgende Konfigurationsbeispiel ermöglicht einen schnellen Fehlerschutz für einen einzelnen Anwendungspool namens DefaultAppPool, konfiguriert ein Intervall für schnellen Fehlerschutz von 5 Minuten und legt die maximale Anzahl von Fehlern innerhalb der Anzahl von Minuten auf 5 fest.

<applicationPools>
   <add name="DefaultAppPool">
     <failure rapidFailProtection="true"
        rapidFailProtectionInterval="00:05:00"
        rapidFailProtectionMaxCrashes="5" />
   </add>
   <applicationPoolDefaults>
     <processModel identityType="NetworkService" />
   </applicationPoolDefaults>
</applicationPools>

Beispielcode

Die folgenden Codebeispiele ermöglichen den schnellen Fehlerschutz für den DefaultAppPool auf Ihrem Server, legen dann das Schutzintervall auf fünf Minuten fest und legen die maximale Anzahl von Abstürzen auf 5 fest.

AppCmd.exe

appcmd.exe set config -section:system.applicationHost/applicationPools /[name='DefaultAppPool'].failure.rapidFailProtection:"True" /commit:apphost

appcmd.exe set config -section:system.applicationHost/applicationPools /[name='DefaultAppPool'].failure.rapidFailProtectionInterval:"00:05:00" /commit:apphost

appcmd.exe set config -section:system.applicationHost/applicationPools /[name='DefaultAppPool'].failure.rapidFailProtectionMaxCrashes:"5" /commit:apphost

Hinweis

Sie müssen unbedingt den Commitparameter auf apphost 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", @"DefaultAppPool");
         if (addElement == null) throw new InvalidOperationException("Element not found!");

         ConfigurationElement failureElement = addElement.GetChildElement("failure");
         failureElement["rapidFailProtection"] = true;
         failureElement["rapidFailProtectionInterval"] = TimeSpan.Parse("00:05:00");
         failureElement["rapidFailProtectionMaxCrashes"] = 5;
         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", "DefaultAppPool")

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

      Dim failureElement As ConfigurationElement = addElement.GetChildElement("failure")
      failureElement("rapidFailProtection") = True
      failureElement("rapidFailProtectionInterval") = TimeSpan.Parse("00:05:00")
      failureElement("rapidFailProtectionMaxCrashes") = 5

      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", "DefaultAppPool"]);
if (addElementPos == -1) throw "Element not found!";
var addElement = applicationPoolsCollection.Item(addElementPos);

var failureElement = addElement.ChildElements.Item("failure");
failureElement.Properties.Item("rapidFailProtection").Value = true;
failureElement.Properties.Item("rapidFailProtectionInterval").Value = "00:05:00";
failureElement.Properties.Item("rapidFailProtectionMaxCrashes").Value = 5;

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 = WScript.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", "DefaultAppPool"))

If (siteElementPos = -1) Then
   WScript.Echo "Element not found!"
   WScript.Quit
End If

Set addElement = applicationPoolsCollection.Item(addElementPos)
Set failureElement = addElement.ChildElements.Item("failure")
failureElement.Properties.Item("rapidFailProtection").Value = true
failureElement.Properties.Item("rapidFailProtectionInterval").Value = "00:05:00"
failureElement.Properties.Item("rapidFailProtectionMaxCrashes").Value = 5

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