я немного потерял...
мы используем совместное использование сеансов sqlserver и на нашем производстве (2 сервера) и промежуточном (2 сервера), я теряю один элемент только из сеансов с перерывами. И постановка и производство сбалансированы по нагрузке и на тех же серверах, но указывают на разные базы данных.
Моя локальная разработка и сайт dev (другой сервер) не имеют этой проблемы. Они оба используют базу данных dev.
Таблицы сеансов сервера Sql и sprocs специфичны для среды, поскольку они устанавливаются в базе данных dev, промежуточной или производственной базы.
Код для размещения элементов в сеансе
SessionService.AddItem(SessionKeys.LoggedInUser, user); //this is always available
SessionService.AddItem(SessionKeys.Impersonator, inhouseUser); //this is lost intermittently
public static void AddItem(string key, object value)
{
CheckSessionAvailability();
HttpContext.Current.Session[key] = value;
}
Получение элемента из сеанса:
User inhouseUser = SessionService.GetItem<User>(SessionKeys.Impersonator);
public static T GetItem<T>(string key)
{
object item = null;
CheckSessionAvailability();
item = HttpContext.Current.Session[key];
if ((item != null) && !(item is T))
{
throw new ApplicationException("Cannot convert");
}
return (T)item;
}
На нашем промежуточном сайте сбалансирован груз... мы отключили узел 2 и только сделали активным узел 1. Он работал без каких-либо проблем.
Первоначально у нас не было настойчивости на промежуточных или производственных площадках. Мы включили сохранение на основе файлов cookie на промежуточном сайте, и, пока мы проверяли, что cookie с персистентностью просматривается в браузере, моя страница по-прежнему не работала должным образом. Мы переключили балансировщик нагрузки, чтобы вместо этого использовать постоянство, основанное на клиентском IP-адресе, а затем, похоже, работали над стадией. Будет реализовывать то же самое на производстве.