У меня такая же проблема, и я проверил проводную акулу, но от моего концентратора до моего клиента нет исходящего трафика. Поведение в обратном направлении идет правильно!
До сих пор я не мог установить решение, но будет держать вас в курсе, просто хотел поделиться своими выводами.
Добавлена трассировка на концентратор и клиент и заметили, что концентратор закрывает соединение, но клиент этого не делает. Из логфайл Hub:
SignalR.Transports.TransportHeartBeat Verbose: 0 : d1992c3d-fbec-43e6-9662-b3e94af39418 is dead
SignalR.Transports.TransportHeartBeat Information: 0 : Removing connection d1992c3d-fbec-43e6-9662-b3e94af39418
И в протоколирования на клиенте продолжает использовать то же самое соединение
02:34:36.3191340 - d1992c3d-fbec-43e6-9662-b3e94af39418 - OnMessage({"I":"232"})
Hover там раньше были регулярные сообщения следующего типа, которые больше не является послал.
02:34:35.2053710 - d1992c3d-fbec-43e6-9662-b3e94af39418 - LP: OnMessage({"C":"d-7D145E50-B,18|N,5|O,1","M":[]})
02:34:35.2073150 - d1992c3d-fbec-43e6-9662-b3e94af39418 - LP Poll: http://172.16.2.101:8074/signalr/poll?clientProtocol=1.4&transport=longPolling&connectionData= ...
с этой страницы Signal R on the wire я узнал, что { «я»: «232»} сообщение означает, что: Пустота метод сервера был успешно завершен.
Что является правильным, поскольку я могу видеть обновления, поскольку они обрабатываются в концентраторе. Но когда я вызываю метод на том же идентификаторе соединения, ничего не происходит. И это не странно, поскольку Хаб считал, что связь мертва!
Итак, почему соединение отключено на концентраторе для исходящих сообщений, но концентратор все еще способен обрабатывать входящие сообщения из этого соединения?
Дополнительные данные: Here отмечается, что «на стороне клиента поддерживать проверка не используется в течение длительного избирательного транспорта», и я нашел ссылку here, что это действительно отключен по умолчанию и последний комментарий по этому вопросу «... перестает получать сообщения, поступающие с сервера ...»
Если я правильно понимаю, мы поддерживаем поддержку клиента, установив: GlobalHost.Configuration.KeepAlive
И мы установили это, так почему же клиент не обнаруживает смерть соединения!
Вы видите новое соединение, которое создается? Поскольку это звучит как новый, существует клиент, который использует для входящего трафика, но Invoke по-прежнему использует старое мертвое соединение. –
Клиент по-прежнему использует старое соединение, в концентраторе есть OnDisconnected, но никогда не новый OnConnected или OnReconnected. Однако мне кажется странным, что концентратор отвечает на входящие сообщения с «я», но считает, что соединение мертво. Просто нашел это, что кажется таким же, но был закрыт в вехе 2.1.2, и мы используем версию 2.2: [Проблема 3259] (https://github.com/SignalR/SignalR/issues/3259) Процесс пересоединения никогда не срабатывает на стороне клиента и прекращает получать любое сообщение, поступающее с сервера – Boscabouter