Sdílet prostřednictvím


Profil aplikace ASP.NET MVC a její ladění pomocí balíčku Glimpse

Rick Anderson

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

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:

instalace Glimpse z NuGet Dlg

Hledání Glimpse.EF

Glimpse.EF z instalačního souboru dlg NuGet

Když vyberete Nainstalované balíčky, zobrazí se nainstalované moduly Závislé na přehledu:

Nainstalované balíčky Glimpse z DLg

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 .

Pohled na osovou stránku

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:

IE s glimpse bookmarklets

V aplikaci teď můžete procházet a v dolní části stránky se zobrazí heads up display (HUD).

Stránka Správce kontaktů s 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:

Porozhlédnutí panelu

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:

explicitní načítání

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í:

dychtivý je zadán

Když najedete myší na časový segment, získáte podrobné informace o načasování:

Najetí myší zobrazíte podrobné 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.

náhled zobrazení vazeb modelu

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). Vybraný název produktu 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.

Další materiály