Пошаговое руководство. Отладка приложения SharePoint с помощью IntelliTrace
С помощью IntelliTrace гораздо легче отлаживать решения SharePoint. Традиционные отладчики показывают только снимок решения в текущий момент. Тем не менее IntelliTrace можно использовать для просмотра прошедших событий решения и контекста, в котором эти события произошли, а также для перехода к коду.
В этом пошаговом руководстве показано, как отлаживать проект SharePoint в Visual Studio с помощью Microsoft Monitoring Agent для сбора данных IntelliTrace из развернутых приложений. Для анализа данных необходимо использовать Visual Studio Enterprise. Этот проект включает приемник функций, который при активации функции добавляет задачу в список задач и объявление в список объявлений. Когда функция деактивирована, задача помечается как завершенная, а в список объявлений добавляется второе объявление. Однако процедура содержит логическую ошибку, которая предотвращает правильное выполнение проекта. С помощью IntelliTrace вы сможете найти и исправить ошибку.
Область применения. Сведения в этом разделе относятся к решениям SharePoint, созданным в Visual Studio.
В этом пошаговом руководстве рассматриваются следующие задачи:
Сбор данных IntelliTrace с помощью Microsoft Monitoring Agent
Отладка и исправление решения SharePoint
Примечание.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Необходимые компоненты
Для выполнения этого пошагового руководства требуются следующие компоненты:
Поддерживаемые выпуски Windows и SharePoint.
Visual Studio Enterprise.
Создание приемника компонентов
Сначала создайте пустой проект SharePoint с приемником компонента.
Создайте проект решения SharePoint, предназначенный для установленной версии SharePoint, и присвойте ему имя IntelliTraceTest.
Откроется мастер настройки SharePoint, в котором можно указать как сайт SharePoint для проекта, так и уровень доверия решения.
Нажмите кнопку "Развернуть как решение фермы" и нажмите кнопку "Готово ".
IntelliTrace работает только в решениях фермы.
В Обозреватель решений откройте контекстное меню узла "Компоненты" и нажмите кнопку "Добавить функцию".
Появится функция Feature1.feature .
Откройте контекстное меню компонента Feature1.feature и выберите " Добавить приемник событий", чтобы добавить модуль кода в функцию.
Добавление кода в приемник функций
Затем добавьте код к двум методам в приемнике функций: FeatureActivated
и FeatureDeactivating
. Эти методы активируются всякий раз, когда функция активируется или деактивируется в SharePoint соответственно.
В верхней части класса
Feature1EventReceiver
добавьте следующий код для объявления переменных, которые задают сайт и дочерний сайт SharePoint.Замените метод
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()); } }
Замените метод
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-файла, созданного сборщиком данных.
Разверните решение в SharePoint, а затем откройте сайт SharePoint в браузере.
Возможность автоматически активируется, что приводит к добавлению приемником возможности объявления и задачи.
Отображение содержимого списков извещений и задач.
Список объявлений должен иметь новое объявление, которое называется активированной функцией: IntelliTraceTest_Feature1, а список задач должен иметь новую задачу, которая называется функцией деактивации: IntelliTraceTest_Feature1. Если один из этих элементов отсутствует, проверьте, активирован ли компонент. Если он не активирован, активируйте его.
Отключите компонент, выполнив следующие действия.
В меню "Действия сайта" в SharePoint выберите "Параметры сайта".
В разделе "Действия сайта" выберите ссылку "Управление функциями сайта".
Рядом с компонентом IntelliTraceTest1 нажмите кнопку "Отключить ".
На странице "Предупреждение" выберите ссылку "Деактивировать эту функцию ".
Обработчик событий FeatureDeactivating() вызывает ошибку.
Сбор данных IntelliTrace с помощью Microsoft Monitoring Agent
При установке Microsoft Monitoring Agent в системе, работающей под управлением SharePoint, можно отлаживать решения SharePoint с помощью данных, которые более конкретные, чем универсальные данные, возвращаемые IntelliTrace. Агент работает вне Visual Studio с помощью командлетов PowerShell для захвата отладочной информации в процессе выполнения решения SharePoint.
Примечание.
Сведения о конфигурации в этом разделе относятся к этому примеру. Дополнительные сведения о других параметрах конфигурации см. в разделе "Использование автономного сборщика IntelliTrace".
На компьютере под управлением SharePoint настройте Microsoft Monitoring Agent и начните отслеживать решение.
Отключение компонента.
В меню "Действия сайта" в SharePoint выберите "Параметры сайта".
В разделе "Действия сайта" выберите ссылку "Управление функциями сайта".
Рядом с компонентом IntelliTraceTest1 нажмите кнопку "Отключить ".
На странице "Предупреждение" выберите ссылку "Деактивировать эту функцию ".
Возникает ошибка (в данном случае из-за возникшей в обработчике событий FeatureDeactivating() ошибки).
В окне PowerShell выполните команду Stop-WebApplicationMonitoring , чтобы создать файл iTrace, остановить мониторинг и перезапустить решение SharePoint.
Stop-WebApplicationMonitoring "<SharePointSite>\<SharePointAppName>"
Отладка и исправление решения SharePoint
Теперь можно просмотреть файл журнала IntelliTrace в Visual Studio для поиска и исправления ошибки в решении SharePoint.
В папке \IntelliTraceLogs откройте .iTrace-файл в Visual Studio.
Откроется страница сводки IntelliTrace. Так как ошибка не была обработана, идентификатор корреляции SharePoint (GUID) отображается в области необработанных исключений раздела "Анализ ". Нажмите кнопку "Стек вызовов", чтобы просмотреть стек вызовов, в котором произошла ошибка.
Нажмите кнопку "Отладка исключения ".
При появлении соответствующего запроса загрузите символьные файлы. В окне IntelliTrace исключение выделено как "Возникла серьезная ошибка!".
В окне IntelliTrace выберите исключение для отображения кода, в котором произошла ошибка.
Исправьте ошибку, открыв решение SharePoint, а затем закомментируйте или удалив инструкцию броска в верхней части процедуры FeatureDeactivating().
Повторите сборку решения в Visual Studio, а затем заново разверните его в SharePoint.
Отключите компонент, выполнив следующие действия.
В меню "Действия сайта" в SharePoint выберите "Параметры сайта".
В разделе "Действия сайта" выберите ссылку "Управление функциями сайта".
Рядом с компонентом IntelliTraceTest1 нажмите кнопку "Отключить ".
На странице "Предупреждение" выберите ссылку "Деактивировать эту функцию ".
Откройте список задач и убедитесь, что значение состояния задачи "Деактивировать" равно "Завершено", а его % Завершенное значение равно 100 %.
Теперь код будет выполнен правильно.