SignalR (Azure). Определить причину, по которой пользователь отключился - PullRequest
0 голосов
/ 15 марта 2020

У нас есть служба SignalR, размещенная на Azure.

По техническим причинам нам важно поддерживать как можно более стабильную связь между клиентом и хостом. И что происходит, так это то, что с некоторыми случайными интервалами некоторые клиенты отключались. Мы знаем, что это не связано с подключением inte rnet на стороне клиента.

Итак, вопрос в том, как мы можем определить причину отключения. Наш концентратор SignalR реализует переопределения OnDisconnectedAsyn c. И этот метод имеет параметр «Exception ex c». К сожалению, каждый раз, когда он срабатывает, ex c всегда равен нулю (я надеялся найти там подробности отключения).

Дополнительные сведения: Мы используем следующие пакеты SignalR на стороне сервера: Microsoft.As pNet .SignalR (2.4.0) Microsoft. Azure .SignalR (1.0.5)

На стороне клиента мы используем «Microsoft.AspNetCore.SignalR.Client.Core» (1.1.0)

Также мы проверили и у нас достаточно ресурсов на Azure SignalR (единицы)

Вот журналы, когда пользователь отключается (происходит после OnDisconnectedAsyn c): 2020-03-15 11:38: 07.391 +00: 00 [Отладка] Microsoft.AspNetCore.SignalR.HubConnectionHandler: OnConnectedAsyn c окончание. 2020-03-15 11: 38: 07.391 +00: 00 [Отладка] Microsoft. Azure .SignalR.ServiceConnection: Отправка сообщения о закрытии соединения в службу для GFf8suySt2eMsOCLuYg0-wbb16618b1. 2020-03-15 11: 38: 07.391 +00: 00 [Debug] Microsoft.AspNetCore.Http.Connections.Client.Internal.WebSocketsTransport: получено сообщение от приложения. Размер полезной нагрузки: 36. 2020-03-15 11: 38: 07.393 +00: 00 [Debug] Microsoft.AspNetCore.Http.Connections.Client.Internal.WebSocketsTransport: Сообщение получено. Тип: Binary, размер: 37, EndOfMessage: True. 2020-03-15 11: 38: 07.393 +00: 00 [Отладка] Microsoft. Azure .SignalR.ServiceConnection: Получено 37 байт от службы 12aa875 c -a5b6-4842-8bc1-2d67e7ab30f6. 2020-03-15 11: 38: 07.393 +00: 00 [Отладка] Microsoft. Azure .SignalR.ServiceConnection: Соединение GFf8suySt2eMsOCLuYg0-wbb16618b1 завершено.

1 Ответ

1 голос
/ 31 марта 2020

Когда клиент подключен к Azure SignalR, постоянное соединение между клиентом и Azure SignalR может иногда прерываться по разным причинам. В этом разделе описываются несколько возможностей, вызывающих такое падение соединения, и даются некоторые рекомендации о том, как определить причину root.

Возможные ошибки со стороны клиента:

  • Удаленная сторона закрыла соединение WebSocket без завершения рукопожатия закрытия
  • Тайм-аут обслуживания. 30.00ms прошло без получения сообщения от службы.
  • {"type": 7, "error": "Соединение закрыто с ошибкой."}
  • {"type": 7, " ошибка ":" Внутренняя ошибка сервера. "}

Root причина:

Соединения клиента могут прерываться при различных обстоятельствах:

  • Когда Hub генерирует исключения во входящем запросе.
  • Когда соединение с сервером, на которое перенаправлен клиент, подробности об отключении соединения с сервером см. В разделе ниже.
  • Когда возникает проблема с сетевым подключением между клиентом и службой SignalR.
  • Когда у службы SignalR есть некоторые внутренние ошибки, такие как перезапуск экземпляра, отработка отказа, развертывание и т. д.

См. https://github.com/Azure/azure-signalr/blob/dev/docs/tsg.md#client - соединение капли

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...