Quebrando o ViewState em páginas ASP.NET 2.0

Boa tarde pessoal, venho hoje fazer um post rápido e simples sobre um problema que vinha enfrentando a um bom tempo em um Sistema ASP.NET / C#. Neste Sistema temos um log de Exceptions que armazena o Stack de todo e qualquer erro ocorrido em páginas, componentes e requisições AJAX. Logo ao ativar este log, recebemos quase que diariamente diversas mensagens de erros relativos ao ViewState das páginas, falando que este estava inválido.

Após uma pesquisa mais a fundo sobre este problema descobrimos que era causado porque alguns ViewStates demasiadamente grandes não conseguiam passar pelos Proxys e Firewalls das conexões do Servidor e também de Clientes. Com a causa descoberta foi a hora de buscar uma solução, e foi ai que tivemos a idéa de quebrar o ViewState em pedaços menores para que fosse enviado aos poucos para a máquina Cliente e conseguisse sobreviver aos Proxys e Firewalls das conexões.

A primeira tentativa foi sobrescrever dois métodos da Classe Base System.Web.UI.Page que todas as páginas do Sistema estendiam, conforme exemplo abaixo:

Mas os resultados não foram muito satisfatórios, para páginas simples ASPX e UserControls o ViewState se comportava conforme planejado, mais ao realizar um POST através de UpdatePanels o ViewState que estava quebrado em partes menores causava Exception pois o ciclo não passava pelo método LoadPageState exemplificado acima.

Não satisfeitos fomos pesquisar na API do ASP.NET 2.0 e descobrimos algo surpreendente, existe uma TAG que pode ser colocada no web.config do Sistema para realizar justamente esta quebra do ViewState em partes menores sem precisar sobrescrever nada e muito menos digitar uma linha de código.

Esta TAG acima faz exatamente o que queriamos inicialmente, onde a setamos por exemplo em "40", para dizer ao Framework que quebre o ViewState a cada 40 bytes.

Segue abaixo um exemplo de ViewState convencional:

E a seguir o ViewState após ser setada a propriedade no arquivo web.config:

Bom agora só uma dica, caso seu ViewState esteja absurdamente grande é melhor seu código ser revisto pois algo está errado. Está TAG e métodos explicados aqui não servem para Otimização do ViewState, apenas para resolver um problema técnico relativo a dispositiveis de Hardware e ViewState muito longos.

Até a próxima pessoal!
Abraços, dúvidas não deixem de deixar um comentário.