SignalR İzlemeyi EtkinleştirmeEnabling SignalR Tracing

Tom FitzMacken tarafındanby Tom FitzMacken

Warning

Bu belge, SignalR 'nin en son sürümü için değildir.This documentation isn't for the latest version of SignalR. ASP.NET Core SignalR'ye göz atın.Take a look at ASP.NET Core SignalR.

Bu belgede, SignalR sunucuları ve istemcileri için izlemenin nasıl etkinleştirileceği ve yapılandırılacağı açıklanmaktadır.This document describes how to enable and configure tracing for SignalR servers and clients. İzleme, SignalR uygulamanızda olaylarla ilgili tanılama bilgilerini görüntülemenize olanak sağlar.Tracing enables you to view diagnostic information about events in your SignalR application.

Bu konu, ilk başta Patrick Fleti tarafından yazılmıştır.This topic was originally written by Patrick Fletcher.

Öğreticide kullanılan yazılım sürümleriSoftware versions used in the tutorial

Sorular ve açıklamalarQuestions and comments

Lütfen bu öğreticiyi nasıl beğentireceğiniz ve sayfanın en altındaki açıklamalarda İyileştiğimiz hakkında geri bildirimde bulunun.Please leave feedback on how you liked this tutorial and what we could improve in the comments at the bottom of the page. Öğreticiyle doğrudan ilgili olmayan sorularınız varsa, bunları ASP.NET SignalR forumuna veya StackOverflow.com'e gönderebilirsiniz.If you have questions that are not directly related to the tutorial, you can post them to the ASP.NET SignalR forum or StackOverflow.com.

İzleme etkinleştirildiğinde, bir SignalR uygulaması olaylar için günlük girişleri oluşturur.When tracing is enabled, a SignalR application creates log entries for events. Olayları hem istemciden hem de sunucudan günlüğe kaydedebilirsiniz.You can log events from both the client and the server. Sunucu günlüğü bağlantısı, genişleme sağlayıcısı ve ileti veri yolu olaylarını izleme.Tracing on the server logs connection, scaleout provider, and message bus events. İstemci üzerindeki izleme, bağlantı olaylarını günlüğe kaydeder.Tracing on the client logs connection events. SignalR 2,1 ve üzeri sürümlerde, istemci üzerindeki izleme, hub çağırma iletilerinin tam içeriğini günlüğe kaydeder.In SignalR 2.1 and later, tracing on the client logs the full content of hub invocation messages.

İçindekilerContents

Sunucuda izlemeyi etkinleştirmeEnabling tracing on the server

Uygulamanın yapılandırma dosyası (proje türüne bağlı olarak App. config veya Web. config) içindeki sunucuda izlemeyi etkinleştirirsiniz. Hangi olay kategorilerini günlüğe kaydetmek istediğinizi belirtirsiniz.You enable tracing on the server within the application's configuration file (either App.config or Web.config depending on the type of project.) You specify which categories of events you want to log. Yapılandırma dosyasında, olayları bir metin dosyasına, Windows olay günlüğüne veya TraceListeneruygulamasını kullanarak özel bir günlüğe günlüğe kaydetmek isteyip istemediğinizi de belirtirsiniz.In the configuration file, you also specify whether to log the events to a text file, the Windows event log, or a custom log using an implementation of TraceListener.

Sunucu olay kategorileri aşağıdaki ileti türlerini içerir:The server event categories include the following sorts of messages:

KaynakSource İletilerMessages
SignalR. SqlMessageBusSignalR.SqlMessageBus SQL Ileti veri yolu genişleme sağlayıcısı kurulumu, veritabanı işlemi, hata ve zaman aşımı olaylarıSQL Message Bus scaleout provider setup, database operation, error, and timeout events
SignalR. ServiceBusMessageBusSignalR.ServiceBusMessageBus Service Bus genişleme sağlayıcısı konu oluşturma ve abonelik, hata ve mesajlaşma olaylarıService bus scaleout provider topic creation and subscription, error, and messaging events
SignalR. RedisMessageBusSignalR.RedisMessageBus Redsıs genişleme sağlayıcı bağlantısı, bağlantı kesilmesi ve hata olaylarıRedis scaleout provider connection, disconnection, and error events
SignalR. ScaleoutMessageBusSignalR.ScaleoutMessageBus Genişleme mesajlaşma olaylarıScaleout messaging events
SignalR. taşımalar. WebSocketTransportSignalR.Transports.WebSocketTransport WebSocket aktarım bağlantısı, bağlantı kesilmesi, mesajlaşma ve hata olaylarıWebSocket transport connection, disconnection, messaging, and error events
SignalR. taşımalar. ServerSentEventsTransportSignalR.Transports.ServerSentEventsTransport ServerSentEvents aktarım bağlantısı, bağlantı kesme, mesajlaşma ve hata olaylarıServerSentEvents transport connection, disconnection, messaging, and error events
SignalR. taşımalar. ForeverFrameTransportSignalR.Transports.ForeverFrameTransport ForeverFrame aktarım bağlantısı, bağlantı kesilmesi, mesajlaşma ve hata olaylarıForeverFrame transport connection, disconnection, messaging, and error events
SignalR.Transports.LongPollingTransportSignalR.Transports.LongPollingTransport Uzun Gplipop aktarım bağlantısı, bağlantı kesilmesi, mesajlaşma ve hata olaylarıLongPolling transport connection, disconnection, messaging, and error events
SignalR. taşımalar. TransportHeartBeatSignalR.Transports.TransportHeartBeat Aktarım bağlantısı, bağlantı kesilmesi ve KeepAlive olaylarıTransport connection, disconnection, and keepalive events
SignalR. ReflectedHubDescriptorProviderSignalR.ReflectedHubDescriptorProvider Merkez bulma olaylarıHub discovery events

