SignalR トレースを有効にするEnabling SignalR Tracing

によってTom FitzMackenby Tom FitzMacken

Note

この記事では、ASP.NET SignalR を指します。This article refers to ASP.NET SignalR. SignalR を使用して、Java、Node.js、またはサーバーレス シナリオでは、リアルタイムのシナリオを有効にする方法と思う場合を見てASP.NET Core SignalRします。If you're thinking about using SignalR to enable real-time scenarios with Java, Node.js, or in a serverless scenario, take a look at ASP.NET Core SignalR. 既に ASP.NET SignalR を使用した場合を見て、のバージョンの違いバージョンの違いと ASP.NET Core SignalR での機能強化を理解するページ。If you've already used ASP.NET SignalR, take a look at the version differences page to understand the differences in the versions and the improvements in ASP.NET Core SignalR. 最後に、Microsoft Azure でリアルタイム アプリを実行することがわかっている場合を見て、 Azure SignalR サービスなど、アプリを必要とすると、クラウド ベースのスケール アウトを提供します。Finally, if you know you'll be running your real-time apps in Microsoft Azure, take a look at the Azure SignalR Service, as it provides cloud-based scale-out once your apps need it.

このドキュメントでは、有効にして、SignalR のサーバーとクライアントのトレースを構成する方法について説明します。This document describes how to enable and configure tracing for SignalR servers and clients. トレースでは、SignalR アプリケーションでのイベントに関する診断情報を表示することができます。Tracing enables you to view diagnostic information about events in your SignalR application.

このトピックでは、Patrick Fletcher によって作成当初されました。This topic was originally written by Patrick Fletcher.

このチュートリアルで使用されるソフトウェアのバージョンSoftware versions used in the tutorial

意見やご質問Questions and comments

このチュートリアルの良い点に関するフィードバックや、ページ下部にあるコメントで改善できる点をお知らせください。Please leave feedback on how you liked this tutorial and what we could improve in the comments at the bottom of the page. チュートリアルに直接関係のない質問がある場合は、ASP.NET SignalR フォーラムまたはStackOverflow.comにて投稿してください。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.

トレースが有効にすると、SignalR アプリケーションは、イベントのログ エントリを作成します。When tracing is enabled, a SignalR application creates log entries for events. クライアントとサーバーの両方からイベントを記録することができます。You can log events from both the client and the server. サーバー ログの接続、スケール アウトのプロバイダー、およびメッセージ バスのイベントをトレースしています。Tracing on the server logs connection, scaleout provider, and message bus events. クライアント ログの接続イベントをトレースしています。Tracing on the client logs connection events. SignalR 2.1 以降では、クライアントのトレースはハブ呼び出しメッセージの完全な内容を記録します。In SignalR 2.1 and later, tracing on the client logs the full content of hub invocation messages.

目次Contents

サーバーのトレースを有効にします。Enabling tracing on the server

アプリケーションの構成ファイル (App.config または Web.config プロジェクトの種類に応じてのいずれかです。) 内でサーバーのトレースを有効にします。ログに記録するイベントのカテゴリを指定するとします。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. 構成ファイルで指定することも、イベントをテキスト ファイルや、Windows イベント ログの実装を使用して、カスタム ログに記録するかどうかTraceListenerします。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.

サーバーのイベント カテゴリには、次のようなメッセージがあります。The server event categories include the following sorts of messages:

