SignalR İzlemeyi Etkinleştirme

Tom FitzMacken tarafından

Warning

Bu belge, SignalR 'nin en son sürümü için değildir. ASP.NET Core SignalR'ye göz atın.

Bu belgede, SignalR sunucuları ve istemcileri için izlemenin nasıl etkinleştirileceği ve yapılandırılacağı açıklanmaktadır. İzleme, SignalR uygulamanızda olaylarla ilgili tanılama bilgilerini görüntülemenize olanak sağlar.

Bu konu, ilk başta Patrick Fleti tarafından yazılmıştır.

Öğreticide kullanılan yazılım sürümleri

Sorular ve açıklamalar

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. Öğreticiyle doğrudan ilgili olmayan sorularınız varsa, bunları ASP.NET SignalR forumuna veya StackOverflow.com'e gönderebilirsiniz.

İzleme etkinleştirildiğinde, bir SignalR uygulaması olaylar için günlük girişleri oluşturur. Olayları hem istemciden hem de sunucudan günlüğe kaydedebilirsiniz. Sunucu günlüğü bağlantısı, genişleme sağlayıcısı ve ileti veri yolu olaylarını izleme. İstemci üzerindeki izleme, bağlantı olaylarını günlüğe kaydeder. SignalR 2,1 ve üzeri sürümlerde, istemci üzerindeki izleme, hub çağırma iletilerinin tam içeriğini günlüğe kaydeder.

İçindekiler

Sunucuda izlemeyi etkinleştirme

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. 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.

Sunucu olay kategorileri aşağıdaki ileti türlerini içerir:

Kaynak İletiler
SignalR. SqlMessageBus SQL Ileti veri yolu genişleme sağlayıcısı kurulumu, veritabanı işlemi, hata ve zaman aşımı olayları
SignalR. ServiceBusMessageBus Service Bus genişleme sağlayıcısı konu oluşturma ve abonelik, hata ve mesajlaşma olayları
SignalR. RedisMessageBus Redsıs genişleme sağlayıcı bağlantısı, bağlantı kesilmesi ve hata olayları
SignalR. ScaleoutMessageBus Genişleme mesajlaşma olayları
SignalR. taşımalar. WebSocketTransport WebSocket aktarım bağlantısı, bağlantı kesilmesi, mesajlaşma ve hata olayları
SignalR. taşımalar. ServerSentEventsTransport ServerSentEvents aktarım bağlantısı, bağlantı kesme, mesajlaşma ve hata olayları
SignalR. taşımalar. ForeverFrameTransport ForeverFrame aktarım bağlantısı, bağlantı kesilmesi, mesajlaşma ve hata olayları
SignalR.Transports.LongPollingTransport Uzun Gplipop aktarım bağlantısı, bağlantı kesilmesi, mesajlaşma ve hata olayları
SignalR. taşımalar. TransportHeartBeat Aktarım bağlantısı, bağlantı kesilmesi ve KeepAlive olayları
SignalR. ReflectedHubDescriptorProvider Merkez bulma olayları

Sunucu olaylarını metin dosyalarına kaydetme

Aşağıdaki kod, her olay kategorisi için izlemenin nasıl etkinleştirileceğini gösterir. Bu örnek, uygulamayı metin dosyalarına olayları günlüğe kaydetmek üzere yapılandırır.

İzlemeyi etkinleştirmek için XML sunucusu 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 girdisi, belirtilen günlüğe gönderilen olaylar için TraceLevel kullanılan öğesini belirtir. Bu durumda, tüm hata ayıklama ve izleme iletilerinin kaydedildiği Verbose olarak ayarlanır.

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. Yeni bir bağlantı, kaldırılan bir bağlantı ve aktarım sinyali olayları 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 sharedListeners düğümündeki girişlerin değerlerini değiştirin. Aşağıdaki kod, sunucu olaylarının olay günlüğüne nasıl günlüğe alınacağını gösterir:

Olay günlüğüne olayları günlüğe kaydetmek için XML sunucusu 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

Note

Olay günlüğünü kullanırken, bulunan ileti sayısını korumak için TraceLevel . Error ' u ayarlayın.

.NET istemcisinde izlemeyi etkinleştirme (Windows Masaüstü uygulamaları)

.NET istemcisi, bir TextWriteruygulamasını kullanarak olayları konsola, bir 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 bir Tracelevels değerine ve TraceWriter özelliğini geçerli bir TextWriter örneğine ayarlayın.

Masaüstü istemci olaylarını konsola kaydetme

Aşağıdaki C# kod, .net istemcisindeki olaylarının konsola nasıl günlüğe alınacağını 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# kod, .net istemcisindeki olayların bir metin dosyasına nasıl günlüğe alınacağını 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 çıktıda, yukarıdaki yapılandırma dosyası kullanılarak bir uygulama için ClientLog.txt dosyasındaki girişler gösterilmektedir. Sunucuya bağlanan istemciyi ve addMessageadlı bir 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 istemcilerde izlemeyi etkinleştirme

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. Bunun yerine, izleme için özel bir TextWriter uygulamasının oluşturulması gerekir.

İstemci olaylarını Windows Phone Kullanıcı arabirimine kaydetme

SignalR kod temeli , TextBlockWriteradlı özel bir TextWriter uygulamasını kullanarak, izleme çıkışını bir TextBlock öğesine yazan Windows Phone bir örnek içerir. Bu sınıf, Samples/Microsoft. Aspnet. SignalR. Client. WP8. Samples projesinde bulunabilir. 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:

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:

İstemci olaylarını Windows Phone hata ayıklama konsoluna kaydetme

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:

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:

JavaScript istemcisinde izlemeyi etkinleştirme

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.

Tarayıcı konsolunda izlemeyi etkinleştirmeye yönelik istemci JavaScript kodu (oluşturulan ara sunucu ile)

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

Tarayıcı konsolunda izlemeyi etkinleştirmeye yönelik istemci JavaScript kodu (oluşturulan proxy olmadan)

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

İzleme etkinleştirildiğinde, JavaScript istemcisi olayları tarayıcı konsoluna kaydeder. Tarayıcı konsoluna erişmek için bkz. aktarımları izleme.

Aşağıdaki ekran görüntüsünde, izlemenin etkinleştirildiği bir SignalR JavaScript istemcisi gösterilmektedir. Tarayıcı konsolundaki bağlantı ve hub çağırma olaylarını gösterir:

Tarayıcı konsolundaki SignalR izleme olayları