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

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:

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

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ı addMessageistemci 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 TextBlockWriteroluş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:

Ekranda çıkışı olan bir Windows Phone örneğini gösteren ekran görüntüsü.

İ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:

Çıkış iletişim kutusunu gösteren ekran görüntüsü. Hata ayıklama, Çıkışı göster alanındadı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:

Tarayıcı konsolunda SignalR izleme olayları