ソースSource メッセージMessages
SignalR.SqlMessageBusSignalR.SqlMessageBus SQL Message Bus スケール アウトのプロバイダーのセットアップ、データベースの操作、エラー、およびタイムアウト イベントSQL Message Bus scaleout provider setup, database operation, error, and timeout events
SignalR.ServiceBusMessageBusSignalR.ServiceBusMessageBus Service bus スケール アウト プロバイダーのトピックで作成し、サブスクリプション、エラー、およびメッセージングのイベントService bus scaleout provider topic creation and subscription, error, and messaging events
SignalR.RedisMessageBusSignalR.RedisMessageBus Redis スケール アウト プロバイダーの接続、切断、およびエラー イベントRedis scaleout provider connection, disconnection, and error events
SignalR.ScaleoutMessageBusSignalR.ScaleoutMessageBus スケール アウト メッセージングのイベントScaleout messaging events
SignalR.Transports.WebSocketTransportSignalR.Transports.WebSocketTransport WebSocket トランスポートの接続、切断、メッセージング、およびエラー イベントWebSocket transport connection, disconnection, messaging, and error events
SignalR.Transports.ServerSentEventsTransportSignalR.Transports.ServerSentEventsTransport ServerSentEvents トランスポートの接続、切断、メッセージング、およびエラー イベントServerSentEvents transport connection, disconnection, messaging, and error events
SignalR.Transports.ForeverFrameTransportSignalR.Transports.ForeverFrameTransport ForeverFrame トランスポートの接続、切断、メッセージング、およびエラー イベントForeverFrame transport connection, disconnection, messaging, and error events
SignalR.Transports.LongPollingTransportSignalR.Transports.LongPollingTransport LongPolling トランスポートの接続、切断、メッセージング、およびエラー イベントLongPolling transport connection, disconnection, messaging, and error events
SignalR.Transports.TransportHeartBeatSignalR.Transports.TransportHeartBeat トランスポートの接続、切断、キープア ライブ イベントTransport connection, disconnection, and keepalive events
SignalR.ReflectedHubDescriptorProviderSignalR.ReflectedHubDescriptorProvider ハブの検出イベントHub discovery events

サーバー イベントをテキスト ファイルにログ記録Logging server events to text files

次のコードでは、各カテゴリのイベントのトレースを有効にする方法を示します。The following code shows how to enable tracing for each category of event. このサンプルでは、テキスト ファイルにイベントを記録するアプリケーションを構成します。This sample configures the application to log events to text files.

トレースを有効にするための XML サーバー コードXML 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>

上記のコードで、SignalRSwitchエントリを指定します、 TraceLevel指定されたログに送信されるイベントのために使用します。In the code above, the SignalRSwitch entry specifies the TraceLevel used for events sent to the specified log. この場合設定されてVerboseつまりすべてデバッグ出力およびメッセージをトレース ログに記録されます。In this case, it is set to Verbose which means all debugging and tracing messages are logged.

次の出力からのエントリを示しています、transports.log.txt上記の構成ファイルを使用してアプリケーションのファイル。The following output shows entries from the transports.log.txt file for an application using the above configuration file. 表示、新しい接続、削除された接続では、およびトランスポート ハートビート イベント。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)

サーバー イベントのイベント ログにログ記録Logging server events to the event log

テキスト ファイルではなく、イベント ログにイベントを記録するには、内のエントリの値を変更、sharedListenersノード。To log events to the event log rather than a text file, change the values for the entries in the sharedListeners node. 次のコードでは、サーバー イベントをイベント ログに記録する方法を示します。The following code shows how to log server events to the event log:

イベント ログにイベントのログの XML サーバー コードXML 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>

イベントは、アプリケーション ログに記録され、、次に示すように、イベント ビューアーを利用。The events are logged in the Application log, and are available through the Event Viewer, as shown below:

SignalR のログを表示するイベント ビューアー

Note

イベント ログを使用する場合は、設定、 TraceLevelエラー管理可能なメッセージの数を保持します。When using the event log, set the TraceLevel to Error to keep the number of messages manageable.

.NET クライアント (Windows デスクトップ アプリ) でのトレースを有効にします。Enabling tracing in the .NET client (Windows Desktop apps)

.NET クライアントはコンソールにテキスト ファイル、またはの実装を使用して、カスタム ログにイベントを記録できますTextWriterします。The .NET client can log events to the console, a text file, or to a custom log using an implementation of TextWriter.

