Поделиться через


Практическое руководство. Создание компонента для регистрации правила работоспособности

Дата последнего изменения: 23 сентября 2009 г.

Применимо к: SharePoint Foundation 2010

Установка нового правила работоспособности осуществляется с помощью его регистрации с помощью анализатора работоспособности SharePoint. Для этого необходимо сначала поместить содержащую правило сборку в глобальный кэш сборок на каждом компьютере, а затем вызвать метод RegisterRules(Assembly) класса SPHealthAnalyzer.

При работе в среде разработки можно использовать средство глобального кэша сборок (Gacutil.exe), чтобы поместить сборку в глобальный кэш сборок, после чего можно создать пользовательский код для загрузки сборки и регистрации правила. В рабочей среде необходимо использовать более надежную процедуру. Возможно, в этом случае правило будет установлено другим человеком, например администратором фермы серверов, и, скорее всего, на нескольких серверах, а не только на сервере, использовавшимся для разработки.

Лучшим способом регистрации правила с помощью анализатора работоспособности SharePoint в рабочей среде является создание специального компонента SharePoint. Важная особенность данного способа заключается в том, чтобы включить в качестве частей сборки правил обработчики для событий FeatureActivated и FeatureDeactivating. Когда администратор фермы серверов устанавливает этот компонент, обработчики событий регистрируются вместе с системой. Когда администратор фермы серверов активирует компонент, код в обработчике событий FeatureActivated может вызвать метод RegisterRules(Assembly) для регистрации правила. Когда администратор фермы серверов отключает компонент, код в обработчике событий FeatureDeactivating может вызвать метод UnregisterRules(Assembly) для удаления правила.

В данном разделе поясняется, как создать обработчики событий, которые регистрируют правило и отменяют его регистрацию, и как включить обработчики событий и сборку правил в компонент на уровне фермы. Сведения о развертывании компонента и установке сборки правил в глобальный кэш сборок см. в статье Как: Развернуть правило работоспособности с пакетом решения.

Порядок создания обработчиков событий, которые регистрируют правило работоспособности и отменяют его регистрацию

  1. Откройте Visual Studio с правами администратора, щелкнув эту программу правой кнопкой мыши в меню Пуск и выбрав пункт Запуск от имени администратора.

  2. Откройте проект, содержащий код для правила работоспособности.

  3. Добавьте в проект новый класс.

    В окне Обозреватель решений выберите имя проекта, затем выберите Добавить и Новый элемент…. В диалоговом окне Добавить новый элемент выберите шаблон Класс. Назовите этот класс RuleFeatureReceiver. После этого нажмите кнопку Добавить.

  4. Добавьте операторы using (Imports в Visual Basic) для пространств имен, указанных в следующем примере.

    using System;
    using System.Collections.Generic;
    using System.Reflection;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Administration.Health;
    
    Imports System
    Imports System.Collections.Generic
    Imports System.Reflection
    Imports Microsoft.SharePoint
    Imports Microsoft.SharePoint.Administration.Health
    
  5. Измените объявление класса, чтобы класс наследовал от класса SPFeatureReceiver.

    class RuleFeatureReceiver : SPFeatureReceiver
    
    Public Class RuleFeatureReceiver
        Inherits SPFeatureReceiver
    
  6. Переопределите и реализуйте метод FeatureActivated(SPFeatureReceiverProperties), как показано в следующем примере.

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        Assembly a = Assembly.GetExecutingAssembly();
        IDictionary<Type, Exception> exceptions = SPHealthAnalyzer.RegisterRules(a);
    
        if (exceptions != null)
        {
            string logEntry = a.FullName;
            if (exceptions.Count == 0)
            {
                logEntry += " All rules were registered.";
            }
            else
            {
                foreach (KeyValuePair<Type, Exception> pair in exceptions)
                {
                    logEntry += string.Format(" Registration failed for type {0}. {1}",
                                              pair.Key, pair.Value.Message);
                }
            }
            System.Diagnostics.Trace.WriteLine(logEntry);
        }
    }
    
    Public Overrides Sub FeatureActivated(ByVal properties As Microsoft.SharePoint.SPFeatureReceiverProperties)
    
        Dim a As Assembly = Assembly.GetExecutingAssembly()
        Dim exceptions As IDictionary(Of Type, Exception) = SPHealthAnalyzer.RegisterRules(a)
    
        If Not exceptions Is Nothing Then
            Dim logEntry As String = a.FullName
            If exceptions.Count = 0 Then
                logEntry += " All rules were registered."
            Else
                Dim pair As KeyValuePair(Of Type, Exception)
                For Each pair In exceptions
                    logEntry += String.Format(" Registration failed for type {0}. {1}", _
                                                  pair.Key, pair.Value.Message)
                Next
            End If
            System.Diagnostics.Trace.WriteLine(logEntry)
        End If
    
    End Sub
    
  7. Переопределите и реализуйте метод FeatureDeactivating(SPFeatureReceiverProperties), как показано в следующем примере.

    public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
    {
        Assembly a = Assembly.GetExecutingAssembly();
        IDictionary<Type, Exception> exceptions = SPHealthAnalyzer.UnregisterRules(a);
    
        if (exceptions != null)
        {
            string logEntry = a.FullName;
            if (exceptions.Count == 0)
            {
                logEntry += " All rules were unregistered.";
            }
            else
            {
                foreach (KeyValuePair<Type, Exception> pair in exceptions)
                {
                    logEntry += string.Format(" Unregistration failed for type {0}. {1}",
                                              pair.Key, pair.Value.Message);
                }
            }
            System.Diagnostics.Trace.WriteLine(logEntry);
        }
    }
    
    Public Overrides Sub FeatureDeactivating(ByVal properties As Microsoft.SharePoint.SPFeatureReceiverProperties)
    
        Dim a As Assembly = Assembly.GetExecutingAssembly()
        Dim exceptions As IDictionary(Of Type, Exception) = SPHealthAnalyzer.UnregisterRules(a)
    
        If Not exceptions Is Nothing Then
            Dim logEntry As String = a.FullName
            If exceptions.Count = 0 Then
                logEntry += " All rules were unregistered."
            Else
                Dim pair As KeyValuePair(Of Type, Exception)
                For Each pair In exceptions
                    logEntry += String.Format(" Unregistration failed for type {0}. {1}", _
                                                  pair.Key, pair.Value.Message)
                Next
            End If
            System.Diagnostics.Trace.WriteLine(logEntry)
        End If
    
    End Sub
    
  8. Выполните построение проекта.

