SignalR İzlemeyi Etkinleştirme
yazan: Tom FitzMacken
Uyarı
Bu belgeler SignalR'nin en son sürümüne yönelik değildir. SignalR ASP.NET Core göz atın.
Bu belgede SignalR sunucuları ve istemcileri için izlemeyi etkinleştirme ve yapılandırma açıklanmaktadır. İzleme, SignalR uygulamanızdaki olaylarla ilgili tanılama bilgilerini görüntülemenizi sağlar.
Bu konu ilk olarak Patrick Fletcher tarafından yazılmıştır.
Öğreticide kullanılan yazılım sürümleri
- Visual Studio 2013
- .NET Framework 4.5
- SignalR sürüm 2
Sorular ve yorumlar
Lütfen bu öğreticiyi nasıl beğendiğiniz ve sayfanın altındaki yorumlarda neleri geliştirebileceğimiz hakkında geri bildirim bırakın. Öğreticiyle doğrudan ilgili olmayan sorularınız varsa bunları ASP.NET SignalR forumunu veya StackOverflow.com gönderebilirsiniz.
İzleme etkinleştirildiğinde SignalR uygulaması olaylar için günlük girdileri oluşturur. Hem istemciden hem de sunucudan olayları günlüğe kaydedebilirsiniz. Sunucudaki izleme bağlantı, ölçek genişletme sağlayıcısı ve ileti veri yolu olaylarını günlüğe kaydeder. İstemcide izleme bağlantı olaylarını günlüğe kaydeder. SignalR 2.1 ve sonraki sürümlerde istemcide izleme, hub çağırma iletilerinin tüm içeriğini günlüğe kaydeder.
İçindekiler
Sunucuda izlemeyi etkinleştirme
Uygulamanın yapılandırma dosyasındaki sunucuda izlemeyi etkinleştirirsiniz (projenin türüne bağlı olarak App.config veya Web.config.) Günlüğe kaydetmek istediğiniz olay kategorilerini belirtirsiniz. Yapılandırma dosyasında, traceListener uygulamasını kullanarak olayların bir metin dosyasına mı, Windows olay günlüğüne mi yoksa özel bir günlüğe mi kaydedileceğini de belirtirsiniz.
Sunucu olay kategorileri aşağıdaki tür iletileri içerir:
Kaynak | İletiler |
---|---|
SignalR.SqlMessageBus | SQL Message Bus ölçek genişletme sağlayıcısı kurulumu, veritabanı işlemi, hata ve zaman aşımı olayları |
SignalR.ServiceBusMessageBus | Service Bus ölçek genişletme sağlayıcısı konu oluşturma ve abonelik, hata ve mesajlaşma olayları |
SignalR.RedisMessageBus | Redis ölçeği genişletme sağlayıcısı bağlantısı, bağlantı kesilmesi ve hata olayları |
SignalR.ScaleoutMessageBus | Mesajlaşma olaylarının ölçeğini genişletme |
SignalR.Transports.WebSocketTransport | WebSocket aktarım bağlantısı, bağlantı kesilmesi, mesajlaşma ve hata olayları |
SignalR.Transports.ServerSentEventsTransport | ServerSentEvents aktarım bağlantısı, bağlantı kesilmesi, mesajlaşma ve hata olayları |
SignalR.Transports.ForeverFrameTransport | ForeverFrame aktarım bağlantısı, bağlantı kesilmesi, mesajlaşma ve hata olayları |
SignalR.Transports.LongPollingTransport | LongPolling aktarım bağlantısı, bağlantı kesilmesi, mesajlaşma ve hata olayları |
SignalR.Transports.TransportHeartBeat | Aktarım bağlantısı, bağlantı kesilmesi ve tutma olayları |
SignalR.ReflectedHubDescriptorProvider | Hub bulma olayları |
Sunucu olaylarını metin dosyalarına kaydetme
Aşağıdaki kod, her olay kategorisi için izlemeyi etkinleştirmeyi gösterir. Bu örnek, uygulamayı olayları metin dosyalarına kaydedecek şekilde yapılandırıyor.
İzlemeyi etkinleştirmek için XML sunucu kodu
<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>
Yukarıdaki kodda SignalRSwitch
, girdi belirtilen günlüğe gönderilen olaylar için kullanılan TraceLevel değerini belirtir. Bu durumda, tüm hata ayıklama ve izleme iletilerinin günlüğe Verbose
kaydedildiği anlamına gelir.
Aşağıdaki çıkış, yukarıdaki yapılandırma dosyasını kullanan bir uygulamanın dosyasından girişleri transports.log.txt
gösterir. Yeni bir bağlantı, kaldırılan bağlantı ve aktarım sinyali olaylarını gösterir.
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)
Sunucu olaylarını olay günlüğüne kaydetme
Olayları bir metin dosyası yerine olay günlüğüne kaydetmek için düğümdeki sharedListeners
girdilerin değerlerini değiştirin. Aşağıdaki kod, sunucu olaylarının olay günlüğüne nasıl kaydedileceklerini gösterir:
Olayları olay günlüğüne günlüğe kaydetmek için XML sunucu kodu
<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>
Olaylar Uygulama günlüğüne kaydedilir ve aşağıda gösterildiği gibi Olay Görüntüleyicisi aracılığıyla kullanılabilir:
Not
Olay günlüğünü kullanırken, iletilerin sayısını yönetilebilir durumda tutmak için TraceLevel değerini Hata olarak ayarlayın.
.NET istemcisinde izlemeyi etkinleştirme (Windows Masaüstü uygulamaları)
.NET istemcisi textWriter uygulamasını kullanarak olayları konsola, metin dosyasına veya özel bir günlüğe kaydedebilir.
.NET istemcisinde günlüğe kaydetmeyi etkinleştirmek için, bağlantının TraceLevel
özelliğini TraceLevels değerine, TraceWriter
özelliğini de geçerli bir TextWriter örneğine ayarlayın.
Masaüstü istemci olaylarını konsola kaydetme
Aşağıdaki C# kodu, .NET istemcisindeki olayların konsolda nasıl günlüğe kaydedileceklerini gösterir:
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();
Masaüstü istemci olaylarını bir metin dosyasına kaydetme
Aşağıdaki C# kodu, .NET istemcisindeki olayların bir metin dosyasına nasıl kaydedileceklerini gösterir:
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();
Aşağıdaki çıkış, yukarıdaki yapılandırma dosyasını kullanan bir uygulamanın dosyasından girişleri ClientLog.txt
gösterir. Sunucuya bağlanan istemciyi ve adlı addMessage
istemci yöntemini çağıran hub'ı gösterir:
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!"]}]})
Windows Phone 8 istemcide izlemeyi etkinleştirme
Windows Phone uygulamaları için SignalR uygulamaları, masaüstü uygulamalarıyla aynı .NET istemcisini kullanır, ancak Console.Out ve StreamWriter ile bir dosyaya yazma kullanılamaz. Bunun yerine, izleme için özel bir TextWriter uygulaması oluşturmanız gerekir.
İstemci olaylarını kullanıcı arabirimine Windows Phone günlüğe kaydetme
SignalR kod tabanı, adlı TextBlockWriter
özel bir TextWriter uygulaması kullanarak bir TextBlock'a izleme çıktısı yazan bir Windows Phone örneği içerir. Bu sınıf samples/Microsoft.AspNet.SignalR.Client.WP8.Samples projesinde bulunabilir. örneği TextBlockWriter
oluştururken geçerli SynchronizationContext'i ve izleme çıkışı için kullanılacak TextBlock'u oluşturacağı StackPanel'i geçirin:
Connection = new HubConnection(ServerURI);
var writer = new TextBlockWriter(SynchronizationContext.Current, StackPanelConsole);
Connection.TraceWriter = writer;
Connection.TraceLevel = TraceLevels.All;
Ardından izleme çıkışı, geçirdiğiniz StackPanel'de oluşturulan yeni bir TextBlock'a yazılır:
İstemci olaylarını hata ayıklama konsoluna Windows Phone günlüğe kaydetme
Çıktıyı kullanıcı arabirimi yerine hata ayıklama konsoluna göndermek için, hata ayıklama penceresine yazan bir TextWriter uygulaması oluşturun ve bunu bağlantınızın TraceWriter özelliğine atayın:
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
}
Ardından, izleme bilgileri Visual Studio'daki hata ayıklama penceresine yazılır:
JavaScript istemcisinde izlemeyi etkinleştirme
Bağlantıda istemci tarafı günlük kaydını etkinleştirmek için, bağlantıyı kurmak için yöntemini çağırmadan önce bağlantı nesnesinde start
özelliğini ayarlayınlogging
.
Tarayıcı konsolunda izlemeyi etkinleştirmek için istemci JavaScript kodu (oluşturulan proxy ile)
$.connection.hub.logging = true;
$.connection.hub.start();
Tarayıcı konsolunda izlemeyi etkinleştirmek için istemci JavaScript kodu (oluşturulan ara sunucu olmadan)
var connection = $.hubConnection();
connection.logging = true;
connection.start();
İzleme etkinleştirildiğinde, JavaScript istemcisi olayları tarayıcı konsoluna günlüğe kaydeder. Tarayıcı konsoluna erişmek için bkz . Aktarımları İzleme.
Aşağıdaki ekran görüntüsünde izlemenin etkinleştirildiği bir SignalR JavaScript istemcisi gösterilmektedir. Tarayıcı konsolunda bağlantı ve hub çağırma olaylarını gösterir:
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin