Profil aplikace ASP.NET MVC a její ladění pomocí balíčku Glimpse
Glimpse je rostoucí a prospívá řada balíčků NuGet open source, která poskytuje podrobné informace o výkonu, ladění a diagnostice ASP.NET aplikací. Instalace je jednoduchá, jednoduchá, velmi rychlá a zobrazuje klíčové metriky výkonu v dolní části každé stránky. Umožňuje přejít k podrobnostem aplikace, když potřebujete zjistit, co se na serveru děje. Glimpse poskytuje tolik cenných informací, že doporučujeme používat ho během celého vývojového cyklu, včetně testovacího prostředí Azure. Zatímco Fiddler a vývojové nástroje F-12 poskytují zobrazení na straně klienta, Glimpse poskytuje podrobné zobrazení ze serveru. Tento kurz se zaměří na používání balíčků Glimpse ASP.NET MVC a EF, ale k dispozici je mnoho dalších balíčků. Tam, kde je to možné, budu odkazovat na příslušné dokumenty Glimpse , které pomáhám udržovat. Glimpse je open source projekt, můžete také přispívat do zdrojového kódu a dokumentace.
- Instalace Aplikace Glimpse
- Povolení funkce Glimpse pro místního hostitele
- Karta Časová osa
- Vazby modelu
- Trasy
- Použití Glimpse v Azure
- Další zdroje informací
Instalace Aplikace Glimpse
Aplikaci Glimpse můžete nainstalovat z konzoly správce balíčků NuGet nebo z konzoly Správa balíčků NuGet . Pro tuto ukázku nainstaluji balíčky Mvc5 a EF6:
Hledání Glimpse.EF
Když vyberete Nainstalované balíčky, zobrazí se nainstalované moduly Závislé na přehledu:
Následující příkazy nainstalují moduly Glimpse MVC5 a EF6 z konzoly správce balíčků:
PM> Install-Package Glimpse.MVC5
PM> Install-Package Glimpse.EF6
Povolení funkce Glimpse pro místního hostitele
Přejděte na http://localhost:<port #>/glimpse.axd a klikněte na tlačítko Zapnout přehled .
Pokud máte zobrazený panel oblíbené položky, můžete přetáhnout tlačítka Glimpse a přidat je jako záložky:
V aplikaci teď můžete procházet a v dolní části stránky se zobrazí heads up display (HUD).
Stránka Glimpse HUD podrobně popisuje výše uvedené informace o načasování. Nevtíravá data o výkonu, která hud zobrazí, vás na problém upozorní okamžitě – ještě před tím, než se dostanete do testovacího cyklu. Kliknutím na "g" v pravém dolním rohu se zobrazí panel Glimpse:
Na obrázku výše je vybraná karta Spuštění, která zobrazuje podrobnosti časování akcí a filtrů v kanálu. Uvidíte, jak se časovač filtru Stop Watch spouští ve fázi 6 kanálu. I když můj odlehčený časovač může poskytnout užitečné údaje o profilu nebo časování, promešká veškerý čas strávený autorizací a vykreslováním zobrazení. Informace o časovači si můžete přečíst v tématu Profil a Čas ASP.NET aplikace MVC až do Azure.
Karta Časová osa
Upravil jsem vynikající kurz EF 6/MVC 5 Toma Dykstra s následující změnou kódu na kontroler instruktorů:
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);
}
Výše uvedený kód mi umožňuje předat řetězec dotazu (eager
) k řízení dychtivého nebo explicitního načítání dat. Na následujícím obrázku se používá explicitní načtení a na stránce časování se zobrazí každá registrace načtená Index
v metodě akce:
V následujícím kódu je zadána hodnota nedočkavosti a každá registrace se načte po zavolání Index
zobrazení:
Když najedete myší na časový segment, získáte podrobné informace o načasování:
Vazby modelu
Karta vazby modelu poskytuje množství informací, které vám pomůžou pochopit, jak jsou proměnné formuláře vázané a proč některé z nich nejsou vázané podle očekávání. Na obrázku níže je ikona ? , na kterou můžete kliknout a zobrazit stránku nápovědy k dané funkci.
Trasy
S laděním a pochopením směrování vám může pomoct karta Glimpse Routes (Trasy pohltí). Na obrázku níže je vybraná trasa produktu (a zobrazuje se zeleně, konvence Glimpse). Zobrazí se také omezení trasy, oblasti a datové tokeny. Další informace najdete v tématu Porozhlédnutí tras a směrování atributů v ASP.NET MVC 5 .
Použití Glimpse v Azure
Výchozí zásady zabezpečení Glimpse umožňují zobrazení dat Glimpse pouze z místního hostitele. Tyto zásady zabezpečení můžete změnit tak, abyste tato data mohli zobrazit na vzdáleném serveru (například ve webové aplikaci v Azure). V případě testovacích prostředí v Azure přidejte zvýrazněnou značku nahoru do dolní části souboruweb.config , aby se povolila funkce Glimpse:
<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">
<runtimePolicies>
<ignoredTypes>
<add type="Glimpse.AspNet.Policy.LocalPolicy, Glimpse.AspNet"/>
</ignoredTypes>
</runtimePolicies>
</glimpse>
</configuration>
Díky této změně může každý uživatel zobrazit vaše data o sledování na vzdáleném webu. Zvažte přidání výše uvedeného kódu do profilu publikování, aby se nasadil pouze v případě, že použijete tento profil publikování (například testovací profil Azure). Abychom omezili data funkce Glimpse, přidáme canViewGlimpseData
roli a povolíme jenom uživatelům v této roli zobrazovat data glimpse.
Odeberte komentáře ze souboru GlimpseSecurityPolicy.cs a změňte volání IsInRole z Administrator
na canViewGlimpseData
roli:
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; }
}
}
Upozornění
Zabezpečení – Bohatá data, která glimpse poskytuje, můžou vystavit zabezpečení vaší aplikace. Společnost Microsoft neprováděla audit zabezpečení aplikace Glimpse pro použití v produkčních aplikacích.
Informace o přidávání rolí najdete v kurzu Nasazení zabezpečené ASP.NET webové aplikace MVC 5 s členstvím, OAuth a SQL Database do Azure.