Trasování ve webovém rozhraní API 2 ASP.NET

Při pokusu o ladění webové aplikace neexistuje žádná náhrada za dobrou sadu protokolů trasování. V tomto kurzu se dozvíte, jak povolit trasování v ASP.NET webovém rozhraní API. Tuto funkci můžete použít ke sledování toho, co architektura webového rozhraní API dělá před a po vyvolání kontroleru. Můžete ho také použít k trasování vlastního kódu.

Verze softwaru používané v tomto kurzu

Povolení trasování System.Diagnostics ve webovém rozhraní API

Nejprve vytvoříme nový projekt webové aplikace ASP.NET. V sadě Visual Studio v nabídce Soubor vyberte Nový>projekt. V části Šablony vyberte webovou aplikaci ASP.NET.

Obrázek dialogového okna Nový projekt

Zvolte šablonu projektu webového rozhraní API.

Obrázek vybraného webového API

V nabídce Nástroje vyberte Správce balíčků NuGet a pak konzolu Správa balíčků.

V okně konzoly Správce balíčků zadejte následující příkazy.

Install-Package Microsoft.AspNet.WebApi.Tracing
Update-Package Microsoft.AspNet.WebApi.WebHost

První příkaz nainstaluje nejnovější balíček trasování webového rozhraní API. Aktualizuje také základní balíčky webového rozhraní API. Druhý příkaz aktualizuje balíček WebApi.WebHost na nejnovější verzi.

Poznámka:

Pokud chcete cílit na konkrétní verzi webového rozhraní API, při instalaci balíčku trasování použijte příznak -Version.

Otevřete soubor WebApiConfig.cs ve složce App_Start. Do metody Register přidejte následující kód.

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // New code
        config.EnableSystemDiagnosticsTracing();

        // Other configuration code not shown.
    }
}

Tento kód přidá SystemDiagnosticsTraceWriter třídy do kanálu webového rozhraní API. Třída SystemDiagnosticsTraceWriter zapisuje trasování do System.Diagnostics.Trace.

Trasování zobrazíte spuštěním aplikace v ladicím programu. V prohlížeči přejděte na /api/values.

Obrázek zobrazující upravený U R L

Příkazy trasování se zapisují do okna Výstup v sadě Visual Studio. (V nabídce Zobrazit vyberte Výstup).

Obrázek příkazů trasování

Protože SystemDiagnosticsTraceWriter zapisuje trasování do System.Diagnostics.Trace, můžete zaregistrovat další trasovací posluchače, například pro zápis trasování do souboru protokolu. Další informace o zapisovačích tras najdete v tématu Naslouchací procesy tras na MSDN.

Konfigurace SystemDiagnosticsTraceWriter

Následující kód ukazuje, jak nakonfigurovat zapisovač trasování.

SystemDiagnosticsTraceWriter traceWriter = config.EnableSystemDiagnosticsTracing();
traceWriter.IsVerbose = true;
traceWriter.MinimumLevel = TraceLevel.Debug;

Můžete řídit dvě nastavení:

  • IsVerbose: Pokud je false, každý trasovací záznam obsahuje minimální informace. Pokud ano, trasování obsahuje podrobnější informace.
  • MinimumLevel: Nastaví minimální úroveň trasování. Úrovně trasování jsou v pořadí Ladit, Info, Upozornění, Chyba a Fatální.

Přidání trasování do aplikace webového rozhraní API

Přidáním zapisovače trasování získáte okamžitý přístup k trasováním vytvořeným potrubím webového rozhraní API. K trasování vlastního kódu můžete použít také zapisovač trasování:

using System.Web.Http.Tracing;

public class ProductsController : ApiController
{
    public HttpResponseMessage GetAllProducts()
    {
        Configuration.Services.GetTraceWriter().Info(
            Request, "ProductsController", "Get the list of products.");

        // ...
    }
}

Chcete-li získat zapisovač trasování, zavolejte HttpConfiguration.Services.GetTraceWriter. Z kontroleru je tato metoda přístupná prostřednictvím ApiController.Configuration vlastnost.

Chcete-li napsat trasování, můžete volat metodu ITraceWriter.Trace přímo, ale třída ITraceWriterExtensions definuje některé rozšiřující metody, které jsou uživatelsky přívětivé. Například výše uvedená metoda Info vytvoří trasování s úrovní trasování Info.

Infrastruktura trasování webového rozhraní API

Tato část popisuje, jak napsat vlastní zapisovač trasování pro webové rozhraní API.

Balíček Microsoft.AspNet.WebApi.Tracing je založený na obecnější infrastruktuře trasování ve webovém rozhraní API. Místo použití Microsoft.AspNet.WebApi.Tracing můžete také připojit k některé jiné knihovně trasování/protokolování, jako je NLog nebo log4net.

Chcete-li shromažďovat trasování, implementujte rozhraní ITraceWriter. Tady je jednoduchý příklad:

public class SimpleTracer : ITraceWriter
{
    public void Trace(HttpRequestMessage request, string category, TraceLevel level, 
        Action<TraceRecord> traceAction)
    {
        TraceRecord rec = new TraceRecord(request, category, level);
        traceAction(rec);
        WriteTrace(rec);
    }

    protected void WriteTrace(TraceRecord rec)
    {
        var message = string.Format("{0};{1};{2}", 
            rec.Operator, rec.Operation, rec.Message);
        System.Diagnostics.Trace.WriteLine(message, rec.Category);
    }
}

Metoda ITraceWriter.Trace vytváří trasování. Volající určuje kategorii a úroveň trasování. Kategorie může být libovolný řetězec definovaný uživatelem. Vaše implementace Trace by měla provést následující:

  1. Vytvořte nový záznam TraceRecord. Inicializujte to s požadavkem, kategorií a úrovní trasování, jak je uvedeno. Tyto hodnoty poskytuje volající.
  2. Vyvolání delegáta traceAction Uvnitř tohoto delegáta se očekává, že volající vyplní zbytek záznamu TraceRecord.
  3. Napište TraceRecord pomocí libovolné techniky zaznamenávání, kterou chcete. Příklad zde uvedený jednoduše volá System.Diagnostics.Trace.

Nastavení zapisovače trasování

Pokud chcete povolit trasování, musíte nakonfigurovat webové rozhraní API tak, aby používalo vaši implementaci ITraceWriter . Provedete to prostřednictvím objektu HttpConfiguration , jak je znázorněno v následujícím kódu:

public static void Register(HttpConfiguration config)
{
    config.Services.Replace(typeof(ITraceWriter), new SimpleTracer());
}

Aktivní může být pouze jeden zapisovač trasování. Webové rozhraní API ve výchozím nastavení nastaví trasovací modul 'no-op', který nic nedělá. ("no-op" tracer existuje, aby kód trasování nemusel před tím, než začne zapisovat, kontrolovat, zda zapisovač trasování je null.)

Jak funguje trasování webového rozhraní API

Trasování ve webovém rozhraní API používá vzor fasády: Pokud je povoleno trasování, webové rozhraní API obalí různé části zpracování žádostí pomocí tříd, které provádějí volání trasování.

Například při výběru kontroleru kanál používá rozhraní IHttpControllerSelector . Při povoleném trasování kanál vloží třídu, která implementuje IHttpControllerSelector , ale volá přes skutečnou implementaci:

Trasování webového rozhraní API používá vzor fasády.

Mezi výhody tohoto návrhu patří:

  • Pokud nezadáte zapisovač trasování, komponenty trasování nebudou vytvořeny a nebudou mít žádný dopad na výkon.
  • Pokud nahradíte výchozí služby, jako je IHttpControllerSelector, vlastní implementací, trasování není ovlivněno, protože trasování provádí wrapper objekt.

Můžete také nahradit celou trasovací architekturu webového rozhraní API vlastní architekturou tak, že nahradíte výchozí službu ITraceManager :

config.Services.Replace(typeof(ITraceManager), new MyTraceManager());

Implementujte ITraceManager.Initialize pro inicializaci systému trasování. Mějte na paměti, že tím se nahradí celá architektura trasování, včetně veškerého trasovacího kódu, který je integrovaný do webového rozhraní API.