Почему сайт интрасети НЕ кэширует значения формы, а тот же сайт, развернутый в Интернете, кэширует?

У меня есть форма на странице ASPX, которая сохраняет и сохраняет содержимое после отправки, чтобы его можно было снова клонировать с небольшими изменениями в некоторых полях. Эта функция создана для экономии времени ввода данных.

Эта функция «Сохранить форму и сохранить содержимое» отлично работает, когда она работает в настройках интрасети. Однако, когда этот сайт размещен в Интернете для общего доступа, форма ведет себя непоследовательно.

Отправка формы работает нормально несколько раз (это число постоянно меняется) - она ​​сохраняет значения формы и сохраняет то же содержимое, но позже случайным образом показывает значения из предыдущих записей данных.

Например, в форме из 5 полей для хранения информации о продукте я могу изменить только заголовок. В первый раз, если я заполню значение «Продукт 1» для поля заголовка, оно сохранит его и продолжит отображать те же значения поля. Продолжая этот процесс, когда я пытаюсь изменить заголовок на «Продукт 5», он может не сохранить эту запись и показать «Продукт 3» вместо сохранения «Продукта 5», как ожидалось.

Это как-то связано с некоторым ограничением размера ViewState или некоторыми настройками кэша IIS или из-за того, что он развернут на ферме? Может ли кто-нибудь объяснить, почему форма на сайте, которая работает в Интранете, не работает так же, когда она опубликована как сайт в Интернете?


person Yella    schedule 17.05.2012    source источник
comment
Вы сохраняете и загружаете значения в элементы управления на стороне сервера? какое событие?   -  person Imran Rizvi    schedule 17.05.2012
comment
Основываясь на описанном вами поведении, я бы сказал, что это из-за фермы. Можете ли вы дать нам некоторые подробности, как вы сохраняете данные формы? Кроме того: ваше последнее предложение кажется противоположным названию вашего вопроса.   -  person Mike Guthrie    schedule 17.05.2012
comment
@Imran Rizvi После сохранения значений формы пользователь перенаправляется на ту же страницу, но значения формы не очищаются, поэтому ранее введенные значения остаются там, где они есть.   -  person Yella    schedule 17.05.2012
comment
@GuthMD Значения формы намеренно не очищаются, поэтому ранее введенные значения остаются там, где они есть. Вы правы и извините за путаницу - заголовок должен быть: Почему сайт интрасети НЕ кэширует значения форм, а тот же сайт, развернутый в Интернете, делает? Я посмотрю, смогу ли я отредактировать это сейчас   -  person Yella    schedule 17.05.2012
comment
Вы говорите, что пользователь перенаправляется на ту же страницу. Это фактическое перенаправление или обратная передача?   -  person KennyZ    schedule 17.05.2012
comment
Если это обратная передача, ViewState должен сохранять значения без какого-либо кода. Не могли бы вы опубликовать код для функций «Сохранить форму» и «Сохранить содержимое»?   -  person KennyZ    schedule 17.05.2012
comment
@KennyZ Да, ViewState сохраняет значения. Сохранить форму и сохранить код содержимого — это обычный код ADO.NET, который просто сохраняет значения формы в БД.   -  person Yella    schedule 17.05.2012


Ответы (1)


Если вы используете для этого состояние сеанса и приложение развернуто в ферме с балансировкой нагрузки, вам необходимо настроить состояние сеанса для использования SQL Server.

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

Вот пример из web.config, как показано в MSDN:

<configuration>
  <system.web>
    <sessionState mode="SQLServer"
      sqlConnectionString="Integrated Security=SSPI;data 
        source=SampleSqlServer;" />
  </system.web>
</configuration>

РЕДАКТИРОВАТЬ: Итак, вы не используете состояние сеанса и не касаетесь значений в любом месте кода. Остается только какое-то странное кэширование. Возможно, ферма серверов имеет настройки кэша, которые не совпадают от машины к машине... только так я могу увидеть, что вы получите описанное вами поведение.

Возможно, вы сможете переопределить настройки кэша machine.config в файле web.config. Пытаться:

<system.web>
   <httpRuntime enableKernelModeCache="false"/>
</system.web>
person KennyZ    schedule 17.05.2012
comment
Спасибо за ваш ответ, но я не использую состояние сеанса - person Yella; 17.05.2012