Inconsistências com viewstate / função / servidor vs servidor de desenvolvimento
Pergunta
O código é algo como isto:
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;
}
}
Por algum motivo ele não funciona de forma consistente no servidor ao vivo. Tenha em mente que ele sempre funciona na minha máquina de desenvolvimento local e às vezes (Cerca de 1 em cada 3 tentativas) trabalha na máquina ao vivo. Quando ele falha no servidor ao vivo recarrega a página e tudo viewstate são perdidas.
Eu tenho um prendedor de erro padrão no meu arquivo webconfig ea página nunca é redirecionado para a página de erro.
bug consistente são fáceis de solucionar problemas, mas algo assim não é.
Qualquer ideia sobre o que poderia tornar esta página sometime funciona e às vezes não, e / ou por o viewstate não são mantidos quando ele falhar ao trabalho? Por que não estou recebendo o mesmo problema na minha máquina local?
Eu tentei fundir os dois função para ver se chamar a função externa estava causando a questão, mas isso não muda nada, infelizmente. Além disso, o valor de Isok não parece influenciar se eu vou conseguir o bug ou não.
Eu removi todo o código na função de carregamento da página para se certificar de solução de problemas corretamente, mas ainda estou recebendo o mesmo problema.
Qualquer idéia será apreciado.
Edit: Eu ia enviar este como é, mas eu decidi tentar o seguinte:
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;
}
Se eu clicar algumas vezes no botão na página perde o valor viewstate depois de algumas tentativas, mas nem sempre. Assim, a questão principal aqui parece ser um problema com o viewstate não funcionando corretamente o tempo todo. Alguma idéia?
Graças.
Solução
Vou tomar um palpite aqui e dizer que você não está usando sessões persistentes na produção e você tiver vários servidores web. Mas no desenvolvimento você tem apenas um servidor. Você está usando o balanceamento de carga e de vez em quando você vai ser chutado para um servidor diferente com uma machinekey diferente em sua maching.config. App faz boom.
Ou isso não é de todo. :)
Se for o problema, você pode desativar o viewstate ou sincronizar as chaves no seu machine.config eo problema deve ir embora.