Share via


Gewusst wie: Erstellen und Ändern eines Berechnungsmoduls für die Integritätsbewertung im Bucketformat

Letzte Änderung: Freitag, 17. September 2010

Gilt für: SharePoint Foundation 2010

In diesem Thema wird erläutert, wie Sie Berechnungsmodule für die Integritätsbewertung im Bucketformat erstellen, ersetzen und ändern, die Systemmonitoren in Microsoft SharePoint Foundation zugeordnet sind.

Wichtiger HinweisWichtig

Im Beispiel in diesem Thema wird eine Konsolenanwendung verwendet. Ungeachtet des Projekttyps ist es wichtig, dass Sie die richtige .NET Framework-Zielversion und die richtige Ziel-CPU festlegen. Das Ziel des Projekts muss Microsoft .NET Framework 3.5 sein (nicht Microsoft .NET Framework 4). Die Ziel-CPU muss Beliebige CPU oder x64 entsprechen. Weitere Informationen zur Auswahl finden Sie unter Gewusst wie: Festlegen des richtigen Zielframeworks und der CPU. Die Ziel-CPU ist normalerweise standardmäßig auf x86 festgelegt. Zum Ändern dieser Einstellung klicken Sie mit der rechten Maustaste auf den Projektnamen im Projektmappen-Explorer und wählen Eigenschaften aus. Sie können die CPU auf der Registerkarte Erstellen mithilfe der Dropdownliste Zielplattform ändern.

So beginnen Sie die Visual Studio-Lösung

  1. Erstellen Sie in Visual Studio ein Konsolenanwendungsprojekt und legen Sie die .NET Framework-Zielversion und die CPU-Zielplattform fest.

  2. Fügen Sie Microsoft.SharePoint.dll einen Verweis auf das Projekt hinzu. Diese Datei befindet sich in %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI.

  3. Öffnen Sie die Datei program.cs, legen Sie einen geeigneten Namespace und Klassennnamen fest, und fügen Sie using-Anweisungen für die Namespaces Microsoft.SharePoint, Microsoft.SharePoint.Administration und Microsoft.SharePoint.Utilities hinzu. Der Code sollte jetzt ungefähr so aussehen:

    using System;
    using Microsoft.SharePoint; 
    using Microsoft.SharePoint.Administration;
    using Microsoft.SharePoint.Utilities;
    
    namespace Contoso.SharePoint.Utilities
    {
        class HealthCalculatorsUtility
        {
            static void Main(string[] args)
            {
    
            }// end Main
        }
    }
    
  4. Fahren Sie mit einem der weiter unten in diesem Thema beschriebenen Verfahren fort.

Ersetzen eines Berechnungsmoduls für die Integritätsbewertung

Wenn Sie das einem Monitor zugeordnete Berechnungsmodul für die Integritätsbewertung durch ein neues mit anderen Bucketgrenzen ersetzen möchten und dabei möglicherweise auch die Sortierung der Bucketwerte von aufsteigend in absteigend oder umgekehrt geändert wird, verwenden Sie das folgende Verfahren.

So ersetzen Sie das einem Monitor zugeordnete Berechnungsmodul für die Integritätsbewertung

  1. Deklarieren Sie in der Main-Methode ein Array aus Double-Werten, durch die die Grenzen der Buckets definiert werden, die vom Ersatzberechnungsmodul für die Integritätsbewertung zum Zuweisen von Integritätsbewertungen zu den Werten verwendet werden. Buckets sind Teilbereiche möglicher Indikatorwerte. Für die Deklaration dieses Arrays gelten Einschränkungen. Details zu den Einschränkungen finden Sie im Verfahren "So fügen Sie einen Systemmonitor hinzu" in Gewusst wie: Registrieren und Aufheben der Registrierung eines Leistungsindikators. Im folgenden Code wird eine Deklaration eines Arrays gezeigt, das zum Erstellen von Buckets für den Windows Server 2008-Indikator Prozessor\Prozessorzeit (%) gedacht ist. Mit diesem Indikator wird der Prozentsatz der Zeit gemeldet, die die Prozessoren des Servers mit Prozessen verbringen, bei denen es sich nicht um den Leerlaufprozess handelt. Weitere Informationen zu diesem Indikator finden Sie unter Processor-Objekt.

    double[] busyProcessorBuckets = new double[10] {20.0, 28.8, 37.6, 46.4, 55.2, 64.0, 72.8, 81.6, 90.4, 99.2}; 
    
  2. Rufen Sie den SPBucketHealthScoreCalculator-Konstruktor auf, und übergeben Sie das Bucketarrayobjekt als Parameter. Übergeben Sie true oder false als zweiten Parameter, je nachdem, ob es sich um ein aufsteigendes oder ein absteigendes Array handelt. Im folgenden Code wird das Beispiel fortgesetzt.

    SPBucketHealthScoreCalculator nonIdleTimeHealthCalculator = new SPBucketHealthScoreCalculator(busyProcessorBuckets, true);
    
  3. Rufen Sie in der Main-Methode einen Verweis auf die Webanwendung ab, und rufen Sie dann einen Verweis auf die Drosselungseinstellungen ab, indem Sie die GetHttpThrottleSettings(SPPersistedObject)-Methode aufrufen. Dies wird im folgenden Beispiel gezeigt.

    Uri webApplicationUri = new Uri("Http://localhost/");
    SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri);
    SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication);
    
  4. Rufen Sie in der Main-Methode einen Verweis auf die permanente Auflistung der SPPerformanceMonitorCreationData-Objekte ab. (Die eigentlichen Systemmonitorobjekte [SPSystemPerformanceCounterMonitor] werden zur Laufzeit aus diesen gespeicherten creation-data-Objekten erstellt.)

    SPHttpThrottlingMonitors myMonitors = throttleSettings.PerformanceMonitors;
    
  5. Rufen Sie, immer noch in der Main-Methode, einen Verweis auf die konkrete Instanz des Systemmonitors ab, dessen Berechnungsmodul für die Integritätsbewertung Sie ersetzen möchten, und weisen Sie das neue Berechnungsmodul der jeweiligen AssociatedHealthScoreCalculator-Eigenschaft zu. In manchen Fällen kennen Sie zur Entwurfszeit den Index des Monitors in der Auflistung. Meistens wird der Index jedoch wie im folgenden Beispiel durch den Code anhand des Kategorie-, Indikator- und Instanznamens identifiziert. Beachten Sie, dass Update() aufgerufen wird, um die Änderungen an der Konfigurationsdatenbank zu speichern.

    foreach (SPPerformanceMonitorCreationData creationData in myMonitors)
    {
        if (creationData.Category.Equals("Processor", StringComparison.OrdinalIgnoreCase)
            & creationData.Counter.Equals("% Processor Time", StringComparison.OrdinalIgnoreCase) 
            & creationData.Instance.Equals("0", StringComparison.OrdinalIgnoreCase))
        {
            creationData.AssociatedHealthScoreCalculator = nonIdleTimeHealthCalculator;
            throttleSettings.Update();
            break;
        }
    }
    

