Mengaktifkan Pelacakan SignalR
oleh Tom FitzMacken
Peringatan
Dokumentasi ini bukan untuk versi terbaru SignalR. Lihat ASP.NET Core SignalR.
Dokumen ini menjelaskan cara mengaktifkan dan mengonfigurasi pelacakan untuk server dan klien SignalR. Pelacakan memungkinkan Anda melihat informasi diagnostik tentang peristiwa di aplikasi SignalR Anda.
Topik ini awalnya ditulis oleh Patrick Fletcher.
Versi perangkat lunak yang digunakan dalam tutorial
- Visual Studio 2013
- .NET Framework 4,5
- SignalR versi 2
Pertanyaan dan komentar
Silakan tinggalkan umpan balik tentang bagaimana Anda menyukai tutorial ini dan apa yang dapat kami tingkatkan di komentar di bagian bawah halaman. Jika Anda memiliki pertanyaan yang tidak terkait langsung dengan tutorial, Anda dapat mempostingnya ke forum ASP.NET SignalR atau StackOverflow.com.
Saat pelacakan diaktifkan, aplikasi SignalR membuat entri log untuk peristiwa. Anda dapat mencatat peristiwa dari klien dan server. Melacak koneksi log server, penyedia skala, dan peristiwa bus pesan. Melacak peristiwa koneksi log klien. Di SignalR 2.1 dan yang lebih baru, melacak klien mencatat konten lengkap pesan pemanggilan hub.
Konten
Mengaktifkan pelacakan pada server
Anda mengaktifkan pelacakan pada server dalam file konfigurasi aplikasi (baik App.config atau Web.config tergantung pada jenis proyek.) Anda menentukan kategori peristiwa mana yang ingin Anda catat. Dalam file konfigurasi, Anda juga menentukan apakah akan mencatat peristiwa ke file teks, log peristiwa Windows, atau log kustom menggunakan implementasi TraceListener.
Kategori peristiwa server mencakup jenis pesan berikut:
Sumber | Pesan |
---|---|
SignalR.SqlMessageBus | Penyiapan penyedia skala Bus Pesan SQL, operasi database, kesalahan, dan peristiwa waktu habis |
SignalR.ServiceBusMessageBus | Pembuatan topik penyedia skala bus layanan dan peristiwa langganan, kesalahan, dan olahpesan |
SignalR.RedisMessageBus | Koneksi penyedia skala redis, pemutusan sambungan, dan peristiwa kesalahan |
SignalR.ScaleoutMessageBus | Peristiwa olahpesan scaleout |
SignalR.Transports.WebSocketTransport | Koneksi transportasi WebSocket, pemutusan sambungan, olahpesan, dan peristiwa kesalahan |
SignalR.Transports.ServerSentEventsTransport | Koneksi transportasi ServerSentEvents, pemutusan sambungan, olahpesan, dan peristiwa kesalahan |
SignalR.Transports.ForeverFrameTransport | Koneksi transportasi ForeverFrame, pemutusan sambungan, olahpesan, dan peristiwa kesalahan |
SignalR.Transports.LongPollingTransport | Koneksi transportasi LongPolling, pemutusan sambungan, olahpesan, dan peristiwa kesalahan |
SignalR.Transports.TransportHeartBeat | Koneksi transportasi, pemutusan sambungan, dan peristiwa keepalive |
SignalR.ReflectedHubDescriptorProvider | Peristiwa penemuan hub |
Mencatat peristiwa server ke file teks
Kode berikut menunjukkan cara mengaktifkan pelacakan untuk setiap kategori peristiwa. Sampel ini mengonfigurasi aplikasi untuk mencatat peristiwa ke file teks.
Kode server XML untuk mengaktifkan pelacakan
<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>
Dalam kode di atas, SignalRSwitch
entri menentukan TraceLevel yang digunakan untuk peristiwa yang dikirim ke log yang ditentukan. Dalam hal ini, ini diatur ke Verbose
yang berarti semua pesan penelusuran kesalahan dan pelacakan dicatat.
Output berikut menunjukkan entri dari transports.log.txt
file untuk aplikasi menggunakan file konfigurasi di atas. Ini menunjukkan koneksi baru, koneksi yang dihapus, dan peristiwa heartbeat transportasi.
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)
Mencatat peristiwa server ke log peristiwa
Untuk mencatat peristiwa ke log peristiwa daripada file teks, ubah nilai untuk entri dalam simpul sharedListeners
. Kode berikut menunjukkan cara mencatat peristiwa server ke log peristiwa:
Kode server XML untuk peristiwa pengelogan ke log peristiwa
<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>
Peristiwa dicatat di log Aplikasi, dan tersedia melalui Penampil Peristiwa, seperti yang ditunjukkan di bawah ini:
Catatan
Saat menggunakan log peristiwa, atur TraceLevel ke Kesalahan untuk menjaga jumlah pesan tetap dapat dikelola.
Mengaktifkan pelacakan di klien .NET (aplikasi Windows Desktop)
Klien .NET dapat mencatat peristiwa ke konsol, file teks, atau ke log kustom menggunakan implementasi TextWriter.
Untuk mengaktifkan pengelogan di klien .NET, atur properti koneksi TraceLevel
ke nilai TraceLevels , dan TraceWriter
properti ke instans TextWriter yang valid.
Mencatat peristiwa klien Desktop ke konsol
Kode C# berikut menunjukkan cara mencatat peristiwa di klien .NET ke konsol:
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();
Mencatat peristiwa klien Desktop ke file teks
Kode C# berikut menunjukkan cara mencatat peristiwa di klien .NET ke file teks:
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();
Output berikut menunjukkan entri dari ClientLog.txt
file untuk aplikasi menggunakan file konfigurasi di atas. Ini menunjukkan klien yang terhubung ke server, dan hub memanggil metode klien yang disebut 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!"]}]})
Mengaktifkan pelacakan di klien Windows Phone 8
Aplikasi SignalR untuk aplikasi Windows Phone menggunakan klien .NET yang sama dengan aplikasi desktop, tetapi Console.Out dan menulis ke file dengan StreamWriter tidak tersedia. Sebagai gantinya, Anda perlu membuat implementasi kustom TextWriter untuk pelacakan.
Mencatat peristiwa klien Windows Phone ke UI
Basis kode SignalR menyertakan sampel Windows Phone yang menulis output jejak ke TextBlock menggunakan implementasi TextWriter kustom yang disebut TextBlockWriter
. Kelas ini dapat ditemukan di proyek samples/Microsoft.AspNet.SignalR.Client.WP8.Samples . Saat membuat instans TextBlockWriter
, berikan SynchronizationContext saat ini, dan StackPanel di mana ia akan membuat TextBlock untuk digunakan untuk output pelacakan:
Connection = new HubConnection(ServerURI);
var writer = new TextBlockWriter(SynchronizationContext.Current, StackPanelConsole);
Connection.TraceWriter = writer;
Connection.TraceLevel = TraceLevels.All;
Output pelacakan kemudian akan ditulis ke TextBlock baru yang dibuat di StackPanel yang Anda lewati:
Mencatat peristiwa klien Windows Phone ke konsol debug
Untuk mengirim output ke konsol debug daripada UI, buat implementasi TextWriter yang menulis ke jendela debug, dan tetapkan ke properti TraceWriter koneksi Anda:
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
}
Informasi pelacakan kemudian akan ditulis ke jendela debug di Visual Studio:
Mengaktifkan pelacakan di klien JavaScript
Untuk mengaktifkan pengelogan sisi klien pada koneksi, atur logging
properti pada objek koneksi sebelum Anda memanggil start
metode untuk membuat koneksi.
Kode JavaScript klien untuk mengaktifkan pelacakan ke konsol browser (dengan proksi yang dihasilkan)
$.connection.hub.logging = true;
$.connection.hub.start();
Kode JavaScript klien untuk mengaktifkan pelacakan ke konsol browser (tanpa proksi yang dihasilkan)
var connection = $.hubConnection();
connection.logging = true;
connection.start();
Saat pelacakan diaktifkan, klien JavaScript mencatat peristiwa ke konsol browser. Untuk mengakses konsol browser, lihat Memantau Transportasi.
Cuplikan layar berikut menunjukkan klien SignalR JavaScript dengan pelacakan diaktifkan. Ini menunjukkan peristiwa pemanggilan koneksi dan hub di konsol browser:
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk