Povolení trasování knihovnou SignalR

, autor: Tom FitzMacken

Upozornění

Tato dokumentace není určená pro nejnovější verzi SignalR. Podívejte se na ASP.NET Core SignalR.

Tento dokument popisuje, jak povolit a nakonfigurovat trasování pro servery a klienty SignalR. Trasování umožňuje zobrazit diagnostické informace o událostech v aplikaci SignalR.

Toto téma původně napsal Patrick Fletcher.

Verze softwaru použité v tomto kurzu

Dotazy a komentáře

Pošlete nám prosím zpětnou vazbu k tomu, jak se vám tento kurz líbil a co bychom mohli vylepšit v komentářích v dolní části stránky. Pokud máte dotazy, které přímo nesouvisejí s kurzem, můžete je publikovat na fóru ASP.NET SignalR nebo StackOverflow.com.

Pokud je trasování povolené, aplikace SignalR vytvoří položky protokolu pro události. Události můžete protokolovat z klienta i serveru. Trasování na serveru protokoluje připojení, zprostředkovatele škálování na více instancí a události sběrnice zpráv. Trasování na klientovi protokoluje události připojení. V SignalR 2.1 a novějším trasování na klientovi protokoluje úplný obsah zpráv o vyvolání centra.

Obsah

Povolení trasování na serveru

Trasování na serveru povolíte v konfiguračním souboru aplikace (v závislosti na typu projektu App.config nebo Web.config).) Určíte, které kategorie událostí chcete protokolovat. V konfiguračním souboru také určíte, zda se mají události protokolovat do textového souboru, protokolu událostí systému Windows nebo vlastního protokolu pomocí implementace TraceListener.

Kategorie událostí serveru zahrnují následující druhy zpráv:

Zdroj Zprávy
SignalR.SqlMessageBus Nastavení zprostředkovatele škálování služby SQL Message Bus, operace databáze, chyby a události vypršení časového limitu
SignalR.ServiceBusMessageBus Téma o vytvoření a odběru, chybách a událostech zasílání zpráv poskytovatele služby Service Bus se škálováním na více instancí
SignalR.RedisMessageBus Události připojení, odpojení a chyb zprostředkovatele škálování redis na více instancí
SignalR.ScaleoutMessageBus Události zasílání zpráv se škálováním na více instancí
SignalR.Transports.WebSocketTransport Přenosové připojení, odpojení, zasílání zpráv a chybové události protokolu WebSocket
SignalR.Transports.ServerSentEventsTransport Události přenosu připojení, odpojení, zasílání zpráv a chyb ServerSentEvents
SignalR.Transports.ForeverFrameTransport Přenosové připojení, odpojení, zasílání zpráv a chybové události foreverFrame
SignalR.Transports.LongPollingTransport Události přenosu, odpojení, zasílání zpráv a chyb LongPolling
SignalR.Transports.TransportHeartBeat Přenosové události připojení, odpojení a udržování
SignalR.ReflectedHubDescriptorProvider Události zjišťování centra

Protokolování událostí serveru do textových souborů

Následující kód ukazuje, jak povolit trasování pro každou kategorii události. Tato ukázka nakonfiguruje aplikaci pro protokolování událostí do textových souborů.

Kód serveru XML pro povolení trasování

<system.diagnostics>
    <sources> 
      <source name="SignalR.SqlMessageBus">
        <listeners>
          <add name="SignalR-Bus" />
        </listeners>
      </source>
      <source name="SignalR.ServiceBusMessageBus">
        <listeners>
          <add name="SignalR-Bus" />
        </listeners>
      </source>
      <source name="SignalR.RedisMessageBus">
        <listeners>
          <add name="SignalR-Bus" />
        </listeners>
      </source>
      <source name="SignalR.ScaleoutMessageBus">
        <listeners>
          <add name="SignalR-Bus" />
        </listeners>
      </source>
      <source name="SignalR.Transports.WebSocketTransport">
        <listeners>
          <add name="SignalR-Transports" />
        </listeners>
      </source>     
      <source name="SignalR.Transports.ServerSentEventsTransport">
        <listeners>
          <add name="SignalR-Transports" />
        </listeners>
      </source>
      <source name="SignalR.Transports.ForeverFrameTransport">
        <listeners>
          <add name="SignalR-Transports" />
        </listeners>
      </source>
      <source name="SignalR.Transports.LongPollingTransport">
        <listeners>
          <add name="SignalR-Transports" />
        </listeners>
      </source>
      <source name="SignalR.Transports.TransportHeartBeat">
        <listeners>
          <add name="SignalR-Transports" />
        </listeners>
      </source>
      <source name="SignalR.ReflectedHubDescriptorProvider">
        <listeners>
          <add name="SignalR-Init" />
        </listeners>
      </source>
    </sources>
    <!-- Sets the trace verbosity level -->
    <switches>
      <add name="SignalRSwitch" value="Verbose" />
    </switches>
    <!-- Specifies the trace writer for output -->
    <sharedListeners>
      <!-- Listener for transport events -->
      <add name="SignalR-Transports" type="System.Diagnostics.TextWriterTraceListener" initializeData="transports.log.txt" />
      <!-- Listener for scaleout provider events -->
      <add name="SignalR-Bus" type="System.Diagnostics.TextWriterTraceListener" initializeData="bus.log.txt" />
      <!-- Listener for hub discovery events -->
      <add name="SignalR-Init" type="System.Diagnostics.TextWriterTraceListener" initializeData="init.log.txt" />
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>

Ve výše uvedeném SignalRSwitch kódu položka určuje hodnotu TraceLevel použitou pro události odeslané do zadaného protokolu. V tomto případě je nastaven Verbose na hodnotu, což znamená, že se protokolují všechny zprávy ladění a trasování.

Následující výstup ukazuje položky ze transports.log.txt souboru pro aplikaci používající výše uvedený konfigurační soubor. Zobrazuje nové připojení, odebrané připojení a události prezenčních signálů přenosu.

SignalR.Transports.TransportHeartBeat Information: 0 : Connection 9aa62c9b-09b3-416c-b367-06520e24f780 is New.
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(9aa62c9b-09b3-416c-b367-06520e24f780)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(9aa62c9b-09b3-416c-b367-06520e24f780)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(9aa62c9b-09b3-416c-b367-06520e24f780)
SignalR.Transports.WebSocketTransport Information: 0 : CloseSocket(9aa62c9b-09b3-416c-b367-06520e24f780)
SignalR.Transports.WebSocketTransport Information: 0 : Abort(9aa62c9b-09b3-416c-b367-06520e24f780)
SignalR.Transports.TransportHeartBeat Information: 0 : Removing connection 9aa62c9b-09b3-416c-b367-06520e24f780
SignalR.Transports.WebSocketTransport Information: 0 : End(9aa62c9b-09b3-416c-b367-06520e24f780)
SignalR.Transports.WebSocketTransport Verbose: 0 : DrainWrites(9aa62c9b-09b3-416c-b367-06520e24f780)
SignalR.Transports.WebSocketTransport Information: 0 : CompleteRequest (9aa62c9b-09b3-416c-b367-06520e24f780)

Protokolování událostí serveru do protokolu událostí

Pokud chcete protokolovat události do protokolu událostí místo do textového souboru, změňte hodnoty položek v sharedListeners uzlu. Následující kód ukazuje, jak protokolovat události serveru do protokolu událostí:

Kód serveru XML pro protokolování událostí do protokolu událostí

<sharedListeners>
  <!-- Listener for transport events -->
  <add name="SignalR-Transports" type="System.Diagnostics.EventLogTraceListener" initializeData="SignalRTransportLog" />
  <!-- Listener for scaleout provider events -->
  <add name="SignalR-Bus" type="System.Diagnostics.EventLogTraceListener" initializeData="SignalRScaleoutLog" />
  <!-- Listener for hub discovery events -->
  <add name="SignalR-Init" type="System.Diagnostics.EventLogTraceListener" initializeData="SignalRInitLog" />
</sharedListeners>

Události se protokolují v aplikačním protokolu a jsou k dispozici prostřednictvím Prohlížeč událostí, jak je znázorněno níže:

Prohlížeč událostí zobrazující protokoly SignalR

Poznámka

Pokud používáte protokol událostí, nastavte TraceLevel na Error (Úroveň trasování ) na Error (Chyba ), aby byl počet zpráv spravovatelný.

Povolení trasování v klientovi .NET (desktopové aplikace pro Windows)

Klient .NET může protokolovat události do konzoly, textového souboru nebo vlastního protokolu pomocí implementace TextWriter.

Chcete-li povolit protokolování v klientovi .NET, nastavte vlastnost připojení TraceLevel na hodnotu TraceLevels a TraceWriter vlastnost na platnou instanci TextWriter .

Protokolování událostí desktopového klienta do konzoly

Následující kód jazyka C# ukazuje, jak protokolovat události v klientovi .NET do konzoly:

var hubConnection = new HubConnection("http://www.contoso.com/");
hubConnection.TraceLevel = TraceLevels.All;
hubConnection.TraceWriter = Console.Out;
IHubProxy stockTickerHubProxy = hubConnection.CreateHubProxy("StockTickerHub");
stockTickerHubProxy.On<Stock>("UpdateStockPrice", stock => Console.WriteLine("Stock update for {0} new price {1}", stock.Symbol, stock.Price));
await hubConnection.Start();

Protokolování událostí desktopového klienta do textového souboru

Následující kód jazyka C# ukazuje, jak protokolovat události v klientovi .NET do textového souboru:

var hubConnection = new HubConnection("http://www.contoso.com/");
var writer = new StreamWriter("ClientLog.txt");
writer.AutoFlush = true;
hubConnection.TraceLevel = TraceLevels.All;
hubConnection.TraceWriter = writer;
IHubProxy stockTickerHubProxy = hubConnection.CreateHubProxy("StockTickerHub");
stockTickerHubProxy.On<Stock>("UpdateStockPrice", stock => Console.WriteLine("Stock update for {0} new price {1}", stock.Symbol, stock.Price));
await hubConnection.Start();

Následující výstup ukazuje položky ze ClientLog.txt souboru pro aplikaci používající výše uvedený konfigurační soubor. Zobrazuje klienta, který se připojuje k serveru, a centrum vyvolá metodu klienta s názvem addMessage:

19:41:39.9103763 - null - ChangeState(Disconnected, Connecting)
19:41:40.3750726 - dd61fd48-d796-4518-b36b-ec1dcb970d72 - WS Connecting to: ws://localhost:8080/signalr/signalr/connect?transport=webSockets&clientProtocol=1.4&connectionToken=AQAAANCMnd8BFdERjHoAwE%2FCl%2BsBAAAAh8Lp 
KH5%2FDkCQeR4ALAwR%2BAAAAAACAAAAAAADZgAAwAAAABAAAADHpCa7wm%2FbOhjluf%2Fm9GA9AAAAAASAAACgAAAAEA 
AAAEqRfJihLExRI6tZy7lWRwYoAAAApotSsJXW0OiwEgiUUi0pzhK6oKbz%2BkMeVbezuEDQLnJecM9otFe9PRQAAAAuHK
BlOnPmXt%2FhXV%2Felr1QvC156Q%3D%3D&connectionData=[{"Name":"MyHub"}]
19:41:40.4442923 - dd61fd48-d796-4518-b36b-ec1dcb970d72 - WS: OnMessage({"C":"d-5196BF5C-A,0|B,0|C,1|D,0","S":1,"M":[]})
19:41:40.4874324 - dd61fd48-d796-4518-b36b-ec1dcb970d72 - ChangeState(Connecting, Connected)
19:41:47.4511770 - dd61fd48-d796-4518-b36b-ec1dcb970d72 - WS: OnMessage({"C":"d-5196BF5C-A,1|B,0|C,1|D,0","M":[{"H":"MyHub","M":"addMessage","A":["User One","Hello!"]}]})
19:41:47.4576968 - dd61fd48-d796-4518-b36b-ec1dcb970d72 - WS: OnMessage({"I":"0"})
19:41:50.3959119 - dd61fd48-d796-4518-b36b-ec1dcb970d72 - WS: OnMessage({})
19:41:50.8928084 - dd61fd48-d796-4518-b36b-ec1dcb970d72 - WS: OnMessage({"C":"d-5196BF5C-A,2|B,0|C,1|D,0","M":[{"H":"MyHub","M":"addMessage","A":["User Two","Hello!"]}]})