Sunucu olaylarını metin dosyalarına kaydetmeLogging server events to text files

Aşağıdaki kod, her olay kategorisi için izlemenin nasıl etkinleştirileceğini gösterir.The following code shows how to enable tracing for each category of event. Bu örnek, uygulamayı metin dosyalarına olayları günlüğe kaydetmek üzere yapılandırır.This sample configures the application to log events to text files.

İzlemeyi etkinleştirmek için XML sunucusu koduXML server code for enabling tracing

<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 girdisi, belirtilen günlüğe gönderilen olaylar için TraceLevel kullanılan öğesini belirtir.In the code above, the SignalRSwitch entry specifies the TraceLevel used for events sent to the specified log. Bu durumda, tüm hata ayıklama ve izleme iletilerinin kaydedildiği Verbose olarak ayarlanır.In this case, it is set to Verbose which means all debugging and tracing messages are logged.

Aşağıdaki çıktıda, yukarıdaki yapılandırma dosyası kullanılarak bir uygulama için transports.log.txt dosyasındaki girişler gösterilmektedir.The following output shows entries from the transports.log.txt file for an application using the above configuration file. Yeni bir bağlantı, kaldırılan bir bağlantı ve aktarım sinyali olayları gösterir.It shows a new connection, a removed connection, and transport heartbeat events.

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 kaydetmeLogging server events to the event log

Olayları bir metin dosyası yerine olay günlüğüne kaydetmek için sharedListeners düğümündeki girişlerin değerlerini değiştirin.To log events to the event log rather than a text file, change the values for the entries in the sharedListeners node. Aşağıdaki kod, sunucu olaylarının olay günlüğüne nasıl günlüğe alınacağını gösterir:The following code shows how to log server events to the event log:

Olay günlüğüne olayları günlüğe kaydetmek için XML sunucusu koduXML server code for logging events to the event log

<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:The events are logged in the Application log, and are available through the Event Viewer, as shown below:

SignalR günlüklerini gösteren Olay Görüntüleyicisi

Note

Olay günlüğünü kullanırken, bulunan ileti sayısını korumak için TraceLevel . Error ' u ayarlayın.When using the event log, set the TraceLevel to Error to keep the number of messages manageable.

.NET istemcisinde izlemeyi etkinleştirme (Windows Masaüstü uygulamaları)Enabling tracing in the .NET client (Windows Desktop apps)

.NET istemcisi, bir TextWriteruygulamasını kullanarak olayları konsola, bir metin dosyasına veya özel bir günlüğe kaydedebilir.The .NET client can log events to the console, a text file, or to a custom log using an implementation of TextWriter.

.NET istemcisinde günlüğe kaydetmeyi etkinleştirmek için, bağlantının TraceLevel özelliğini bir Tracelevels değerine ve TraceWriter özelliğini geçerli bir TextWriter örneğine ayarlayın.To enable logging in the .NET client, set the connection's TraceLevel property to a TraceLevels value, and the TraceWriter property to a valid TextWriter instance.

Masaüstü istemci olaylarını konsola kaydetmeLogging Desktop client events to the console

Aşağıdaki C# kod, .net istemcisindeki olaylarının konsola nasıl günlüğe alınacağını gösterir:The following C# code shows how to log events in the .NET client to the console:

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 kaydetmeLogging Desktop client events to a text file

