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
- Visual Studio 2013
- .NET Framework 4.5
- SignalR verze 2
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:
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 TextBlockWriter
ná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:
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:
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: