Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SignalR connection error

I have a simple chat client project running using SignalR and MVC which is almost identical to the ASP.Net One (I'm just experimenting - the client code is identical). I've wired up the following to watch things as they occur:

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

The connections are working fine but I've noticed that if I shut down IIS Express and watch the console in Chrome, I see this:

//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 Questions:

How do I avoid the Error when an attempted reconnection fails?

Why doesn't SignalR continue to try and connect to IIS? I was under the impression this was the point of the technology...

EDIT: the same thing happens in FireFox too

like image 928
Rob Avatar asked May 09 '13 11:05

Rob


1 Answers

Eventually, the connection will die and stop retrying. You can have it continuously reconnect with this method from the SignalR Docs.

How to continuously reconnect

How to continuously reconnect

In some applications you might want to automatically re-establish a connection after it has been lost and the attempt to reconnect has timed out. To do that, you can call the Start method from your Closed event handler (disconnected event handler on JavaScript clients). You might want to wait a period of time before calling Start in order to avoid doing this too frequently when the server or the physical connection are unavailable. The following code sample is for a JavaScript client using the generated proxy.

$.connection.hub.disconnected(function() {
   setTimeout(function() {
       $.connection.hub.start();
   }, 5000); // Restart connection after 5 seconds.
});
like image 58
Doug Avatar answered Oct 22 '22 08:10

Doug