Использование /signalr/ping call при использовании длинного опроса

Я использую длинный опрос с SignalR. Я обнаружил, что пользовательский сеанс заканчивается (вызывается ASP.NET Session_End) сразу после того, как веб-страница на основе singalr отправляет запрос / signar / ping ( как показано на этом снимке экрана). Я прошел через http://www.asp.net/signalr/overview/signalr-20/hubs-api/handling-connection-lifetime-events но не смог найти четких ответов на следующие вопросы.

  1. Как сохранить сеанс пользователя ASP.net живым с веб-страницы клиента сигнализатора?
  2. Какова реальная цель / пинг?
  3. Настраивается ли время для этого вызова / пинга?

1 ответ

Решение

Основная цель запроса /signalr/ping - поддерживать сеансы ASP.NET живыми. Посылая запросы на регулярном интервале, меньшем, чем время ожидания сеанса, время сеанса никогда не должно истекать, поскольку сервер должен сбрасывать время ожидания для каждого запроса.

В случае транспорта с длинным опросом это, вероятно, не нужно, поскольку SignalR будет инициировать новый длинный опрос, по крайней мере, каждые 110 секунд с учетом конфигурации по умолчанию. Несмотря на это, SignalR будет отправлять запрос ping каждые 5 минут по умолчанию, независимо от того, какой транспорт используется. Этот 5-минутный интервал достаточно мал, чтобы соответствовать стандартному 20-минутному тайм-ауту ASP.NET.

Вы можете изменить 5-минутный интервал пинга на пользовательское значение в вашем вызове $.connection.hub.start вот так:

// Configure SignalR to ping the server every minute
$.connection.hub.start({ pingInterval: 60000 })//...

По умолчанию pingInterval 300000 миллисекунд (5 минут). Вы можете отключить пинг, установив pingInterval к нулю.

Другие вопросы по тегам