Compartir a través de


Límites para un sitio web (<limits>)

Información general

El elemento <limits> del elemento <site> configura las opciones que limitan la cantidad de ancho de banda, el número de conexiones o el tiempo de espera de conexión para las solicitudes de cliente a un sitio.

Nota:

Si el elemento <limits> está configurado en la sección <siteDefaults> y en la sección <site> de un sitio específico, la configuración de la sección <site> se usa para ese sitio.

Compatibilidad

Versión Notas
IIS 10.0 El elemento <limits> no se modificó en IIS 10.0.
IIS 8.5 El elemento <limits> no se modificó en IIS 8.5.
IIS 8.0 El atributo maxUrlSegments se agregó para especificar el número máximo de segmentos permitidos en una dirección URL.
IIS 7.5 El elemento <limits> no se modificó en IIS 7.5.
IIS 7.0 El elemento <limits> del elemento <site> se introdujo en IIS 7.0.
IIS 6,0 El elemento <limits> reemplaza las siguientes propiedades de metabase de IIS 6.0:
  • ConnectionTimeout
  • MaxBandwidth
  • MaxConnections

Configuración

El elemento <limits> del elemento <site> se incluye en la instalación predeterminada de IIS 7 y versiones posteriores.

Procedimientos

Configuración de las opciones de límite de conexión para un sitio

  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, a continuación, 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.
      • En Panel de control, haga clic en Herramientas administrativas y, a continuación, 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, a continuación, 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, haga clic en Panel de control.
      • Haga doble clic en Herramientas administrativas y, a continuación, haga doble clic en Administrador de Internet Information Services (IIS).
  2. En el panel Conexiones, expanda el nombre del servidor, expanda el nodo Sitios y, después, haga clic en el nombre del sitio.

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

  4. En el cuadro de diálogo Configuración avanzada, expanda Límites, especifique las opciones de límite de conexión y, a continuación, haga clic en Aceptar.

    Screenshot of the Advanced dialog box. Limits is highlighted and expanded.

Configuración

Atributos

Atributo Descripción
connectionTimeout Atributo timeSpan opcional.

Especifica el tiempo (en segundos) que IIS espera antes de desconectar una conexión que se considera inactiva. Las conexiones se pueden considerar inactivas por los siguientes motivos:
  • El temporizador HTTP.sys Timer_ConnectionIdle expiró. La conexión expiró y permanece inactiva.
  • El temporizador HTTP.sys Timer_EntityBody expiró. La conexión expiró antes de que llegara el cuerpo de la entidad de solicitud. Cuando está claro que una solicitud tiene un cuerpo de entidad, la API HTTP activa el temporizador Timer_EntityBody. Inicialmente, el límite de este temporizador se establece en el valor connectionTimeout. Cada vez que se recibe otra indicación de datos en esta solicitud, la API HTTP restablece el temporizador para proporcionar a la conexión más minutos, tal como se especifica en el atributo connectionTimeout.
  • El temporizador HTTP.sys Timer_AppPool expiró. La conexión expiró porque una solicitud esperó demasiado tiempo en una cola del grupo de aplicaciones para que una aplicación del servidor la quitara de la cola y la procesara. Esta duración de tiempo de espera es connectionTimeout.
El valor predeterminado es 00:02:00 (dos minutos).
maxBandwidth Atributo uint opcional.

Especifica el ancho de banda de red máximo, en bytes por segundo, que se usa para un sitio. Use esta configuración para evitar sobrecargar la red con la actividad de IIS.

El valor predeterminado es 4294967295.
maxConnections Atributo uint opcional.

Especifica el número máximo de conexiones permitidas para un sitio. Use esta configuración para limitar el número de conexiones de cliente simultáneas pendientes de distribución.

El valor predeterminado es 4294967295.
maxurlSegments Atributo uint opcional.

Especifica el número máximo de segmentos permitidos en una dirección URL.

El valor predeterminado es 32.

Elementos secundarios

Ninguno.

Ejemplo de configuración

En el ejemplo de configuración siguiente se muestra un sitio web donde el ancho de banda máximo se establece en 65 536 bytes por segundo, el número máximo de conexiones se establece en 1024 y el tiempo de espera de conexión se establece en 1 minuto.

<sites>
   <site name="Default Web Site" id="1" serverAutoStart="true">
      <application path="/">
         <virtualDirectory path="/"
            physicalPath="%SystemDrive%\inetpub\wwwroot" />
      </application>
      <bindings>
         <binding protocol="http"
            bindingInformation="*:80:" />
      </bindings>
     <limits maxBandwidth="65536"
         maxConnections="1024"
         connectionTimeout="00:01:00" />
   </site>
</sites>

Código de ejemplo

Los ejemplos de código siguientes configuran el sitio web predeterminado para un ancho de banda máximo de 65 536 bytes por segundo, 1024 conexiones máximas y un tiempo de espera de conexión de 1 minuto.

AppCmd.exe

appcmd.exe set config -section:system.applicationHost/sites "/[name='Default Web Site'].limits.maxBandwidth:65536" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites "/[name='Default Web Site'].limits.maxConnections:1024" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites "/[name='Default Web Site'].limits.connectionTimeout:00:01:00" /commit:apphost

Nota:

Debe asegurarse de establecer el parámetro de confirmación en apphost cuando use AppCmd.exe para configurar estas opciones. 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 sitesSection = config.GetSection("system.applicationHost/sites");
         ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();

         ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"Default Web Site");
         if (siteElement == null) throw new InvalidOperationException("Element not found!");

         ConfigurationElement limitsElement = siteElement.GetChildElement("limits");
         limitsElement["maxBandwidth"] = 65536;
         limitsElement["maxConnections"] = 1024;
         limitsElement["connectionTimeout"] = TimeSpan.Parse("00:01:00");

         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 sitesSection As ConfigurationSection = config.GetSection("system.applicationHost/sites")
      Dim sitesCollection As ConfigurationElementCollection = sitesSection.GetCollection

      Dim siteElement As ConfigurationElement = FindElement(sitesCollection, "site", "name", "Default Web Site")
      If (siteElement Is Nothing) Then
         Throw New InvalidOperationException("Element not found!")
      End If

      Dim limitsElement As ConfigurationElement = siteElement.GetChildElement("limits")
      limitsElement("maxBandwidth") = 65536
      limitsElement("maxConnections") = 1024
      limitsElement("connectionTimeout") = TimeSpan.Parse("00:01:00")

       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 sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST");

var sitesCollection = sitesSection.Collection;
var siteElementPos = FindElement(sitesCollection, "site", ["name", "Default Web Site"]);
if (siteElementPos == -1) throw "Element not found!";
var siteElement = sitesCollection.Item(siteElementPos);

var limitsElement = siteElement.ChildElements.Item("limits");
limitsElement.Properties.Item("maxBandwidth").Value = 65536;
limitsElement.Properties.Item("maxConnections").Value = 1024;
limitsElement.Properties.Item("connectionTimeout").Value = "00:01:00";

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 sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")

Set sitesCollection = sitesSection.Collection
siteElementPos = FindElement(sitesCollection, "site", Array("name", "Default Web Site"))
If siteElementPos = -1 Then
   WScript.Echo "Element not found!"
   WScript.Quit
End If
Set siteElement = sitesCollection.Item(siteElementPos)

Set limitsElement = siteElement.ChildElements.Item("limits")
limitsElement.Properties.Item("maxBandwidth").Value = 65536
limitsElement.Properties.Item("maxConnections").Value = 1024
limitsElement.Properties.Item("connectionTimeout").Value = "00:01:00"

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