Несоответствия с viewstate / функцией / сервером по сравнению с сервером разработки
Вопрос
Код выглядит примерно так:
protected bool IsOKToSend()
{
bool IsOK = true;
lblErrorSending.Visible = false;
if (txtUserName.Text == "" )
{
lblErrorSending.Text = "Please enter your username before sending.";
IsOK = false;
}
return IsOK;
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
if (IsOKToSend())
{
adsUser.Insert();
Response.Redirect("complete.aspx");
}
else
{
lblErrorSending.Visible = true;
}
}
По какой-то причине это не работает стабильно на реальном сервере.Имейте в виду, что это ВСЕГДА работает на моей локальной машине разработки и ИНОГДА (примерно 1 из 3 попыток) работает на живой машине.Когда происходит сбой на реальном сервере страница перезагружается, и все viewstate теряются.
У меня есть ошибка по умолчанию в моем файле webconfig, и страница никогда не перенаправляется на страницу с ошибкой .
Последовательные ошибки легко устраняются, но что-то вроде этого - нет.
Есть идеи о том, что могло бы заставить эту страницу когда-то работать, а когда-то нет и / или почему состояние просмотра не сохраняется, когда оно не работает?Почему я не сталкиваюсь с такой же проблемой на своем локальном компьютере?
Я попытался объединить две функции, чтобы посмотреть, был ли причиной вызов внешней функции проблема, но, к сожалению, это ничего не изменило.Кроме того, значение isOk, похоже, не влияет на то, получу ли я ошибку или нет.
Я удалил весь код из функции загрузки страницы, чтобы убедиться в устранении неполадок корректно, но я все еще получаю ту же проблему.
Любая идея будет оценена по достоинству.
Редактировать:Я собирался отправить это как есть, но я решил попробовать следующее:
protected void btnSubmit_Click(object sender, EventArgs e)
{
bool IsOK = true;
lblErrorSending.Visible = false;
if (txtUserName.Text == "" )
{
lblErrorSending.Text = "Please enter your username before sending.";
IsOK = false;
}
lblErrorSending.Visible = !IsOK;
}
Если я нажму несколько раз на кнопку, страница потеряет значение viewstate после нескольких попыток, но не всегда.Так вот главный вопрос, как представляется, проблема с отображение не работает правильно все время.Есть какие-нибудь идеи?
Спасибо.
Решение
Здесь я сделаю смелое предположение и скажу, что вы не используете sticky sessions в производстве и у вас есть несколько веб-серверов.Но в стадии разработки у вас есть только один сервер.Вы используете балансировку нагрузки, и время от времени вас переводят на другой сервер с другим machinekey в вашем maching.config.Приложение взрывается.
Или это вообще не то.:)
Если это проблема, вы можете отключить viewstate или синхронизировать ключи в вашем machine.config, и проблема должна исчезнуть.