Порядок создания компонента, который устанавливает правило работоспособности

  1. Создайте папку "Features".

    В окне Обозреватель решений щелкните имя проекта правой кнопкой мыши, выберите пункт Добавить, а затем выберите Новая папка. Введите Features.

  2. Создайте вложенную папку для компонента.

    Щелкните правой кнопкой мыши папку Features, выберите пункт Добавить, а затем выберите Новая папка. Введите имя компонента (например, CompanyName.HealthRules).

    Позднее, когда будет создаваться пакет решений для развертывания компонента, папка с таким именем создается в папке %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\FEATURES на каждом сервере в ферме серверов. Назначенное папке имя может помочь администратору найти файл определения для данного компонента.

  3. Создайте для компонента файл определения.

    Щелкните вложенную папку для компонента правой кнопкой мыши, выберите пункт Добавить, а затем выберите Новый элемент.... В диалоговом окне Добавить новый элемент выберите шаблон XML-файл. назовите файл Feature.xml. После этого нажмите кнопку Добавить.

  4. Откройте файл Feature.xml в редакторе.

  5. Удалите первую (и единственную) строку в файле. Вместо нее вставьте следующий код.

    <Feature xmlns="https://schemas.microsoft.com/sharepoint/"
             Scope="Farm"
             Hidden="FALSE"
             Title="Your Title"
             Description="Your description"
             Id="00000000-0000-0000-0000-000000000000"
             ReceiverAssembly="<assembly name>, Version=<number>, Culture=<culture>, PublicKeyToken=<token>"
             ReceiverClass="MyNamespace.RuleFeatureReceiver"
             AlwaysForceInstall="TRUE"
             ImageUrl=""/>
    
  6. В файле Feature.xml замените значения атрибутов Title и Description на свой текст.

  7. Замените значение атрибута Id на недавно созданный идентификатор GUID (без скобок).

    Для получения нового идентификатора GUID можно воспользоваться средством GuidGen (guidgen.exe). В меню Инструменты Visual Studio выберите Создать GUID. В диалоговом окне Создать GUID выберите 4. Registry Format (Формат реестра), затем выберите Копировать. Вставьте содержимое буфера обмена между кавычками после атрибута "Id". Удалите скобки вокруг GUID.

  8. Замените значение атрибута ReceiverAssembly полным именем сборки, состоящим из четырех частей.

    Сведения о способе получения полного имени сборки см. в статье Практическое руководство. Создание инструмента для получения полного имени сборки.

  9. Замените значение атрибута ReceiverClass на соответствующее пространству имен имя подкласса SPFeatureReceiver.

  10. Сохраните файл.

Сведения о способе развертывания данного компонента см. в статье Как: Развернуть правило работоспособности с пакетом решения.

См. также

Задачи

Как: Развернуть правило работоспособности с пакетом решения

Практическое руководство. Создание инструмента для получения полного имени сборки

Концепции

Использование компонентов