Не удалось загрузить viewstate на NLB - PullRequest
3 голосов
/ 04 июля 2011

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

Проблема в том, что на рабочем сервере (2 узла на NLB) мы получаемслучайно в разных точках без корреляции мы обнаружили, не удалось загрузить состояние просмотра, дерево управления может быть другой ошибкой.Однако точно такого же кода на нашем промежуточном сервере (такая же настройка NLB, как и на производстве) такого никогда не было.

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

Я установил жестко закодированные машинные ключи в файле web.config, который используется при подготовке и производстве, а сеансы поддерживаются на MSSQL.

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

Наша веб-конфигурация здесь на pastbin: http://pastebin.com/m2kRTd0k

Ответы [ 3 ]

0 голосов
/ 14 июля 2011

Это происходит для разных браузеров? Существуют более старые версии Safari и некоторые прокси-серверы, которые усекают ViewState при передаче его обратно на сервер.

Одна вещь, которую вы, возможно, захотите попробовать разделить на две части. Вы можете сделать это, установив атрибут maxPageStateFieldLength для тега pages в вашем файле web.config. Вот пример

<pages maxPageStateFieldLength="900">

Наконец, вы можете рассмотреть возможность вообще не использовать viewState clientSide. Вот статья, в которой реализован серверный поставщик viewstate на основе SQL: http://www.codeproject.com/KB/viewstate/ViewStateProvider.aspx

0 голосов
/ 15 июля 2011

Вот несколько вещей, которые вы можете проверить:

  • Вы уверены, что отредактированные вами файлы web.config используются?Попробуйте вставить в них синтаксическую ошибку и убедитесь, что вы получили ошибку.
  • Убедитесь, что Sticky IP не настроен в вашей среде среды
  • Проверьте, что ваши среды находятся на том же уровне исправлений, возможно,одна имеет значение по умолчанию, отличное от другой.
  • Также может быть различие в сетевой инфраструктуре, где расположены 2 среды
0 голосов
/ 14 июля 2011

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

Поскольку существует так много типов вопросов (например, да / нет, на основе значений, множественный выбор, ползунки, многоуровневые раскрывающиеся списки и т. Д.), Мы должны динамически создавать форму.

Мы столкнемся с проблемами на производстве, но не с нашей средой разработки или тестирования, похожей на вас; но нашей проблемой был код. Когда мы запустили приложение в производство, было гораздо больше пользователей, которые работали с гораздо большим количеством сценариев, чем когда-либо в dev / qa.

Всякий раз, когда мы видим «не удалось загрузить viewstate», выполнение одной из этих двух вещей обычно решает проблему:

  • Создайте все элементы управления динамически только на этапе INIT. Это должно быть сделано для правильной работы ViewState без особых дополнительных размышлений. ViewState загружается после завершения INIT и сохраняет после завершения PRERENDER. Мы можем создать элементы управления уже на этапе ЗАГРУЗКИ, но в проводке могут быть нюансы. (http://msdn.microsoft.com/en-us/library/ms178472.aspx#general_page_lifecycle_stages)

  • Выключите AJAX и посмотрите, исправит ли это (обычно это виновник). Если это исправит это, тогда мы просто должны проверить, что нет никаких постов AJAX, которые заставляют страницу менять свой макет. Вызов AJAX может сделать что-то столь же простое, как сделать элемент управления невидимым, или повторно отобразить элемент управления с новым идентификатором, в результате чего следующая следующая нормальная обратная передача обнаружит изменения в дереве элементов управления. Если нам нужно сделать элементы управления невидимыми через ajax, мы просто добавим атрибут ('display', 'none'). После того, как мы закончим с изменениями, мы снова включаем AJAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...