2015-10-26 3 views
0

У нас есть веб-приложение ASP.NET, которое также выполняет некоторые уведомления о сигнале. Поскольку SignalR не может обращаться к состояниям сеанса ASP.NET, нам нужен другой способ проверить, что они являются клиентом, зарегистрированным в веб-приложении.Доступ ко всем текущим состояниям сеанса ASP.NET

В большинстве ситуаций вы могли бы подумать, что статический словарь поможет. До тех пор, пока один из контроллеров ASP.NET не задержит кеш ключевой информации клиента (через информацию IP/браузера или какой-то сгенерированный токен клиент отправляет сигнал позже) - пока это было сделано, тогда SignalR может подтвердить подключение клиента перед добавлением его в пул.

Однако мы работаем в ситуации серверной фермы, при этом SessionState поддерживается SQL. Это означает, что данный экземпляр сервера, даже если он имел статический кеш всех своих клиентов, не может знать о клиенте C. Конечно, если Клиент C сделал обычный веб-запрос, он будет узнать о Клиенте C, когда он извлекает SessionState. Таким образом, вопрос заключается в том, что IF-работа передается второму экземпляру сервера (Machine B) только в правильное/неправильное время, когда Machine B не знает о клиенте C (кроме как через зависящую от контекста выборку SessionState, недоступную из SignalR) , КАК мы можем проверить клиента на стороне SignalR?

Все, что потребуется, - это статические средства для получения ВСЕХ клиентов, или просто «статического» контекста для SessionState (то есть состояния сеанса сервера). Потому что в любом случае мы могли бы просеять отдельные клиентские SessionStates и проверить «да, у этого клиента было состояние сеанса на предыдущей машине».

Есть ли другой способ, кроме как перезагрузить страницу, чтобы ASP.NEt мог «кэшировать» свою информацию локально? Это единственный способ, который я вижу до сих пор.

ответ

0

Я думаю, что это идеальный сценарий для «объединительной платы SignalR», он разработан для ситуации webfarm для Scaleout SignalR. Вы можете найти множество статей.

Смежные вопросы