.NET クライアントでのログ記録を有効にする設定、接続のTraceLevelプロパティをTraceLevels値、およびTraceWriterプロパティを有効なTextWriterインスタンス。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.

デスクトップ クライアントのイベントをコンソールにログ記録Logging Desktop client events to the console

次の c# コードでは、コンソールに .NET クライアントでイベントを記録する方法を示します。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();

デスクトップ クライアントのイベントをテキスト ファイルにログ記録Logging Desktop client events to a text file

次の c# コードでは、テキスト ファイルに .NET クライアントでイベントを記録する方法を示します。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();

次の出力からのエントリを示しています、ClientLog.txt上記の構成ファイルを使用してアプリケーションのファイル。The following output shows entries from the ClientLog.txt file for an application using the above configuration file. 表示、サーバーに接続するクライアントとクライアント メソッドを呼び出し、ハブと呼ばれるaddMessage: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 クライアントでトレースを有効にします。Enabling tracing in Windows Phone 8 clients

Windows Phone アプリ用の SignalR アプリケーションとデスクトップ アプリは、同じ .NET クライアントを使用してがConsole.Outファイルへの書き込みとStreamWriterは使用できません。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. 代わりに、カスタムの実装を作成する必要がありますTextWriterトレースします。Instead, you need to create a custom implementation of TextWriter for tracing.

UI を Windows Phone クライアント イベントのログ記録Logging Windows Phone client events to the UI

SignalR コードベーストレースに出力する Windows Phone のサンプルが含まれています、 TextBlockカスタムを使用してTextWriterという実装TextBlockWriterします。The SignalR codebase includes a Windows Phone sample that writes trace output to a TextBlock using a custom TextWriter implementation called TextBlockWriter. このクラスが記載されて、 samples/Microsoft.AspNet.SignalR.Client.WP8.Samplesプロジェクト。This class can be found in the samples/Microsoft.AspNet.SignalR.Client.WP8.Samples project. インスタンスを作成するときにTextBlockWriter、現在の渡すSynchronizationContextStackPanelは作成、 TextBlockトレースに使用するには出力: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;

新しいトレース出力を記述し、 TextBlockで作成した、 StackPanelで渡されます。The trace output will then be written to a new TextBlock created in the StackPanel you passed in:

デバッグ コンソールに Windows Phone クライアント イベントのログ記録Logging Windows Phone client events to the debug console

実装を作成、UI ではなく、デバッグ コンソールに出力を送信するTextWriterをデバッグ ウィンドウに書き込みの接続に割り当てるTraceWriterプロパティ。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
}

トレース情報は、Visual Studio でのデバッグ ウィンドウに書き込まれます。Trace information will then be written to the debug window in Visual Studio:

JavaScript クライアント内でトレースを有効にします。Enabling tracing in the JavaScript client

接続でクライアント側のログ記録を有効にするには設定、loggingを呼び出す前に、接続オブジェクトのプロパティ、startメソッドは、接続を確立します。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.

(生成されたプロキシ) を使用して、ブラウザーのコンソールへのトレースを有効にするためのクライアントの JavaScript コードClient JavaScript code for enabling tracing to the browser console (with the generated proxy)

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

(なし、生成されたプロキシ)、ブラウザーのコンソールへのトレースを有効にするためのクライアントの JavaScript コードClient JavaScript code for enabling tracing to the browser console (without the generated proxy)

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

トレースが有効にすると、JavaScript クライアントは、ブラウザーのコンソールにイベントを記録します。When tracing is enabled, the JavaScript client logs events to the browser console. ブラウザーのコンソールにアクセスするを参照してください。監視トランスポートします。To access the browser console, see Monitoring Transports.

次のスクリーン ショットは、トレースを有効に SignalR JavaScript クライアントを示します。The following screenshot shows a SignalR JavaScript client with tracing enabled. ブラウザーのコンソールで、接続とハブ呼び出しイベントを示します。It shows connection and hub invocation events in the browser console:

ブラウザーのコンソールで SignalR トレース イベント