Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
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).
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.

En el panel Acciones, haga clic en Configuración avanzada...
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) a 4 y Máximo de errores a 4.

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.
|
||||||
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:
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