Можно ли перехватить событие разрыва соединения signalR? Ошибка: соединение разорвано с ошибкой webSocket закрыт с кодом состояния: 1006 - PullRequest
2 голосов
/ 09 апреля 2019

Я использую signalR v.1.1.2 https://github.com/aspnet/SignalR#readme (да, довольно устарел) Я успешно инициализировал и установил соединение signalR. Через несколько минут соединение обрывается, и я получил эту назойливую, нерешительную ошибку, зарегистрированную в консоли, вызванную внутренними библиотеками signalR.

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

Моя цель - поймать эту ошибку с соответствующим прослушивателем событий и немедленно восстановить соединение или уведомить пользователя с помощью модального всплывающего окна подключения. Я просто не могу поймать событие закрытия сигнализатора. Я скучаю по чему-то?

Я так отчаялся, что написал около 20 способов поймать это, но ни один из них не помог мне. Я уверен, что эти методы связаны с объектом подключения, который я настроил и запустил. Кстати, страница документации signalR о жизненных циклах соединения, у меня тоже не работает https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/handling-connection-lifetime-events#how-to-notify-the-user-about-disconnections

Любая помощь или совет приветствуются. Заранее спасибо.

Ни одна из этих работ:

  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")
})```

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Итак, через пару часов мы решили нашу проблему.
То, что мы сделали, это связали события «закрыть, отключить ...» с синтаксисом .on, соответствующим документации.

Однако то, что у нас сработало, явно объявило событие .onclose, привязанное к connectionHub'sобъект соединения, так что эта функция успешно сработала при ошибке через внутреннюю библиотеку http-соединений signalR.

connection.connection.onclose = (error) => {
  console.log(error)
}
1 голос
/ 09 апреля 2019

Настоятельно рекомендую подойти как минимум до версии 2.x.Это может быть частью того, почему эта новая документация вам не помогает.

Вы можете увидеть мой ответ здесь, на SO .

По сути, это позволит вам перехватить событие отключения, при желании вызвать модальное окно (вам придется его кодировать), а затем через 5 секунд восстановить соединение.

...