Procédure : créer et inscrire ou désinscrire un classifieur de requête
Dernière modification : jeudi 3 mars 2011
S’applique à : SharePoint Foundation 2010
Cette rubrique explique comment inscrire et désinscrire un classifieur de requête HTTP auprès du système de limitation de requêtes HTTP et d’analyse des performances Microsoft SharePoint Foundation.
Important
L’exemple exécuté dans cette rubrique utilise une application console. Quel que soit le type du projet, il est très important de définir l’infrastructure .NET Framework et l’unité centrale cibles appropriées. Le projet doit cibler Microsoft .NET Framework 3.5 (et non pas Microsoft .NET Framework 4). L’unité centrale cible doit être Tout processeur ou x64. Pour plus d’informations sur l’option à choisir, voir Procédure : définir le Framework et l’unité centrale cibles adéquats. Par défaut, l’unité centrale cible correspond généralement à x86. Pour la changer, cliquez avec le bouton droit sur le nom du projet dans l’Explorateur de solutions et sélectionnez Propriétés. Vous pouvez changer l’unité centrale sur l’onglet Version par le biais de la liste déroulante Plateforme cible.
Persistance des classifieurs de requête HTTP
Les classifieurs de requête HTTP dans le système de limitation de requêtes HTTP persistent dans la base de données de configuration de la batterie de serveurs SharePoint Foundation sous la forme d’objets d’une classe dérivée de la classe SPRequestThrottleClassifier. Ces objets sont des éléments dans une collection en lecture seule stockée sous la forme de la propriété ThrottleClassifiers de l’objet SPHttpThrottleSettings qui est lui-même persistant dans la propriété HttpThrottleSettings de l’application Web.
Pour créer la solution Visual Studio
Créez un projet d’application console dans Microsoft Visual Studio et définissez l’infrastructure .NET Framework et la plateforme d’unité centrale cibles.
Ajoutez une référence à Microsoft.SharePoint.dll au projet. Le fichier se trouve dans ISAPI %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\.
Ouvrez le fichier program.cs, définissez un espace de noms et un nom de classe appropriés, puis ajoutez les instructions using pour les espaces de noms Microsoft.SharePoint, Microsoft.SharePoint.Administration et Microsoft.SharePoint.Utilities. Votre code doit dès lors se présenter comme suit :
using System; using Microsoft.SharePoint; using Microsoft.SharePoint.Administration; using Microsoft.SharePoint.Utilities; namespace Contoso.SharePoint.Utilities { class RequestClassifierRegistrar { static void Main(string[] args) { } // end Main } }
Pour créer et inscrire un classifieur de requête
Dans la méthode Main, obtenez une référence à l’application Web, puis obtenez une référence aux paramètres d’accélération en appelant la méthode GetHttpThrottleSettings(SPPersistedObject). C’est ce que montre l’exemple suivant :
Uri webApplicationUri = new Uri("Http://localhost/"); SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri); SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication);
Toujours dans la méthode Main, appelez un constructeur pour l’une des classes qui dérive de la classe SPRequestThrottleClassifier. Dans cet exemple, la classe SPHttpFileExtensionThrottleClassifier est utilisée. Les objets de cette classe classifient les requêtes en fonction de l’extension du nom de fichier de la ressource demandée. Le constructeur pour la classe prend un paramètre String qui désigne l’extension du nom de fichier (caractère «.» de début compris) et un paramètre SPRequestThrottleLevel qui spécifie les conditions dans lesquelles les requêtes pour des ressources portant l’extension du nom de fichier sont limitées. Cet exemple spécifie que les requêtes pour les fichiers « .docx » doivent être bloquées chaque fois que le processus de travail qui gère la demande se trouve en mode de limitation FirstStage.
SPHttpFileExtensionThrottleClassifier docxClassifier = new SPHttpFileExtensionThrottleClassifier(".docx",SPRequestThrottleLevel.FirstStage);
Toujours dans la méthode Main, appelez la méthode AddThrottleClassifier(SPRequestThrottleClassifier), en transmettant votre nouveau classifieur en guise de paramètre.
throttleSettings.AddThrottleClassifier(docxClassifier);
Conseil AddThrottleClassifier(SPRequestThrottleClassifier) déclenche une exception ArgumentException si un classifieur pour les mêmes extension et niveau de limitation existe déjà. Songez à configurer votre code de manière à ce qu’il vérifie l’existence d’un classifieur identique avant d’appeler AddThrottleClassifier(SPRequestThrottleClassifier).
Notes
S’il existe plusieurs classifieurs pour la même extension du nom de fichier, ce qui n’est possible que s’ils possèdent différents niveaux de limitation, le classifieur qui détient le niveau de limitation le plus strict est le classifieur appliqué. Par exemple, si un classifieur pour des ressources .svc spécifie le niveau de limitation FirstStage et qu’un autre pour des ressources .svc indique SecondStage, les requêtes correspondantes sont limitées lors de la première phase. En conséquence, il est inutile d’avoir plusieurs classifieurs pour une extension donnée.
Il existe trois autres classes dans le modèle objet qui dérivent de la classe SPRequestThrottleClassifier. Pour plus d’informations, voir Limitation des requêtes. Dans la mesure où ces classes utilisent des caractéristiques de requêtes HTTP autres que l’extension de nom de fichier de la ressource, il est possible qu’une requête donnée corresponde à plusieurs classifieurs. Dans ce cas de figure, la requête est limitée ou non en fonction du classifieur le plus strict. Par exemple, si la requête correspond à un classifieur dont le niveau de limitation est FirstStage, ainsi qu’à un classifieur dont le niveau de limitation est SecondStage, elle est bloquée si le processus de travail se trouve dans la première phase du mode de limitation.
Pour désinscrire un classifieur de requête
La désinscription d’un classifieur de requête est similaire à son inscription, à la différence que votre code appelle la méthode RemoveThrottleClassifierAt(Int32), transmettant ainsi l’index de base zéro du classifieur dans la collection ThrottleClassifiers de la propriété HttpThrottleSettings de l’application Web. Le code dans l’exemple suivant supprime le dernier classifieur.
Uri webApplicationUri = new Uri("Http://localhost/"); SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri); SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication); throttleSettings.RemoveThrottleClassifierAt(throttleSettings.ThrottleClassifiers.Count - 1);