Partager via


Limites d’un site web <limites>

Vue d’ensemble

L’élément <limits> de l’élément <site> configure les paramètres qui limitent la quantité de bande passante, le nombre de connexions ou le délai d’attente de connexion pour les demandes clientes sur un site.

Remarque

Si l’élément <limits> est configuré à la fois dans la section <siteDefaults> et dans la section <site> pour un site spécifique, la configuration de la section <site> est utilisée pour ce site.

Compatibilité

Version Notes
IIS 10.0 L’élément <limits> n’a fait l’objet d’aucune modification dans IIS 10.0.
IIS 8.5 L’élément <limits> n’a fait l’objet d’aucune modification dans IIS 8.5.
IIS 8.0 L’attribut maxUrlSegments a été ajouté pour spécifier le nombre maximal de segments autorisés dans une URL.
IIS 7.5 L’élément <limits> n’a fait l’objet d’aucune modification dans IIS 7.5.
IIS 7.0 L’élément <limits> de l’élément <site> a été introduit dans IIS 7.0.
IIS 6.0 L’élément <limits> remplace les paramètres de métabase IIS 6.0 suivants :
  • ConnectionTimeout
  • MaxBandwidth
  • MaxConnections

Programme d’installation

L’élément <limits> de l’élément <site> est inclus dans l’installation par défaut d’IIS 7 et versions ultérieures.

Procédure

Comment configurer les options de limite de connexion pour un site

  1. Ouvrez le Gestionnaire des services Internet (IIS) :

    • Si vous utilisez Windows Server 2012 ou Windows Server 2012 R2 :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows 8 ou Windows 8.1 :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire des services Internet (IIS).
    • Si vous utilisez Windows Server 2008 ou Windows Server 2008 R2 :

      • Cliquez sur Démarrer, placez le curseur sur Outils d'administration, puis cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows Vista ou Windows 7 :

      • Dans la barre des tâches, cliquez sur Démarrer, puis sur Panneau de configuration.
      • Double-cliquez sur Outils d'administration, puis double-cliquez sur Gestionnaire des services Internet (IIS).
  2. Dans le volet Connexions, développez le nom du serveur, développez le nœud Sites, puis cliquez sur le nom du site.

  3. Dans le volet Accueil du site, cliquez sur Paramètres avancés... dans le volet Actions.

  4. Dans la boîte de dialogue Paramètres avancés, développez Limites, spécifiez les options de limite de connexion, puis cliquez sur OK.

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

Configuration

Attributs

Attribut Description
connectionTimeout Attribut timeSpan facultatif.

Spécifie le temps (en secondes) attendu par IIS avant de déconnecter une connexion considérée comme inactive. Les connexions peuvent être considérées inactives pour les raisons suivantes :
  • Le minuteur HTTP.sys Timer_ConnectionIdle a expiré. La connexion a expiré et reste inactive.
  • Le minuteur HTTP.sys Timer_EntityBody a expiré. La connexion a expiré avant l’arrivée du corps de l’entité de requête. Lorsqu’il est clair qu’une requête a un corps d’entité, l’API HTTP active le minuteur Timer_EntityBody. Initialement, la limite de ce minuteur est définie sur la valeur connectionTimeout. Chaque fois qu’une autre indication de données est reçue sur cette requête, l’API HTTP réinitialise le minuteur pour donner plus de minutes de connexion, comme spécifié dans l’attribut connectionTimeout.
  • Le minuteur HTTP.sys Timer_AppPool a expiré. La connexion a expiré, car une demande a attendu trop longtemps dans une file d’attente du pool d’applications pour qu’une application serveur la déqueue et la traite. Cette durée d’expiration est connectionTimeout.
La valeur par défaut est 00:02:00 (deux minutes).
maxBandwidth Attribut uint facultatif.

Spécifie la bande passante réseau maximale, en octets par seconde, utilisée pour un site. Utilisez ce paramètre pour empêcher la surcharge du réseau avec l’activité IIS.

La valeur par défaut est 4294967295.
maxConnections Attribut uint facultatif.

Spécifie le nombre maximal de connexions pour un site. Utilisez ce paramètre pour limiter le nombre de connexions clientes simultanées.

La valeur par défaut est 4294967295.
maxurlSegments Attribut uint facultatif.

Spécifie le nombre maximal de segments autorisés dans une URL.

La valeur par défaut est 32.

Éléments enfants

Aucune.

Exemple Configuration

L’exemple de configuration suivant montre un site Web où la bande passante maximale est définie sur 65 536 octets par seconde, le nombre maximal de connexions est défini sur 1024 et le délai d’attente de connexion est défini sur 1 minute.

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

Exemple de code

Les exemples de code suivants configurent le site web par défaut pour une bande passante maximale de 65 536 octets par seconde, 1024 connexions maximales et un délai de connexion de 1 minute.

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

Remarque

Vous devez veiller à définir le paramètre commit sur apphost quand vous utilisez AppCmd.exe pour configurer ces paramètres. Cela valide les paramètres de configuration dans la section d’emplacement appropriée dans le fichier 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