ASP.NET SignalRは、ASP.NET 開発者向けのライブラリで、アプリケーションにリアルタイムのウェブ機能を追加するプロセスを簡素化します。 リアルタイムウェブ機能とは、サーバーコードがコンテンツが利用可能になった直後に接続されたクライアントにプッシュできる機能であり、サーバーがクライアントの新しいデータ要求を待つ必要がなくなります。
ASP .NET SignalRはASP .NETのクラスライブラリであり、ASP .NETのウェブプロジェクトでリアルタイム通信を実現できます(つまり、クライアント(ウェブページ)とサーバー側がリアルタイムで通知し、メソッドを呼び出すことができます。SignalRには3つの伝送モードがあります:LongLooping(長いポーリング)、WebSocket(HTML5 WEBソケット)、Forever Frame( フレームを隠す長いリクエスト接続は、WEBクライアントで明示的に指定することも、デフォルトが採用されている場合はデフォルトで(推奨)できます。SignalRはブラウザの環境に基づいて自動的に適切な送信方法を選択します。
ウェブサイトのデータ読み込みが遅いため、データパケットが大きすぎてネットワークリクエストが適切であり、「ws」が空であることが判明し、さらにSignalRがwebsocketプロトコルを使用していないことが判明します。
ローカルでデバッグしたところ、ウェブサイトは通常WSプロトコルを使えることが分かりました。つまり、Websocketと通常通り通信でき、サーバーとローカルネットワークのリクエストの違いを観察できることがわかりました。そして、以下の通りでした。
URL:http://ip/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22positionvehiclehub%22%7D%5D&_=1555578162378
地元の:
{"Url":"/signalr","ConnectionToken":"iX0gmz3XDJpQ62b6eiWK16Quaf+LFlD5aHw1k2oC6dKPz7naDuFmc0M7+xiR72ZjJDuNnMvfZyZF72qJK/4g6FOKAsY5C0uCfViOBXPRJVMBczOXTyCKcztIcugmcBq8" ,"ConnectionId":"50598ad3-b138-458c-a58d-b4f84d23c0e0","KeepAliveTimeout":20.0,"DisconnectTimeout":30.0,"ConnectionTimeout":110.0,"TryWebSockets":true," ProtocolVersion":"1.5","TransportConnectTimeout":5.0,"LongPollDelay":0.0} サーバー:
{"Url":"/signalr","ConnectionToken":"4JbNUOp5/ju8Fljn29tCsFoTitZXk3XfF3tkuc/OYpaEQPawJHi3U1nTtjcJJzK4mVsOn9nAEECZj7h5732aV7tNJDgsasCon9uQwhqXZC5EAZPrAgASueApAjBCpPpE" ,"ConnectionId":"c46e67b1-4fb4-4345-983f-bf2c391d33e0","KeepAliveTimeout":20.0,"DisconnectTimeout":30.0,"ConnectionTimeout":110.0,"TryWebSockets":false," ProtocolVersion":"1.5","TransportConnectTimeout":5.0,"LongPollDelay":0.0} 一部のパラメータは元々ローカルやサーバーのものとは異なっていて、それを見つけましたTryWebSocketsパラメータ、localはtrue、serverはfalseです。
情報を確認すると、SignalRがWebSocketプロトコルを使用している場合、以下の条件を満たす必要があることがわかります。
- ASP.NET 4.5
- IIS 8.0(Windows Server 2012 または Windows 8)
- サーバー上でWebSockets機能が有効になっています
- ブラウザWebSocketsのサポート
これは、サーバー上のIISバージョンが7.5であることを確認しました。WebSocketプロトコルはIIS 7.5ではサポートされていません。
参考リンク:ハイパーリンクのログインが見えます。
|