Ändern der Bucketgrenzen

Sie müssen nicht das gesamte einem Monitor zugeordnete Berechnungsmodul für die Integritätsbewertung ersetzen, wenn nur die Bucketgrenzen geändert werden sollen. Wenn die neuen Grenzen mit der aufsteigenden oder absteigenden Sortierung der vorhandenen Grenzen übereinstimmen, können Sie zum Ändern der Grenzen die SetScoreBuckets([])-Methode verwenden.

So ändern Sie die Grenzen der Buckets

  1. Deklarieren Sie in der Main-Methode ein Array aus Double-Werten, durch die die neuen Grenzen der Buckets definiert werden. Buckets sind Teilbereiche möglicher Indikatorwerte. Für die Deklaration dieses Arrays gelten Einschränkungen. Details zu den Einschränkungen finden Sie im Verfahren "So fügen Sie einen Systemmonitor hinzu" in Gewusst wie: Registrieren und Aufheben der Registrierung eines Leistungsindikators. Im folgenden Code wird eine Deklaration eines Arrays gezeigt, das zum Erstellen von Buckets für den Windows Server 2008-Indikator Prozessor\Prozessorzeit (%) gedacht ist. Im Gegensatz zu den im Abschnitt Ersetzen eines Berechnungsmoduls für die Integritätsbewertung weiter oben in diesem Thema definierten Buckets wird durch dieses Array ein exponentiell steigender Satz von Werten definiert.

    double[] busyProcessorBuckets = new double[5] {5.0, 10.0, 20.0, 40.0, 80.0}; 
    
  2. Anstatt ein neues Berechnungsmodulobjekt zu erstellen, rufen Sie einen Verweis auf das vorhandene Berechnungsmodul ab, das Sie ändern möchten, und wandeln den Verweis in die Klasse um, die Berechnungsmodule im Bucketformat darstellt. Die Schritte entsprechen denen im Abschnitt Ersetzen eines Berechnungsmoduls für die Integritätsbewertung weiter oben in diesem Thema. Im folgenden Code wird das Ergebnis der Schritte gezeigt:

    Uri webApplicationUri = new Uri("Http://localhost/");
    SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri);
    SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication);
    
    SPHttpThrottlingMonitors myMonitors = throttleSettings.PerformanceMonitors;
    
    foreach (SPPerformanceMonitorCreationData creationData in myMonitors)
    {
        if (creationData.Category.Equals("Processor", StringComparison.OrdinalIgnoreCase)
            & creationData.Counter.Equals("% Processor Time", StringComparison.OrdinalIgnoreCase) 
            & creationData.Instance.Equals("0", StringComparison.OrdinalIgnoreCase))
        {
            SPBucketHealthScoreCalculator bucketScoreCalculator = 
              (SPBucketHealthScoreCalculator)creationData.AssociatedHealthScoreCalculator;
    
        }
    }
    
  3. Rufen Sie, immer noch in der if-Struktur, die SetScoreBuckets([])-Methode des creation-data-Objekts des Monitors auf, und übergeben Sie das neue Bucketarray. Rufen Sie unbedingt Update() auf, um die Änderung zu speichern.

    bucketScoreCalculator.SetScoreBuckets(busyProcessorBuckets);
    throttleSettings.Update();
    break;
    

Siehe auch

Konzepte

Anforderungsdrosselung