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


Пошаговое руководство. Отладка приложения SharePoint с помощью IntelliTrace

С помощью IntelliTrace гораздо легче отлаживать решения SharePoint. Традиционные отладчики показывают только снимок решения в текущий момент. Тем не менее IntelliTrace можно использовать для просмотра прошедших событий решения и контекста, в котором эти события произошли, а также для перехода к коду.

В этом пошаговом руководстве показано, как отлаживать проект SharePoint в Visual Studio с помощью Microsoft Monitoring Agent для сбора данных IntelliTrace из развернутых приложений. Для анализа данных необходимо использовать Visual Studio Enterprise. Этот проект включает приемник функций, который при активации функции добавляет задачу в список задач и объявление в список объявлений. Когда функция деактивирована, задача помечается как завершенная, а в список объявлений добавляется второе объявление. Однако процедура содержит логическую ошибку, которая предотвращает правильное выполнение проекта. С помощью IntelliTrace вы сможете найти и исправить ошибку.

Область применения. Сведения в этом разделе относятся к решениям SharePoint, созданным в Visual Studio.

В этом пошаговом руководстве рассматриваются следующие задачи:

Необходимые компоненты

Для выполнения этого пошагового руководства требуются следующие компоненты:

  • Поддерживаемые выпуски Windows и SharePoint.

  • Visual Studio Enterprise.

Создание приемника компонентов

Сначала создайте пустой проект SharePoint с приемником компонента.

  1. Создайте проект решения SharePoint, предназначенный для установленной версии SharePoint, и присвойте ему имя IntelliTraceTest.

    Откроется мастер настройки SharePoint, в котором можно указать как сайт SharePoint для проекта, так и уровень доверия решения.

  2. Нажмите кнопку "Развернуть как решение фермы" и нажмите кнопку "Готово ".

    IntelliTrace работает только в решениях фермы.

  3. В Обозреватель решений откройте контекстное меню узла "Компоненты" и нажмите кнопку "Добавить функцию".

    Появится функция Feature1.feature .

  4. Откройте контекстное меню компонента Feature1.feature и выберите " Добавить приемник событий", чтобы добавить модуль кода в функцию.

Добавление кода в приемник функций

Затем добавьте код к двум методам в приемнике функций: FeatureActivated и FeatureDeactivating. Эти методы активируются всякий раз, когда функция активируется или деактивируется в SharePoint соответственно.

  1. В верхней части класса Feature1EventReceiver добавьте следующий код для объявления переменных, которые задают сайт и дочерний сайт SharePoint.

    // SharePoint site and subsite.
    private string siteUrl = "http://localhost";
    private string webUrl = "/";
    
  2. Замените метод FeatureActivated следующим кодом:

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        try
        {
            using (SPSite site = new SPSite(siteUrl))
            {
                using (SPWeb web = site.OpenWeb(webUrl))
                {
                    // Reference the lists.
                    SPList announcementsList = web.Lists["Announcements"];
                    SPList taskList = web.Lists["Tasks"];
    
                    // Add an announcement to the Announcements list.
                    SPListItem listItem = announcementsList.Items.Add();
                    listItem["Title"] = "Activated Feature: " + properties.Definition.DisplayName;
                    listItem["Body"] = properties.Definition.DisplayName + " was activated on: " + DateTime.Now.ToString();
                    listItem.Update();
    
                    // Add a task to the Task list.
                    SPListItem newTask = taskList.Items.Add();
                    newTask["Title"] = "Deactivate feature: " + properties.Definition.DisplayName;
                    newTask.Update();
                }
            }
        }
    
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.ToString());
        }
    
    }
    
  3. Замените метод FeatureDeactivating следующим кодом:

    public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
    {
        // The following line induces an error to demonstrate debugging.
        // Remove this line later for proper operation.
        throw new System.InvalidOperationException("A serious error occurred!");
        try
        {
            using (SPSite site = new SPSite(siteUrl))
            {
                using (SPWeb web = site.OpenWeb(webUrl))
                {
                    // Reference the lists.
                    SPList taskList = web.Lists["Tasks"];
                    SPList announcementsList = web.Lists["Announcements"];
    
                    // Add an announcement that the feature was deactivated.
                    SPListItem listItem = announcementsList.Items.Add();
                    listItem["Title"] = "Deactivated Feature: " + properties.Definition.DisplayName;
                    listItem["Body"] = properties.Definition.DisplayName + " was deactivated on: " + DateTime.Now.ToString();
                    listItem.Update();
    
                    // Find the task that the feature receiver added to the Task list when the
                    // feature was activated.
                    SPQuery qry = new SPQuery();
                    qry.Query = "<Where><Contains><FieldRef Name='Title' /><Value Type='Text'>Deactivate</Value></Contains></Where>";
                    SPListItemCollection taskItems = taskList.GetItems(qry);
    
                    foreach (SPListItem taskItem in taskItems)
                    {
                        // Mark the task as complete.
                        taskItem["PercentComplete"] = 1;
                        taskItem["Status"] = "Completed";
                        taskItem.Update();
                    }
                }
            }
    
        }
    
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.ToString());
        }
    }
    

