Compartir a través de


Configuración de errores para un grupo de aplicaciones <failure>

Información general

El elemento <failure> del elemento <add> en la colección <applicationPools> configura las acciones que se deben realizar cuando se produce un error en un grupo de aplicaciones. Los atributos autoShutdownExe, orphanActionExe yrapidFailProtection del elemento <failure> pueden ser especialmente útiles al solucionar problemas o depurar aplicaciones, ya que proporcionan la flexibilidad de especificar la acción que Internet Information Services (IIS) realizará cuando se produzca un error en una aplicación, por ejemplo, ejecutar un archivo ejecutable externo para registrar o depurar el error.

Compatibilidad

Versión Notas
IIS 10.0 El elemento <failure> no se ha modificado en IIS 10.0.
IIS 8.5 El elemento <failure> no se ha modificado en IIS 8.5.
IIS 8.0 El elemento <failure> no se ha modificado en IIS 8.0.
IIS 7.5 El elemento <failure> no se ha modificado en IIS 7.5.
IIS 7.0 El elemento <failure> se introdujo en IIS 7.0.
IIS 6,0 El elemento <failure> reemplaza partes de la propiedad de metabase IIsApplicationPools de IIS 6.0.

Configuración

La colección <applicationPools> se incluye en la instalación predeterminada de IIS 7.

Procedimientos

Procedimiento para editar los valores de configuración de protección con errores rápidos

  1. Abra el Administrador de Internet Information Services (IIS):

    • Si usa Windows Server 2012 o Windows Server 2012 R2:

      • En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, después, en Administrador de Internet Information Services (IIS).
    • Si usa Windows 8 o Windows 8.1:

      • Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
      • Haga clic en Herramientas administrativas y, después, haga doble clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Server 2008 o Windows Server 2008 R2:

      • En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, después, haga clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Vista o Windows 7:

      • En la barra de tareas, haga clic en Inicio y luego en Panel de control.
      • Haga doble clic en Herramientas administrativas y después en Administrador de Internet Information Services (IIS).
  2. En el panel Conexiones, expanda el nombre del servidor, haga clic en Grupos de aplicaciones y después en el grupo de aplicaciones que quiera editar.
    Image of Connections pane displaying App Default Pool option highlighted.

  3. En el panel Acciones, haga clic en Configuración avanzada...

  4. En el cuadro de diálogo Configuración avanzada, haga clic en la propiedad de protección rápida contra errores que quiera editar y, después, modifique el valor en la sección valor de propiedad del cuadro de diálogo y haga clic en Aceptar. Por ejemplo, cambie el Intervalo de error (minutos)4 y Máximo de errores4.
    Screenshot of Advanced Settings dialog box displaying Maximum Failures highlighted.

Configuración

Atributos

Atributo Descripción
autoShutdownExe Atributo de cadena opcional. Especifica un archivo ejecutable que se va a ejecutar cuando el servicio WWW cierra un grupo de aplicaciones. Puede usar el atributo autoShutdownParams para enviar parámetros al archivo ejecutable.
autoShutdownParams Atributo de cadena opcional. Especifica parámetros de línea de comandos para el archivo ejecutable que se especifica en el atributo autoShutdownExe.
loadBalancerCapabilities Atributo enum opcional. Especifica el comportamiento cuando no se puede iniciar un proceso de trabajo, como cuando la cola de solicitudes está llena o un grupo de aplicaciones está en protección rápida contra errores. El atributo loadBalancerCapabilities puede ser uno de los siguientes valores posibles. El valor predeterminado es HttpLevel.

Valor Descripción
HttpLevel Especifica que se ha devuelto un código de error 503. Los equilibradores de carga que no son compatibles con HTTP no cambiarán a otro nodo porque la respuesta 503 indica al equilibrador de carga que el equipo tiene un estado correcto.

El valor numérico es 2.

TcpLevel Especifica que la conexión TCP finalizará. Esto resulta útil cuando se usa un equilibrador de carga que no es compatible con HTTP.

El valor numérico es 1.

orphanActionExe Atributo de cadena opcional. Especifica un archivo ejecutable que se ejecutará cuando el servicio WWW deja huérfano a un proceso de trabajo (si el atributo orphanWorkerProcess está establecido en true). Puede usar el atributo orphanActionParams para enviar parámetros al archivo ejecutable.
orphanActionParams Atributo de cadena opcional. Indica los parámetros de la línea de comandos para el archivo ejecutable denominado por el atributo orphanActionExe. Para especificar el id. de proceso del proceso huérfano, use %1 %.
orphanWorkerProcess Atributo Boolean opcional. Especifica si se debe asignar un proceso de trabajo a un estado huérfano en lugar de terminarlo cuando se produce un error en un grupo de aplicaciones.

El valor predeterminado es false.
rapidFailProtection Atributo Boolean opcional. Si se establece en true, se indica al servicio WWW que quite del servicio todas las aplicaciones que se encuentran en un grupo de aplicaciones cuando:

  • El número de bloqueos de proceso de trabajo ha alcanzado el máximo especificado en el atributo rapidFailProtectionMaxCrashes.
  • Los bloqueos se producen en el número de minutos especificados en el atributo rapidFailProtectionInterval.
El valor predeterminado es true.
rapidFailProtectionInterval Atributo timeSpan opcional. Especifica el número de minutos antes de que se restablezca el recuento de errores de un proceso.

El valor predeterminado es 00:05:00 (cinco minutos).
rapidFailProtectionMaxCrashes Atributo uint opcional. Especifica el número máximo de errores permitidos dentro del número de minutos especificados por el atributo rapidFailProtectionInterval. Nota: A partir de IIS 7.5, este valor debe estar comprendido entre 1 y 2147483647.

El valor predeterminado es 5.

Elementos secundarios

Ninguno.

Ejemplo de configuración

En el ejemplo de configuración siguiente se habilita la protección rápida contra errores para un único grupo de aplicaciones denominado DefaultAppPool, se configura un intervalo de protección rápida contra errores de 5 minutos y se establece el número máximo de errores dentro del número de minutos en 5.

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

Código de ejemplo

En los ejemplos de código siguientes se habilita la protección rápida contra errores para DefaultAppPool en el servidor y, después, se establece el intervalo de protección en 5 minutos y se establece el número máximo de bloqueos en 5.

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

Nota:

Debe asegurarse de establecer el parámetrocommit en apphost cuando use AppCmd.exe para configurar estos valores. Esto confirma los valores de configuración en la sección de ubicación adecuada del archivo ApplicationHost.config.

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