Отладка приложений SharePoint с помощью IntelliTrace в Visual Studio

В этой статье мы рассмотрим использование инструмента IntelliTrace в Visual Studio 2012 Ultimate (обновление 1) для отладки настраиваемых веб-частей в приложении SharePoint. Сначала мы вкратце рассмотрим варианты применения идентификаторов корреляции в SharePoint, расскажем об улучшениях IntelliTrace в VS 2012 (обновление 1), а затем перейдем к пошаговому разбору примера использования.

Унифицированная система ведения журнала и идентификаторы корреляции в SharePoint

SharePoint содержит встроенную систему записи сведений о событиях, происходящих во время выполнения. Эта система носит название Unified Logging System (унифицированная система ведения журнала) и имеет аббревиатуру ULS. Система ULS запущена всегда, и поддерживаемые ею файлы журналов являются основным источником информации для опытных разработчиков приложений под SharePoint при диагностировании причин сбоев приложений SharePoint.

При отладке веб-приложений полезно рассматривать веб-запросы в качестве отдельных объектов, поскольку эти запросы можно считать единицами «действий» внутри приложений. SharePoint создает уникальный идентификатор корреляции Correlation ID для каждого входящего веб-запроса и добавляет каждой записи ULS идентификатор Correlation ID соответствующего веб-запроса. Эта процедура облегчает отладку приложений. Фильтрация событий по параметру Correlation ID в специальных инструментах (например, в ULS Viewer) позволяет сосредоточиться на изолированных последовательностях событий в отдельных веб-запросах, потребовавших поддержки bug.IntelliTrace в SharePoint (обновление 1).

В обновлении 1 для Visual Studio 2012 мы расширили возможности IntelliTrace, и теперь этот инструмент поддерживает диагностику SharePoint. Если вы не знакомы с существующими в IntelliTrace возможностями поддержки веб-сайтов на ASP.NET, просмотрите это руководство.

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

IntelliTrace связывает события с конкретными веб-запросами, но до выпуска обновления 1 эту связь невозможно было проследить нигде, кроме страницы Web Request Details (Подробности веб-запроса), которая отображала только события, соответствующие этому веб-запросу. При подготовке обновления 1 мы реализовали поддержку этой схемы фильтрации в окне IntelliTrace при отладке приложений SharePoint. Идентификатор Correlation ID служит удобным уникальным идентификатором веб-запросов в строке фильтрации.

Чтобы включить использование этих новых функций, необходимо всего лишь использовать новейший автономный сборщик IntelliTrace в вашем приложении SharePoint, а затем открыть результирующий файл журнала в среде разработки Visual Studio 2012 Ultimate с установленным обновлением 1.

Пошаговое руководство

В следующем пошаговом руководстве мы проведем отладку страницы в приложении SharePoint, которое возвращает загадочную ошибку при попытке загрузки. Мы соберем информацию в журнал IntelliTrace, откроем файл журнала в Visual Studio, воспользуемся идентификатором Correlation ID для поиска ошибочного веб-запроса и изучим данные журнала, чтобы точно определить, где ошибка в программном коде.

Итак, мы написали приложение SharePoint, и в один прекрасный день наш веб-сайт просто «прекратил работать». Если точнее, при каждом доступе к сайту мы получаем ошибку, похожую на приведенную ниже:

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

Начнем со сбора сведений о том пуле приложений, которое содержит приложение SharePoint. В этом примере пул приложений называется «SharePoint — 80». Мы используем план сбора данных по умолчанию и указываем IntelliTrace сохранять собираемые журналы в папку под названием IntelliTraceLogs на рабочем столе:

 

Затем перейдем на сайт SharePoint, чтобы получить страницу с ошибкой. Обратите внимание на значение Correlation ID:

 

Дождавшись завершения загрузки страницы, остановите сбор данных о пуле приложений:

 

Теперь перейдем в папку IntelliTraceLogs и откроем журнал IntelliTrace:

 

При открытии этого журнала Visual Studio отобразит страницу общих сведений об IntelliTrace:

 

Поскольку мы уже получили идентификатор Correlation ID на странице с ошибкой, его можно просто скопировать и вставить в текстовое поле, затем нажать кнопку View Details (Просмотреть подробности).

 

На экране появится страница Web Request Details (Подробности веб-запроса), содержащая сведения о веб-запросе, который связан с введенным идентификатором Correlation ID. Приведенный здесь список содержит только те события, которые входят в веб-запрос:

 

Этот список можно отфильтровать различными способами. Например, можно воспользоваться раскрывающимся списком для выбора только событий SharePoint ULS — как правило, эта категория наиболее полезна при отладке приложений SharePoint. Страница с ошибкой сообщала, что ошибка носила «непредвиденный» (unexpected) характер. Поэтому мы должны найти все «непредвиденные» события, чтобы увидеть событие ULS, занесенное в журнал SharePoint для этой ошибки:

 

Это непредвиденное событие сообщает, что оно было вызвано исключением System.Net.WebException. Это служит нам подсказкой, что надо искать исключения с типом WebException:

 

Похоже, что при попытке воспроизвести эту ошибку мы получили одно из таких исключений. Оно должно быть причиной ошибки! Мы можем дважды щелкнуть событие или нажать кнопку Start Debugging (Начать отладку), чтобы перейти непосредственно к коду:

 

Обратите внимание, что данные в окне IntelliTrace отфильтрованы и отображают только те события в веб-запросе, которые вызвали необработанное исключение. Строка «WebRequest:9de42c72-cbd1-4882-bee4-e83e3ddc3c50» указывает, что этот список был ограничен веб-запросом, который SharePoint присвоил конкретному идентификатору Correlation ID. Значение этого идентификатора совпадает с тем, который мы видели на странице с ошибкой.

Похоже, что произошел критический сбой в работе службы, которую мы пытались использовать. Быть может, она восстановит свою работоспособность позже. Для этой проблемы есть простое решение: просто перехватите исключение и отобразите уведомление, чтобы сообщить пользователям об этой ситуации.

 

Выполнив повторное развертывание, мы увидим, что теперь наша страница работает нормально:

 

Заключение

Инструмент IntelliTrace в Visual Studio Ultimate 2012 (обновление 1) позволяет разработчикам SharePoint, которые знакомы с идентификаторами Correlation ID, напрямую использовать их для отладки своего кода. Это лишь одно из новшеств Visual Studio, которые мы внедрили с целью повышения удобства разработки SharePoint.