Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Glimpse — это процветающее и растущее семейство открытый код пакетов NuGet, которое предоставляет подробные сведения о производительности, отладке и диагностике для ASP.NET приложений. Это тривиально установить, упрощенный, сверхбыстрый, и отображать ключевые метрики производительности в нижней части каждой страницы. Это позволяет детализировать приложение, когда вам нужно узнать, что происходит на сервере. Glimpse предоставляет так много ценных сведений, которые мы рекомендуем использовать на протяжении всего цикла разработки, включая тестовую среду Azure. Хотя Fiddler и средства разработки F-12 предоставляют представление на стороне клиента, Glimpse предоставляет подробное представление с сервера. В этом руководстве основное внимание уделяется использованию пакетов Glimpse ASP.NET MVC и EF, но доступны многие другие пакеты. По возможности я буду ссылаться на соответствующие документы Glimpse , которые я помогаю поддерживать. Glimpse — это открытый код проект, вы также можете внести свой вклад в исходный код и документацию.
- Установка Glimpse
- Включение Glimpse для localhost
- Вкладка "Временная шкала"
- Привязка модели
- Маршруты
- Использование Glimpse в Azure
- Дополнительные ресурсы
Установка Glimpse
Glimpse можно установить из консоли диспетчера пакетов NuGet или консоли управления пакетами NuGet . Для этой демонстрации я установлю пакеты Mvc5 и EF6:
Поиск по запросу Glimpse.EF
Выбрав Установленные пакеты, вы увидите установленные зависимые модули Glimpse:
Следующие команды устанавливают модули Glimpse MVC5 и EF6 из консоли диспетчера пакетов:
PM> Install-Package Glimpse.MVC5
PM> Install-Package Glimpse.EF6
Включение Glimpse для localhost
Перейдите к http://localhost:<порту #>/glimpse.axd и нажмите кнопку Включить представление.
Если отображается панель избранного, вы можете перетащить кнопки Glimpse и добавить их в качестве букмарклетов:
Теперь вы можете перемещаться по приложению, а в нижней части страницы отобразится экран Heads Up Display (HUD).
На странице Glimpse HUD подробно описаны сведения о времени, показанные выше. Ненавязчивые данные о производительности, отображаемые HUD, могут сразу же уведомить вас о проблеме, прежде чем вы приступите к циклу тестирования. Щелкнув "g" в правом нижнем углу, открывается панель Glimpse:
На рисунке выше выбрана вкладка Выполнение, на которой отображаются сведения о времени действий и фильтров в конвейере. Вы увидите, как таймер фильтра Stop Watch запускается на этапе 6 конвейера. Хотя мой легкий таймер может предоставлять полезные данные профиля и времени, он пропускает все время, затраченное на авторизацию и отрисовку представления. Сведения о моем таймере см. в статье Профилирование и время ASP.NET приложения MVC вплоть до Azure.
Вкладка "Временная шкала"
Я изменил выдающийся учебник Тома Дайкстры по EF 6/MVC 5 с помощью следующего изменения кода для контроллера инструкторов:
public ActionResult Index(int? id, int? courseID, int ? eager)
{
var viewModel = new InstructorIndexData();
viewModel.Instructors = db.Instructors
.Include(i => i.OfficeAssignment)
.Include(i => i.Courses.Select(c => c.Department))
.OrderBy(i => i.LastName);
if (id != null)
{
ViewBag.InstructorID = id.Value;
viewModel.Courses = viewModel.Instructors.Where(
i => i.ID == id.Value).Single().Courses;
}
if (courseID != null)
{
ViewBag.CourseID = courseID.Value;
// Eager loading
if (eager != null && eager > 0)
{
ViewBag.eagerMsg = "Eager Loading";
viewModel.Enrollments = viewModel.Courses.Where(
x => x.CourseID == courseID).Single().Enrollments;
}
else {
// Explicit loading
ViewBag.eagerMsg = "Explicit Loading";
var selectedCourse = viewModel.Courses.Where(x => x.CourseID == courseID).Single();
db.Entry(selectedCourse).Collection(x => x.Enrollments).Load();
foreach (Enrollment enrollment in selectedCourse.Enrollments)
{
db.Entry(enrollment).Reference(x => x.Student).Load();
}
viewModel.Enrollments = selectedCourse.Enrollments;
}
}
return View(viewModel);
}
Приведенный выше код позволяет передать строку запроса (eager
) для управления неотложной или явной загрузкой данных. На рисунке ниже используется явная загрузка, а на странице времени отображается каждая регистрация, загруженная в методе Index
действия:
В следующем коде указывается значение eager, и каждая регистрация извлекается после Index
вызова представления:
Вы можете навести указатель мыши на сегмент времени, чтобы получить подробные сведения о времени:
Привязка модели
Вкладка привязки модели содержит множество сведений, которые помогут вам понять, как связаны переменные формы и почему некоторые из них не связаны должным образом. На рисунке ниже показан значок ? , который можно щелкнуть, чтобы открыть страницу справки по этой функции.
Маршруты
Вкладка Glimpse Routes поможет выполнить отладку и понять маршрутизацию. На изображении ниже выбран маршрут продукта (он отображается зеленым цветом, соглашение Glimpse). Также отображаются ограничения маршрута, области и маркеры данных. Дополнительные сведения см. в статье Просмотр маршрутов и маршрутизации атрибутов в ASP.NET MVC 5 .
Использование Glimpse в Azure
Политика безопасности Glimpse по умолчанию позволяет отображать данные Glimpse только с локального узла. Вы можете изменить эту политику безопасности, чтобы просматривать эти данные на удаленном сервере (например, в веб-приложении в Azure). Для тестовых сред в Azure добавьте выделенную метку в нижнюю часть файла web.config , чтобы включить Glimpse:
<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">
<runtimePolicies>
<ignoredTypes>
<add type="Glimpse.AspNet.Policy.LocalPolicy, Glimpse.AspNet"/>
</ignoredTypes>
</runtimePolicies>
</glimpse>
</configuration>
Только с этим изменением любой пользователь может просматривать данные Glimpse на удаленном сайте. Рассмотрите возможность добавления приведенной выше разметки в профиль публикации, чтобы она развертывалась только при использовании этого профиля публикации (например, тестового профиля Azure). Чтобы ограничить данные Glimpse, мы добавим canViewGlimpseData
роль и разрешим просматривать данные Glimpse только пользователям с этой ролью.
Удалите комментарии из файла GlimpseSecurityPolicy.cs и измените вызов IsInRole с Administrator
на canViewGlimpseData
роль:
public class GlimpseSecurityPolicy : IRuntimePolicy
{
public RuntimePolicy Execute(IRuntimePolicyContext policyContext)
{
var httpContext = policyContext.GetHttpContext();
if (!httpContext.User.IsInRole("canViewGlimpseData"))
{
return RuntimePolicy.Off;
}
return RuntimePolicy.On;
}
public RuntimeEvent ExecuteOn
{
get { return RuntimeEvent.EndRequest | RuntimeEvent.ExecuteResource; }
}
}
Предупреждение
Безопасность. Богатые данные, предоставляемые Glimpse, могут обеспечить безопасность вашего приложения. Корпорация Майкрософт не выполняла аудит безопасности Glimpse для использования в рабочих приложениях.
Сведения о добавлении ролей см. в руководстве Развертывание защищенного веб-приложения MVC 5 ASP.NET с использованием членства, OAuth и База данных SQL в Azure.