Методы смягчения изменений в дереве управления состоянием просмотра при развертывании на сайте с высоким трафиком - PullRequest
3 голосов
/ 02 апреля 2012

Я помогаю в разработке веб-приложения с относительно высоким трафиком, использующего ASP.NET WebForms. Хотя наше представление viewstate относительно невелико, в настоящее время оно нам требуется.

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

Полная ошибка, конечно:

Не удалось загрузить viewstate. Дерево управления, в которое загружается состояние просмотра, должно соответствовать дереву управления, которое использовалось для сохранения состояния просмотра во время предыдущего запроса. Например, при динамическом добавлении элементов управления элементы, добавленные во время обратной передачи, должны соответствовать типу и расположению элементов управления, добавленных во время первоначального запроса.

Естественно, это очень расстраивает наших пользователей. На данный момент мы стараемся:

  1. Минимизация изменений на главной странице (по крайней мере, изменений, связанных с серверными элементами управления)
  2. Развертывание в периоды низкого трафика

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

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

1 Ответ

1 голос
/ 14 апреля 2012

Что я сделал для чего-то похожего: я отключил Viewstate и создал скрытое поле на главной странице, которое зашифровало guid, дату и время. Я использовал этот guid, дату и время для ссылки на некоторые значения в общем кэше.

Данные были небольшими и временными, и их не нужно было хранить очень долго. И в зависимости от объема и того, как долго вы можете хранить эти данные в кэше, также можно увидеть, как долго люди «держатся» за страницы.

Существует множество решений с открытым исходным кодом для общего кэша, специально настроенных для этого типа роли.

...