Тестирование проекта

Теперь, когда код добавлен в приемник компонента и сборщик данных выполняется, разверните и запустите решение SharePoint для тестирования правильности работы.

Внимание

В этом примере возникает ошибка в обработчике событий FeatureDeactivating. Далее в этом пошаговом руководстве ошибка обнаруживается с помощью .iTrace-файла, созданного сборщиком данных.

  1. Разверните решение в SharePoint, а затем откройте сайт SharePoint в браузере.

    Возможность автоматически активируется, что приводит к добавлению приемником возможности объявления и задачи.

  2. Отображение содержимого списков извещений и задач.

    Список объявлений должен иметь новое объявление, которое называется активированной функцией: IntelliTraceTest_Feature1, а список задач должен иметь новую задачу, которая называется функцией деактивации: IntelliTraceTest_Feature1. Если один из этих элементов отсутствует, проверьте, активирован ли компонент. Если он не активирован, активируйте его.

  3. Отключите компонент, выполнив следующие действия.

    1. В меню "Действия сайта" в SharePoint выберите "Параметры сайта".

    2. В разделе "Действия сайта" выберите ссылку "Управление функциями сайта".

    3. Рядом с компонентом IntelliTraceTest1 нажмите кнопку "Отключить ".

    4. На странице "Предупреждение" выберите ссылку "Деактивировать эту функцию ".

      Обработчик событий FeatureDeactivating() вызывает ошибку.

Сбор данных IntelliTrace с помощью Microsoft Monitoring Agent

При установке Microsoft Monitoring Agent в системе, работающей под управлением SharePoint, можно отлаживать решения SharePoint с помощью данных, которые более конкретные, чем универсальные данные, возвращаемые IntelliTrace. Агент работает вне Visual Studio с помощью командлетов PowerShell для захвата отладочной информации в процессе выполнения решения SharePoint.

Примечание.

Сведения о конфигурации в этом разделе относятся к этому примеру. Дополнительные сведения о других параметрах конфигурации см. в разделе "Использование автономного сборщика IntelliTrace".

  1. На компьютере под управлением SharePoint настройте Microsoft Monitoring Agent и начните отслеживать решение.

  2. Отключение компонента.

    1. В меню "Действия сайта" в SharePoint выберите "Параметры сайта".

    2. В разделе "Действия сайта" выберите ссылку "Управление функциями сайта".

    3. Рядом с компонентом IntelliTraceTest1 нажмите кнопку "Отключить ".

    4. На странице "Предупреждение" выберите ссылку "Деактивировать эту функцию ".

      Возникает ошибка (в данном случае из-за возникшей в обработчике событий FeatureDeactivating() ошибки).

  3. В окне PowerShell выполните команду Stop-WebApplicationMonitoring , чтобы создать файл iTrace, остановить мониторинг и перезапустить решение SharePoint.

    Stop-WebApplicationMonitoring "<SharePointSite>\<SharePointAppName>"

Отладка и исправление решения SharePoint

Теперь можно просмотреть файл журнала IntelliTrace в Visual Studio для поиска и исправления ошибки в решении SharePoint.

  1. В папке \IntelliTraceLogs откройте .iTrace-файл в Visual Studio.

    Откроется страница сводки IntelliTrace. Так как ошибка не была обработана, идентификатор корреляции SharePoint (GUID) отображается в области необработанных исключений раздела "Анализ ". Нажмите кнопку "Стек вызовов", чтобы просмотреть стек вызовов, в котором произошла ошибка.

  2. Нажмите кнопку "Отладка исключения ".

    При появлении соответствующего запроса загрузите символьные файлы. В окне IntelliTrace исключение выделено как "Возникла серьезная ошибка!".

    В окне IntelliTrace выберите исключение для отображения кода, в котором произошла ошибка.

  3. Исправьте ошибку, открыв решение SharePoint, а затем закомментируйте или удалив инструкцию броска в верхней части процедуры FeatureDeactivating().

  4. Повторите сборку решения в Visual Studio, а затем заново разверните его в SharePoint.

  5. Отключите компонент, выполнив следующие действия.

    1. В меню "Действия сайта" в SharePoint выберите "Параметры сайта".

    2. В разделе "Действия сайта" выберите ссылку "Управление функциями сайта".

    3. Рядом с компонентом IntelliTraceTest1 нажмите кнопку "Отключить ".

    4. На странице "Предупреждение" выберите ссылку "Деактивировать эту функцию ".

  6. Откройте список задач и убедитесь, что значение состояния задачи "Деактивировать" равно "Завершено", а его % Завершенное значение равно 100 %.

    Теперь код будет выполнен правильно.