asp.net mvc и веб-ферма

учитывая характер проекта, мне нужно сохранить простой объект (с 3/4 свойствами) в TempData. Это однократное чтение и однократная запись, так что это нормально, но его необходимо передать между несколькими основными методами/действиями.

вопрос: как я могу заставить его работать с веб-фермами? Что нужно настроить, чтобы TempData работал с веб-фермой?

с использованием MVC 4 Razor.

Спасибо


person Ahmed ilyas    schedule 05.09.2013    source источник


Ответы (2)


По умолчанию TempData реализуется с использованием сеансов, поэтому на ферме это может стать проблемой.

Самым простым решением было бы использовать CookieTempDataProvider.

person Cloud SME    schedule 05.09.2013
comment
Спасибо. Конечно, это один из вариантов, но что, если cookie отключен для пользователя, заходящего на сайт? Кроме того, я считаю, что это было бы немного перфомансом, поэтому я хочу попытаться избежать этого. У меня сложилось впечатление, что вы можете заставить его работать, убедившись, что все машинные ключи на веб-ферме одинаковы (поскольку это трюк, используемый с ASP.NET и состоянием сеанса) - person Ahmed ilyas; 05.09.2013
comment
Если вы уже используете сеансы вне процесса в каком-то центральном хранилище сеансов, проблем не возникнет. Причина использования файлов cookie заключается в том, что вы не хотите использовать сеансы. - person Cloud SME; 05.09.2013
comment
хорошо... значит, нет другого способа без использования файла cookie для хранения временных данных и обеспечения его работы в веб-ферме? - person Ahmed ilyas; 05.09.2013
comment
Из вашего ответа до сих пор не ясно, будет ли TempData работать при изменении идентификатора приложения для соответствия всем веб-серверам в ферме в IIS, а также при условии, что ключ компьютера одинаков во всех файлах web.config? - person Ahmed ilyas; 06.09.2013

TempData хранится в сеансе. Это означает, что единственный надежный способ использовать его в веб-ферме — это иметь какой-либо сервер состояний.

Изменение ApplicationId (MachineKey) на всех серверах, чтобы они совпадали, ничего не делает для сеанса. Это означает только то, что каждый сервер может декодировать файлы cookie, оставленные другими. Сессия живет на отдельном веб-сервере в памяти.

Если у вас нет закрепленных сеансов на вашем балансировщике нагрузки, запрос, который заполняет TempData на сервере 1, скорее всего, будет перенаправляться на сервер, отличный от него самого, и TempData не будет заполняться (или не теми же данными, которые были только что помещены на сервер). сервер 1).

person Wbmstrmjb    schedule 27.08.2014