要求分類子の作成および登録または登録解除を行う

最終更新日: 2011年3月3日

適用対象: SharePoint Foundation 2010

このトピックでは、Microsoft SharePoint Foundation パフォーマンスの監視と HTTP 要求調整システムを使用して、HTTP 要求分類子の登録と登録解除を行う方法について説明します。

重要重要

このトピックの実行例では、コンソール アプリケーションが使用されます。プロジェクトの種類にかかわらず、正しいターゲットの .NET Framework と CPU を設定することが非常に重要です。このプロジェクトのターゲット .NET Framework は、Microsoft .NET Framework 3.5 である必要があります (Microsoft .NET Framework 4 ではない)。ターゲット CPU は [Any CPU] または [x64] である必要があります。この選択については、「[方法] 適切なターゲット フレームワークおよび CPU を設定する」を参照してください。通常、ターゲット CPU は既定で [x86] になります。これを変更するには、ソリューション エクスプローラーでプロジェクト名を右クリックし、[プロパティ] を選択します。[ビルド] タブで [プラットフォーム ターゲット] ボックスの一覧を使って CPU を変更できます。

HTTP 要求分類子の永続性

HTTP 要求調整システム内の HTTP 要求分類子は、SharePoint Foundation ファームの構成データベース内で、SPRequestThrottleClassifier クラスから派生したクラスのオブジェクトとして保持されます。このオブジェクトは、読み取り専用コレクションの要素であり、それ自体は Web アプリケーションの HttpThrottleSettings プロパティに保持される、SPHttpThrottleSettings オブジェクトの ThrottleClassifiers プロパティとして保管されます。

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 リソースの 1 つの分類子に調整レベル FirstStage が指定され, .svc リソースの別の分類子に SecondStage が指定された場合、一致する要求は第 1 段階で調整されます。したがって、特定の拡張子に複数の分類子を持つ意味はありません。

    オブジェクト モデルには、SPRequestThrottleClassifier クラスから派生する他の 3 つのクラスがあります。詳細については、「要求の調整」を参照してください。これらのクラスは、リソースのファイル名拡張子ではなく HTTP 要求の特性を使用するので、特定の要求が複数の分類子に一致する可能性があります。この場合、要求を調整するかどうかは、最も厳しい分類子によって決まります。たとえば、要求が、調整レベル FirstStage の分類子と調整レベル SecondStage の分類子に一致する場合、ワーカー プロセスが調整モードの第 1 段階の場合に要求はブロックされます。

要求分類子の登録を解除するには

  • 要求分類子の登録解除は、コードで 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);   
    

関連項目

概念

要求の調整