4

I'm using signalR v.1.1.2 https://github.com/aspnet/SignalR#readme (yes, pretty outdated) I've successfully initialized and started signalR connection. After a few minutes, connection drops and i got this annoying, hesitant error logged in the console, triggered from signalR's internal libraries.

Error: Connection disconnected with error 'Error: WebSocket closed with status code: 1006 ()'

My aim is catch this error w/ proper event listener and reconnect immediately or notify user w/ retry connection modal popup. I just cant catch signalr close event. Am i missing sth?

I'm so desperate that i wrote like 20 methods to catch this, but none of them worked for me. I'm sure these methods are bound to connection entity that i set up and run. Btw signalR documentation page about connection lifecycles, dont work for me either https://learn.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/handling-connection-lifetime-events#how-to-notify-the-user-about-disconnections

Any help or advice is welcome. Thanks in advance.

None of these work:

  console.log("disconnected inline cb")
})

connection.connectionSlow((resp) => {
  console.log("connectionSlow inline cb")
})

connection.onclose((resp) => {
  console.log("onclose inline cb")
})

connection.close((resp) => {
  console.log("close inline cb")
})

connection.on('Disconnected', (resp) => {
  console.log("camelCase Disconnected inline cb")
})

connection.on('ConnectionSlow', (resp) => {
  console.log("camelCase ConnectionSlow inline cb")
})

connection.on('OnClose', (resp) => {
  console.log("camelCase OnClose inline cb")
})

connection.on('Close', (resp) => {
  console.log("camelCase Close inline cb")
})

connection.on('disconnected', (resp) => {
  console.log("lowercase Disconnected inline cb")
})

connection.on('connectionSlow', (resp) => {
  console.log("lowercase ConnectionSlow inline cb")
})

connection.on('connectionslow', (resp) => {
  console.log("lowercase 2 Connectionslow inline cb")
})

connection.on('close', (resp) => {
  console.log("lowercase close inline cb")
})

connection.on('onClose', (resp) => {
  console.log("lowercase OnClose inline cb")
})

connection.on('onclose', (resp) => {
  console.log("lowercase 2 Onclose inline cb")
})

connection.connection.disconnected((resp) => {
  console.log("connection.connection disconnected inline cb")
})

connection.connection.onclose((resp) => {
  console.log("connection.connection onclose inline cb")
})

connection.connection.connectionSlow((resp) => {
  console.log("connection.connection connectionSlow inline cb")
})

connection.connection.close((resp) => {
  console.log("connection.connection close inline cb")
})

connection.connection.on('close', (resp) => {
  console.log("connection.connection lowercase close cb")
})

connection.connection.on('Close', (resp) => {
  console.log("connection.connection camelcase close cb")
})

connection.connection.on('disconnected', (resp) => {
  console.log("connection.connection disconnected inline cb")
})

connection.connection.on('onclose', (resp) => {
  console.log("connection.connection onclose inline cb")
})

connection.connection.on('onClose', (resp) => {
  console.log("connection.connection lowercase onclose inline cb")
})

connection.connection.on('connectionSlow', (resp) => {
  console.log("connection.connection lowercase connectionSlow inline cb")
})
connection.connection.on('connectionslow', (resp) => {
  console.log("connection.connection lowercase2 connectionSlow inline cb")
})

connection.connection.on('Disconnected', (resp) => {
  console.log("connection.connection camelCase disconnected inline cb")
})

connection.connection.on('OnClose', (resp) => {
  console.log("connection.connection camelCase onclose inline cb")
})

connection.connection.on('ConnectionSlow', (resp) => {
  console.log("connection.connection camelCase connectionSlow inline cb")
})```
Emre Çamaşuvi
  • 123
  • 3
  • 9

2 Answers2

2

So after a couple of hours, we've resolved our issue.
What we did was to bind "close, disconnect..." events with .on syntax proper to the documentation.

However what worked for us, is explicitly declaring .onclose event bounded to connectionHub's connection object so that this function is successfully triggered on error, via signalR internal http connection library.

connection.connection.onclose = (error) => {
  console.log(error)
}
Emre Çamaşuvi
  • 123
  • 3
  • 9
1

Highly recommend you come up to at least v2.x. This may be part in why that newer documentation is not helping you.

You can see my answer here on SO.

Essentially that will let you catch a disconnect event, pop up a modal if you wish (you will have to code that) and then reconnect after 5 seconds.

Frank M
  • 1,379
  • 9
  • 18