5

私は SignalR と MVC を使用して実行している単純なチャット クライアント プロジェクトを持っています。これはASP.Net Oneとほぼ同じです (実験中です - クライアント コードは同じです)。私は次のように配線して、物事が発生するのを監視しました。

$.connection.hub.stateChanged(function(state){console.log(state)});

接続は正常に機能していますが、IIS Express をシャットダウンして Chrome でコンソールを見ると、次のように表示されることに気付きました。

//As you would expect the state goes from connected to connecting
Object {oldState: 1, newState: 2}

//Then it times out after about 30 secs and throws this awesomeness at the console
WebSocket connection to 'ws://localhost:61623/signalr?transport=webSockets&connectionToken=VDF640emz7PFMToC6vxle_5-7QS5dZMszV4SPbQO7EFEmSSsITnwKsZreqfl4MGq8TXitG2xB5F-2ZdHp-2t3shPzN2hemTY1ZmEWlB8NOn5orUVexaSoARk9XjEO5B00&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D&messageId=B%2C7%7CL%2C0%7CM%2C0%7CN%2C0&tid=0' failed: WebSocket is closed before the connection is established. jquery.signalR-1.0.1.js:1117

//Reconnecting to Disconnecting - so why the error above?
Object {oldState: 2, newState: 4} 

//Then radio silence if I start IIS again...

2 つの質問:

再接続の試行が失敗したときのエラーを回避するにはどうすればよいですか?

SignalR が引き続き IIS への接続を試みないのはなぜですか? これがテクノロジーの要点であるという印象を受けました...

編集:FireFoxでも同じことが起こります

4

1 に答える 1

12

最終的に、接続が切断され、再試行が停止します。SignalR ドキュメントのこのメソッドを使用して、継続的に再接続することができます。

継続的に再接続する方法

継続的に再接続する方法

一部のアプリケーションでは、接続が失われ、再接続の試行がタイムアウトになった後に、接続を自動的に再確立したい場合があります。これを行うには、Closed イベント ハンドラー (JavaScript クライアントの切断されたイベント ハンドラー) から Start メソッドを呼び出すことができます。サーバーまたは物理接続が使用できないときに Start を頻繁に呼び出すのを避けるために、Start を呼び出す前に一定時間待機することをお勧めします。次のコード サンプルは、生成されたプロキシを使用する JavaScript クライアント用です。

$.connection.hub.disconnected(function() {
   setTimeout(function() {
       $.connection.hub.start();
   }, 5000); // Restart connection after 5 seconds.
});
于 2013-07-01T04:28:13.567 に答える