2009-10-08 3 views
0

Итак, я сделал все возможное, чтобы свести к минимуму мое представление в моем приложении ASP.net ajax, сжатии http, отключении viewstate в скрытых полях, но хотел бы пойти дальше. Таким образом, после исследования, кажется, что существуют два подходаasp.net server side viewstate без сеансов

а) использовать 1.x путь ASP.net, который использует LoadPageStateFromPersistenceMedium

б) или использовать ASP.net 2.x путь SessionPageStatePersister

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

Так какой лучший подход к сохранению виджета на сервере зависит от сеансов?

Если это LoadPageStateFromPersistenceMedium и использует скрытые поля, то как я могу ввести скрытое поле со случайным идентификатором на страницу?

Как определить, когда пришло время очистить файлы в режиме просмотра на сервере?

+1

Если вы хотите, чтобы минимизировать состояние, вы рассмотрели ASP.NET MVC? –

ответ

0

Я думаю, вам следует серьезно рассмотреть вариант сеанса. Это оптимально для ресурсов, и даже если сеанс истекает, если ваш механизм Auth смещен до таймаута сеанса, это не проблема.

http://professionalaspnet.com/archive/2006/12/09/Move-the-ViewState-to-Session-and-eliminate-page-bloat.aspx

Как запасной вариант можно реализовать базовую страницу, которая ставит идентификатор сессии в ViewState, проверяет его на постбэка и если он отличается делает какие-то действия для восстановления.

Единственный другой вариант, который у вас есть, - это создать свой собственный PageAdapter, который использует БД или другое хранилище данных.

+0

Мы используем проверку подлинности форм, поэтому я не думаю, что она выровнена по тайм-ауту сеанса. что вы думаете о таком подходе в http://aspnet.4guysfromrolla.com/articles/011707-1.aspx , где они сделали свой собственный класс FileSystemPageStatePersister. Как вы думаете, это будет работать лучше, например, на веб-ферме? – Tuviah

+0

Просто используйте SQL Server для сохранения сеанса или используйте службу на одной машине, и она будет работать безупречно на веб-ферме. –

+0

Другая проблема заключается в том, что сеансы истекают по истечении 20 минут по умолчанию. Конечно, мы могли бы расширить его, но это потребует больше памяти. Также есть проблемы с щелчком мыши взад и вперед несколько раз, переключение между браузерами .. или удаление их файлов cookie. Я читал, что вы можете написать свой собственный PageStatePersister, который будет генерировать guid, прикрепить его к скрытому полю на странице, а затем сохранить viewstate в базу данных или файл, используя guid в качестве ключа. будет ли это лучшим подходом? – Tuviah

0

Как насчет пробовать Flesk ViewState Optimizer?

Имеет несколько вариантов, включая хранение в сессии в базе данных, и т.д.