如何:创建和注册或取消注册请求分类器

上次修改时间: 2011年3月3日

适用范围: SharePoint Foundation 2010

本主题说明如何向 Microsoft SharePoint Foundation 性能监视和 HTTP 请求限制系统注册和注销 HTTP 请求分类器。

重要注释重要信息

本主题中的示例使用一个控制台应用程序,可以实际运行。无论项目的类型如何,关键的一点是,您要设置正确的目标 .NET Framework 和 CPU。项目必须针对 Microsoft .NET Framework 3.5 而不是针对 Microsoft .NET Framework 4。目标 CPU 必须为"任何 CPU"或"x64"。有关此选择的信息,请参阅如何:设置正确的目标框架和 CPU。默认情况下,目标 CPU 通常为"x86"。若要对此进行更改,请在"解决方案资源管理器"中右键单击项目名称,然后选择"属性"。您可以使用"生成"选项卡上的"平台目标"下拉列表来更改目标 CPU。

HTTP 请求分类器的持久性

HTTP 请求限制系统中的 HTTP 请求分类器将作为派生自 SPRequestThrottleClassifier 类的某个类的对象持久保存在 SharePoint Foundation 服务器场的配置数据库中。这些对象是一个只读集合中的元素,并作为 SPHttpThrottleSettings 对象的 ThrottleClassifiers 属性存储,而 SPHttpThrottleSettings 自身持久保存在 Web 应用程序的 HttpThrottleSettings 属性中。

创建 Visual Studio 解决方案

  1. 在 Microsoft Visual Studio 中创建一个控制台应用程序,然后设置目标 .NET Framework 和 CPU 平台。

  2. 将对 Microsoft.SharePoint.dll 的引用添加到项目。该文件在 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI 中。

  3. 打开 program.cs,设置适当的命名空间和类名称,并为 Microsoft.SharePoint、Microsoft.SharePoint.Administration 和 Microsoft.SharePoint.Utilities 命名空间添加 using 语句。现在,您的代码应该类似于下面这样:

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

创建并注册请求分类器

  1. 在 Main 方法中,获取对 Web 应用程序的引用,然后通过调用 GetHttpThrottleSettings(SPPersistedObject) 方法获取对限制设置的引用。下面的示例显示了此过程。

    Uri webApplicationUri = new Uri("Http://localhost/");
    SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri);
    SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication);
    
  2. 仍然在 Main 方法中,调用派生自 SPRequestThrottleClassifier 类的某个类的构造函数。在此示例中,将使用 SPHttpFileExtensionThrottleClassifier 类。此类的对象将根据所请求的资源的文件扩展名来对请求进行分类。此类的构造函数将接受一个 String 参数和一个 SPRequestThrottleLevel 参数,前者用于指定文件扩展名(包括前导"."字符),后者用于指定在什么条件下限制对具有指定文件扩展名的资源的请求。在此示例中,我们指定,只要正在服务请求的工作进程处于 FirstStage 限制模式,就将阻止对".docx"文件的请求。

    SPHttpFileExtensionThrottleClassifier docxClassifier = new SPHttpFileExtensionThrottleClassifier(".docx",SPRequestThrottleLevel.FirstStage);
    
  3. 仍然在 Main 方法中,调用 AddThrottleClassifier(SPRequestThrottleClassifier) 方法,并将新的分类器作为参数进行传递。

    throttleSettings.AddThrottleClassifier(docxClassifier);
    
    提示提示

    如果已经存在针对相同扩展名和限制级别的分类器,则 AddThrottleClassifier(SPRequestThrottleClassifier) 将引发 ArgumentException。在调用 AddThrottleClassifier(SPRequestThrottleClassifier) 之前,应考虑让您的代码检查是否存在相同的分类器。

    备注

    如果存在多个针对相同文件扩展名的分类器(只有在这些分类器具有不同的限制级别时才可能出现这种情况),则具有最高限制级别的分类器即为有效的分类器。例如,如果某个针对 .svc 资源的分类器指定 FirstStage 限制级别,而另一个针对 .svc 资源的分类器指定 SecondStage 限制级别,则将在第一个阶段限制匹配的请求。因此,针对某个给定的扩展名使用多个分类器没有意义。

    对象模型中还有三个其他从 SPRequestThrottleClassifier 类派生的类。有关详细信息,请参见请求限制。因为这些类使用除资源的文件扩展名之外的 HTTP 请求特征,因此一个给定的请求可能会匹配多个分类器。在这种情况下,将根据最严格的分类器来决定是否限制请求。例如,如果某个请求与具有 FirstStage 限制级别的分类器匹配,此外还与具有 SecondStage 限制级别的分类器匹配,那么,当工作进程处于限制模式的第一个阶段时,将会限制该请求。

注销请求分类器

  • 注销请求分类器与注册请求分类器的过程类似,只不过您的代码调用的是 RemoveThrottleClassifierAt(Int32) 方法,并传递分类器在 Web 应用程序的 HttpThrottleSettings 属性的 ThrottleClassifiers 集合中的基于零的索引。以下示例中的代码将删除最后一个分类器。

    Uri webApplicationUri = new Uri("Http://localhost/");
    SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri);
    SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication);
    
    throttleSettings.RemoveThrottleClassifierAt(throttleSettings.ThrottleClassifiers.Count - 1);   
    

请参阅

概念

请求限制