asp.net mvc и веб-ферма
Учитывая характер проекта, мне нужно хранить простой объект (с 3/4 свойствами) в TempData. Это чтение с однократной записью, так что это нормально, но его нужно передавать между несколькими основными методами / действиями.
вопрос: как я могу заставить его работать с веб-фермами? Какие вещи необходимо настроить, чтобы позволить TempData работать с веб-фермой?
используя MVC 4 Razor.
благодарю вас
2 ответа
TempData хранится в сеансе. Это означает, что единственный надежный способ использовать его в веб-ферме - это иметь какой-либо сервер состояний.
Изменение ApplicationId (MachineKey) на всех серверах для обеспечения их соответствия ничего не делает для сеанса. Это означает только то, что каждый сервер может декодировать файлы cookie, оставленные другими. Сессия живет на отдельном веб-сервере в памяти.
Если у вас нет липких сеансов на вашем балансировщике нагрузки, запрос, который заполняет TempData на сервере 1, скорее всего, будет перенаправлен на сервер, отличный от самого себя, и TempData не будет заполнен (или не с теми же данными, которые были просто вставлены на сервер 1).
По умолчанию TempData реализован с использованием сеансов, поэтому это будет проблемой для фермы.
Самым простым решением было бы использовать CookieTempDataProvider