Aşağıdaki C# kod, .net istemcisindeki olayların bir metin dosyasına nasıl günlüğe alınacağını gösterir:The following C# code shows how to log events in the .NET client to a text file:

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 çıktıda, yukarıdaki yapılandırma dosyası kullanılarak bir uygulama için ClientLog.txt dosyasındaki girişler gösterilmektedir.The following output shows entries from the ClientLog.txt file for an application using the above configuration file. Sunucuya bağlanan istemciyi ve addMessageadlı bir istemci yöntemini çağıran hub 'ı gösterir:It shows the client connecting to the server, and the hub invoking a client method called 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!"]}]})

Windows Phone 8 istemcilerde izlemeyi etkinleştirmeEnabling tracing in Windows Phone 8 clients

Windows Phone uygulamalar için SignalR uygulamaları, masaüstü uygulamaları ile aynı .NET istemcisini kullanır, ancak Console. out ve StreamWriter ile bir dosyaya yazma kullanılamaz.SignalR applications for Windows Phone apps use the same .NET client as desktop apps, but Console.Out and writing to a file with StreamWriter are not available. Bunun yerine, izleme için özel bir TextWriter uygulamasının oluşturulması gerekir.Instead, you need to create a custom implementation of TextWriter for tracing.

İstemci olaylarını Windows Phone Kullanıcı arabirimine kaydetmeLogging Windows Phone client events to the UI

SignalR kod temeli , TextBlockWriteradlı özel bir TextWriter uygulamasını kullanarak, izleme çıkışını bir TextBlock öğesine yazan Windows Phone bir örnek içerir.The SignalR codebase includes a Windows Phone sample that writes trace output to a TextBlock using a custom TextWriter implementation called TextBlockWriter. Bu sınıf, Samples/Microsoft. Aspnet. SignalR. Client. WP8. Samples projesinde bulunabilir.This class can be found in the samples/Microsoft.AspNet.SignalR.Client.WP8.Samples project. Bir TextBlockWriterörneği oluştururken geçerli SynchronizationContextiçinde geçirin ve izleme çıktısı için kullanılacak bir TextBlock oluşturacak bir StackPanel oluşturun:When creating an instance of TextBlockWriter, pass in the current SynchronizationContext, and a StackPanel where it will create a TextBlock to use for trace output:

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

Daha sonra, izleme çıktısı, geçirilen StackPanel içinde oluşturulan yeni bir TextBlock öğesine yazılır:The trace output will then be written to a new TextBlock created in the StackPanel you passed in:

İstemci olaylarını Windows Phone hata ayıklama konsoluna kaydetmeLogging Windows Phone client events to the debug console

Kullanıcı arabirimi yerine hata ayıklama konsoluna çıkış göndermek için, hata ayıklama penceresine yazan bir TextWriter uygulamasını oluşturun ve bunu bağlantınızın tracewriter özelliğine atayın:To send output to the debug console rather than the UI, create an implementation of TextWriter that writes to the debug window, and assign it to your connection's TraceWriter property:

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
}

İzleme bilgileri, Visual Studio 'daki hata ayıklama penceresine yazılır:Trace information will then be written to the debug window in Visual Studio:

JavaScript istemcisinde izlemeyi etkinleştirmeEnabling tracing in the JavaScript client

Bir bağlantıda istemci tarafı günlüğe kaydetmeyi etkinleştirmek için, bağlantıyı kurmak üzere start yöntemini çağırmadan önce bağlantı nesnesindeki logging özelliğini ayarlayın.To enable client-side logging on a connection, set the logging property on the connection object before you call the start method to establish the connection.

Tarayıcı konsolunda izlemeyi etkinleştirmeye yönelik istemci JavaScript kodu (oluşturulan ara sunucu ile)Client JavaScript code for enabling tracing to the browser console (with the generated proxy)

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

Tarayıcı konsolunda izlemeyi etkinleştirmeye yönelik istemci JavaScript kodu (oluşturulan proxy olmadan)Client JavaScript code for enabling tracing to the browser console (without the generated proxy)

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

İzleme etkinleştirildiğinde, JavaScript istemcisi olayları tarayıcı konsoluna kaydeder.When tracing is enabled, the JavaScript client logs events to the browser console. Tarayıcı konsoluna erişmek için bkz. aktarımları izleme.To access the browser console, see Monitoring Transports.

Aşağıdaki ekran görüntüsünde, izlemenin etkinleştirildiği bir SignalR JavaScript istemcisi gösterilmektedir.The following screenshot shows a SignalR JavaScript client with tracing enabled. Tarayıcı konsolundaki bağlantı ve hub çağırma olaylarını gösterir:It shows connection and hub invocation events in the browser console:

Tarayıcı konsolundaki SignalR izleme olayları