Povolení trasování v klientech Windows Phone 8

Aplikace SignalR pro Windows Phone aplikace používají stejného klienta .NET jako desktopové aplikace, ale Console.Out a zápis do souboru pomocí StreamWriter nejsou k dispozici. Místo toho musíte vytvořit vlastní implementaci TextWriter pro trasování.

Protokolování událostí klienta Windows Phone do uživatelského rozhraní

Základ kódu SignalR obsahuje ukázku Windows Phone, která zapisuje výstup trasování do objektu TextBlock pomocí vlastní implementace TextWriter s názvem TextBlockWriter. Tuto třídu najdete v projektu samples/Microsoft.AspNet.SignalR.Client.WP8.Samples . Při vytváření instance TextBlockWriternástroje předejte aktuální SynchronizationContext a StackPanel , kde se vytvoří TextBlock , který se použije pro výstup trasování:

Connection = new HubConnection(ServerURI);
var writer = new TextBlockWriter(SynchronizationContext.Current, StackPanelConsole);
Connection.TraceWriter = writer;
Connection.TraceLevel = TraceLevels.All;

Výstup trasování se pak zapíše do nového objektu TextBlock vytvořeného v objektu StackPanel , který jste předali:

Snímek obrazovky znázorňující ukázku Windows Phone s výstupem na displeji

Protokolování událostí klienta Windows Phone do konzoly ladění

Pokud chcete odeslat výstup do konzoly ladění místo uživatelského rozhraní, vytvořte implementaci TextWriter , která zapisuje do okna ladění, a přiřaďte ji k vlastnosti TraceWriter vašeho připojení:

Connection = new HubConnection(ServerURI);
var writer = new DebugTextWriter();
Connection.TraceWriter = writer;
Connection.TraceLevel = TraceLevels.All;

...

private class DebugTextWriter : TextWriter
{
    private StringBuilder buffer;

    public DebugTextWriter()
    {
        buffer = new StringBuilder();
    }

    public override void Write(char value)
    {
        switch (value)
        {
            case '\n':
                return;
            case '\r':
                Debug.WriteLine(buffer.ToString());
                buffer.Clear();
                return;
            default:
                buffer.Append(value);
                break;
        }
    }
            
    public override void Write(string value)
    {
        Debug.WriteLine(value);
                
    }
    #region implemented abstract members of TextWriter
    public override Encoding Encoding
    {
        get { throw new NotImplementedException(); }
    }
    #endregion
}

Informace o trasování se pak zapíšou do okna ladění v sadě Visual Studio:

Snímek obrazovky s dialogovým oknem Výstup Ladění je v poli Zobrazit výstup z.

Povolení trasování v klientovi JavaScriptu

Pokud chcete povolit protokolování na straně klienta připojení, nastavte logging vlastnost objektu připojení před voláním start metody pro navázání připojení.

Javascriptový kód klienta pro povolení trasování do konzoly prohlížeče (s vygenerovaným proxy serverem)

$.connection.hub.logging = true;
$.connection.hub.start();

Javascriptový kód klienta pro povolení trasování do konzoly prohlížeče (bez vygenerovaného proxy serveru)

var connection = $.hubConnection();
connection.logging = true;
connection.start();

Pokud je trasování povolené, javascriptový klient protokoluje události do konzoly prohlížeče. Přístup ke konzole prohlížeče najdete v tématu Monitorování přenosů.

Následující snímek obrazovky ukazuje javascriptového klienta SignalR s povoleným trasováním. Zobrazuje události připojení a vyvolání centra v konzole prohlížeče:

Události trasování SignalR v konzole prohlížeče