Практическое руководство. Создание и регистрация или отмена регистрации классификатора запросов
Дата последнего изменения: 3 марта 2011 г.
Применимо к: SharePoint Foundation 2010
В этом разделе описывается регистрация и отмена регистрации классификатора HTTP-запросов в системе мониторинга производительности и регулирования HTTP-запросов Microsoft SharePoint Foundation.
![]() |
---|
В примере, приведенном в этом разделе, используется консольное приложение. Независимо от типа проекта важно задать правильную целевую версию .NET Framework и процессор. Проект должен быть предназначен для версии Microsoft .NET Framework 3.5 (а не Microsoft .NET Framework 4). Целевым процессором должен быть Любой процессор или x64. Сведения о том, как выбрать правильное значение, см. в разделе Правильное задание конечной среды и процессора. По умолчанию целевой процессор — x86. Чтобы изменить его, щелкните правой кнопкой имя проекта в обозревателе решений, а затем выберите Свойства. Можно изменить процессор на вкладке Построение с помощью раскрывающегося списка Целевая платформа. |
Хранение классификаторов HTTP-запросов
Классификаторы HTTP-запросов в системе регулирования HTTP-запросов хранятся в базе данных конфигураций фермы SharePoint Foundation в виде объектов класса, производного от класса SPRequestThrottleClassifier. Эти объекты являются элементами коллекции только для чтения, которая хранится в свойстве ThrottleClassifiers объекта SPHttpThrottleSettings, который сам хранится в свойстве HttpThrottleSettings веб-приложения.
Создание решения Visual Studio
Создайте проект консольного приложения в Microsoft Visual Studio, задайте целевую версию .NET Framework и тип процессора.
Добавьте ссылку на библиотеку Microsoft.SharePoint.dll в проект. Она размещена в %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI.
Откройте файл program.cs, задайте необходимое пространство имен и имя класса и добавьте инструкции using для пространств имен Microsoft.SharePoint, Microsoft.SharePoint.Administration и Microsoft.SharePoint.Utilities. Программа должна выглядеть следующим образом:
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 } }
Создание и регистрация классификатора запросов
В методе Main получите ссылку на веб-приложение и затем получите ссылку на параметры регулирования, вызвав метод GetHttpThrottleSettings(SPPersistedObject). В следующем примере показано, как это сделать.
Uri webApplicationUri = new Uri("Http://localhost/"); SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri); SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication);
В методе Main вызовите конструктор для одного из классов, производных от класса SPRequestThrottleClassifier. В этом примере используется класс SPHttpFileExtensionThrottleClassifier. Объекты этого класса классифицируют запрос в соответствии с расширением имени файла запрошенного ресурса. Конструктор класса принимает параметр String, в котором задано расширение имени файла (включая начальную точку "."), и параметр SPRequestThrottleLevel, в котором задаются условия, при которых осуществляется регулирование запросов ресурсов с указанным расширением имени файла. В этом примере указывается, что запросы для DOCX-файлов должны блокироваться, когда рабочий процесс, обслуживающий запрос, находится в режиме регулирования FirstStage.
SPHttpFileExtensionThrottleClassifier docxClassifier = new SPHttpFileExtensionThrottleClassifier(".docx",SPRequestThrottleLevel.FirstStage);
В методе Main вызовите метод AddThrottleClassifier(SPRequestThrottleClassifier), передав в качестве параметра новый классификатор.
throttleSettings.AddThrottleClassifier(docxClassifier);
Совет
AddThrottleClassifier(SPRequestThrottleClassifier) создает исключение ArgumentException, если для такого же расширения и уровня регулирования классификатор уже существует. Рассмотрите возможность реализовать в коде проверку на наличие идентичных классификаторов перед вызовом AddThrottleClassifier(SPRequestThrottleClassifier).
Примечание
При наличии более одного классификатора для одного расширения имени файла, что возможно, только если у них разные уровни регулирования, применяться будет классификатор с самым строгим уровнем регулирования. Например, если один классификатор для SVC-файла ресурса имеет уровень регулирования FirstStage, а другой классификатор для SVC-файла ресурса имеет уровень SecondStage, то совпадающие запросы будут регулироваться на первом этапе. Соответственно, нет смысла иметь больше одного классификатора для данного расширения.
В объектной модели имеется три других класса, производных от класса SPRequestThrottleClassifier. Дополнительные сведения см. в разделе Регулирование запросов. Поскольку эти классы используют характеристики HTTP-запросов, отличные от расширения имени файла ресурса, возможно, что данный запрос будет соответствовать нескольким классификаторам. В этом сценарии регулирование запросов будет выполняться в соответствии с самым строгим классификатором. Например, если запрос соответствует классификатору с уровнем регулирования FirstStage и также соответствует классификатору с уровнем регулирования SecondStage, то запрос будет заблокирован, если рабочий процесс находится на первом этапе режима регулирования.
Отмена регистрации классификатора запросов
Отмена регистрации классификатора запросов похожа на регистрацию за исключением того, что в коде вызывается метод RemoveThrottleClassifierAt(Int32), которому передается индекс классификатора в начинающейся с нуля коллекции ThrottleClassifiers свойства HttpThrottleSettings веб-приложения. Код в следующем примере удаляет последний классификатор.
Uri webApplicationUri = new Uri("Http://localhost/"); SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri); SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication); throttleSettings.RemoveThrottleClassifierAt(throttleSettings.ThrottleClassifiers.Count - 1);