Совместное использование списка <int>между всеми серверами в веб-ферме - PullRequest
1 голос
/ 01 апреля 2012

Я прочитал о сохранении состояния сеанса out-of-process, но все еще в памяти, настроив веб-приложение для использования поставщика, такого как StateServer

У меня есть List<int>, который содержит accountIDs, который яхотел бы быть общим для всех серверов в веб-ферме.Список - это не данные сеанса, относящиеся к какой-либо конкретной учетной записи, это глобальный список, который мне нужен в памяти (но, вероятно, вне процесса), чтобы каждый сервер в ферме мог проверять его для каждого запроса, чтобы увидеть,он содержит accountID.

Можно ли совместно использовать эти данные так же, как и состояние сеанса?Пожалуйста, не могли бы вы рассказать, как это сделать?

Это хорошее решение?Будет ли снижение производительности многих серверов, пытающихся получить доступ к одному и тому же списку?

РЕДАКТИРОВАТЬ: дополнительно в ...

В моем приложении учетные записи пользователей имеют _accountStatus , который, если установлено приостановлено , используется приложением для ограничения возможностей пользователя. _accountStatus сохраняется в специальном билете аутентификации.Проблема заключается в том, что пользователи могут оставаться в системе, они могут войти в систему сегодня, уйти и вернуться через месяц, и при этом войти в систему. Тем временем администратор сайта может заблокировать свою учетную запись, но из-за того, что _accountStatus сохраняетсяв билете аутентификации он теперь неверен, и у пользователя все еще есть доступ, которого он не должен иметь.

Поэтому, когда пользователь _accountStatus изменяется администратором, его _accountID добавлено к the list.Затем по каждому запросу список проверяется.Если учетная запись находится в списке, она должна перезагрузить ее _accountStatus из базы данных (которая всегда имеет правильное значение) и обновить билет проверки подлинности.

Так что да, возможно, сохранение списка в SQLСервер - это лучшее решение.

Еще одним решением может быть сохранение _accountStatus не в билете аутентификации, а в сеансе.Когда начинается новый сеанс, он может быть загружен.Но теперь возникает проблема, что если администратор решил приостановить учетную запись во время сеанса пользователя.Как приложение может получить доступ к сеансу для этого пользователя и обновить _accountStatus извне HttpApplication?Или между запросами пользователя, если вы понимаете, о чем я?

1 Ответ

2 голосов
/ 01 апреля 2012

Для этого нет ничего встроенного.

Для одновременного доступа на запись в такой список потребуется блокировка для согласованности данных.Пишет часто?Я надеюсь, что не потому, что это ухудшит производительность.

Я рекомендую вам сохранить этот список в SQL Server.Может быть, текстового файла в общей папке тоже достаточно.

...