Novidades do .NET 2.0: mudanças na infra-estrutura do ASP.NET 2.0


Além de vários novos controles adicionados, as principais mudanças do ASP.NET  2.0 foram introduzidas em sua infra-estrutura. Mudanças drásticas foram feitas:

  • no modelo de codificação, no qual anteriormente havia uma relação de herança entre a página ASPX e o arquivo de código (code-behind), e agora faz uso de classes partial, ou seja, tanto a página ASPX quanto o código fazem parte da mesma classe, que são combinados em tempo de execução; isso também faz com que o arquivo code-behind fique mais claro e menor do que o modelo antigo;
  • na compilação: agora, o padrão do ASP.NET é compilar a aplicação em tempo execução. Isso implica em copiar os arquivos code-behind para o servidor. Entretanto, por questões de segurança e/ou privacidade, nem sempre podemos ou queremos enviar o código com toda nossa lógica para o servidor. Nestes casos, podemos utilizar o que foi chamado de Precompilation for Deployment, que consiste em pré-compilar o site em assemblies, que então serão copiados para o servidor. Este tipo de pré-compilação faz com que nem mesmo o código fonte de páginas ASPX fique disponível. Também foi desenvolvido um outro tipo de pré-compilação chamado In-Place Precompilation, cujo objetivo, é ganhar performance, já que não será necessária a compilação das página na primeira vez em que ela for solicitada, que é o que ocorre se não for feita a pré-compilação. Ambos os tipos de pré-compilação são feitos com o utilitário de linha de comando aspnet_compiler.exe;

Também vale citar as mudanças na estrutura do ViewState. O ViewState é uma técnica utilizada pelo ASP.NET para manter o estado de controles de uma página. Isso é feito através de um campo HIDDEN (oculto) da página chamado __VIEWSTATE e, dependendo de como fosse utilizado, poderia causar um sério problema de performance, pois seu tamanho poderia aumentar significantemente, o que aumentaria também o tamanho da página. Foram feitas alterações no formato de serialização deste campo, o que proporcionou a redução do seu tamanho em quase 50%, em um dos testes feitos.

Referências:

ASP.NET 2.0 Internals
ASP.NET Web Site Precompilation Overview
ASP.NET Page Class Overview
Speed Up Your Site with the Improved View State in ASP.NET 2.0

Ricardo Oneda

Artigo sobre Master Pages


Foi publicado, no site do grupo de usuários BrDevelopers, o primeiro de uma série de artigos que escrevi sobre as Master Pages, que é uma das novidades do ASP.NET 2.0 e que permite propagar um mesmo layout de página para toda a aplicação Web, deixando-a padronizada e facilitando a manutenção da identidade visual de uma aplicação web. Gostaria de saber as opiniões de todos:

Desvendando as Master Pages - Parte 1

Ricardo Oneda

Dica: Corrigindo problemas de acentuação em aplicações ASP.NET


Muitas vezes, encontramos problemas no desenvolvimento de aplicações ASP.NET relacionados à  exibição incorreta de letras acentuadas ou na formatação de datas e/ou valores monetários. Isso acontece porque as configurações regionais do servidor estão configuradas com a cultura/idioma diferente do que a aplicação realmente necessita, que no nosso caso é o Português do Brasil. Para resolver este problema, basta acrescentar a seguinte linha no arquivo de configuração web.config:
 

<globalization requestEncoding="iso-8859-1" responseEncoding="iso-8859-1" culture="pt-BR"/>

Este código faz com que a aplicação utilize a cultura brasileira em vez da que está definida nas configurações regionais do servidor.

Se você quiser saber mais sobre como funcionam as codificações de caracteres (ASCII, Unicode, etc), sugiro ler o seguinte artigo (muito bem humorado, por sinal):

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

Ricardo Oneda.

Dica: Melhore a navegação de sua aplicação ASP.NET com o SmartNavigation

O ASP.NET possui uma característica chamada Smart Navigation que permite uma melhor navegação em sua aplicação Web. Ela possibilita as seguintes melhorias:

- mantém a posição da página na tela e o foco no controle entre cada postback, evitando que a página volte para seu início após o retorno do servidor. Isso é especialmente útil em, por exemplo, páginas grandes de cadastros;
- evita o efeito da "piscada" da página entre os postbacks;
- impede que cada postback seja salvo na lista de histórico do browser, mantendo somente uma única entrada;

Para habilitar o Smart Navigation em uma página, basta configurar a propriedade SmartNavigation do WebForm para true. Caso deseje habilitá-lo em toda sua aplicação, adicione a tag <pages> no arquivo web.config, que deverá ficar parecido com:

<configuration>
    <system.web>
        <pages smartNavigation=”true”/>
        .....
    </system.web>
</configuration>

Mas nem tudo são flores...esta propriedade só funciona para browsers Internet Explorer 5.5 ou superior, e mesmo assim são comuns os relatos de problemas com CSS, entre outros. Mas uma aplicação web deveria rodar em qualquer plataforma, independentemente do browser e, mesmo que houvesse a dependência do browser, não deveria ocorrer erros, certo? Bem, nestes casos, existem algumas alternativas que "simulam" o comportamento da propriedade SmartNavigation através de JavaScript e HTML, que no fundo, é o que o SmartNavigation também faz, só que de forma automática (lembra que eu disse que ainda é importante saber JavaScript?). Se ficou interessado nestas alternativas, sugiro uma visita nos seguintes endereços:

How to persist the scroll position of an ASP.NET page without using SmartNavigation
Crossbrowser SmartNavigation Alternative
Crossbrowser SmartNavigation Alternative II

Ricardo Oneda.

ASP.NET x JavaScript

Com o ASP.NET ficou mais fácil e produtivo desenvolver aplicações Web, pois ele já fornece vários controles que antes tínhamos que desenvolver e com os quais gastávamos muito tempo. Além disso, o ASP.NET deixou o processo de se desenvolver uma aplicação web bem mais parecido com o processo de se desenvolver uma aplicação desktop. Isso quer dizer que podemos ignorar o JavaScript e o HTML (ou DHTML), pois só o ASP.NET e o código escrito em linguagem server-side é suficiente, certo? Quem pensa assim, não poderia estar mais enganado.

Apesar das inegáveis facilidades trazidas pelo ASP.NET, não podemos nos esquecer que o resultado do processamento do servidor web que é enviado ao browser ainda é HTML e JavaScript. Isso é o que garante (ou pelo menos deveria garantir) que a aplicação irá funcionar em qualquer browser de qualquer plataforma (Windows, Unix, Mac, etc). O que o ASP.NET faz é esconder o trabalho sujo do desenvolvedor, ou seja, o HTML e JavaScript são gerados automicamente e faz com que muitas vezes nos esqueçamos que eles ainda estão lá.

Muitas pessoas têm dificuldade (ou até mesmo não querem) em aceitar isso, principalmente aqueles que vieram do desenvolvimento de aplicações desktop e só agora, com o ASP.NET, estão tendo o primeiro contato com desenvolvimento Web.

Já muitos daqueles que desenvolviam aplicações web antes do ASP.NET reclamam que a integração com o JavaScript ficou mais complicada. Não sei se "complicada" é uma boa definição, mas com certeza é bem diferente da maneira tradicional a qual estávamos acostumados. Mas isso é questão de costume e, depois que nos adaptamos, fica bem mais fácil.

Vejo muitas pessoas reclamarem que a Microsoft deveria ter mudado isso e ter extinto o JavaScript, além de ter implementado várias outras coisas que só são possíveis com scripts client-side, como se dependesse dela ditar estes padrões! Em vez de ficarem esperando tudo e mais um pouco da Microsoft, porque não desenvolver seu próprio controle? Afinal, você pode desenvolver (ou adquirir de terceiros) um controle que atenda as suas necessidades e depois reaproveitá-lo em vários projetos. A plataforma .NET é bem flexível com relação a isso. Ela não te obriga a ficar amarrado ao que é nativo da plataforma.

Apesar de ser possível desenvolver uma aplicação web em ASP.NET sem ter nenhum conhecimento de HTML e JavaScript, você ficará muito limitado e sua aplicação deixará de ter muitas funcionalidades que só são possíveis através de scripts que rodam no cliente (neste caso, o browser). O exemplo clássico é a manipulação de janelas pop-ups e de frames.

Abaixo, seguem alguns links que mostram como trabalhar com JavaScript e ASP.NET:

Client-Side Script Integration in ASP.NET
Injecting Client-Side Script from an ASP.NET Server Control
Using JavaScript Along with ASP.NET

E agora, alguns links que tratam de JavaScript, HTML e DHTML:

Dynamic Drive HTML
HTML Code Tutorial
JavaScript Source
Doc JavaScript

Ricardo Oneda.

Dica: Configurando o IIS para reconhecer aplicações ASP.NET

Quando o .NET Framework é instalado, são configurados mapeamentos entre as extensões de arquivos (.aspx, .ascx, etc) e o filtro ISAPI do ASP.NET para que o IIS - Internet Information Service, o servidor Web da Microsoft - execute corretamente este tipo de aplicação. Se no momento da instalação do .NET Framework o IIS não tiver sido instalado ou, se por algum motivo, o IIS tiver que ser reinstalado, esses mapeamentos não serão criados e ocorrerão problemas como mensagens de erro no momento da criação de uma nova aplicação ASP.NET no Visual Studio .NET ou a não visualização de controles (textbox, radio buttons, etc.) de páginas no browser.

Para resolver este problema, basta executar a ferramenta de linha de comando aspnet_regiis.exe, também conhecida como ASP.NET IIS Registration Tool. Abra uma janela de linha de comando, digite a linha abaixo e tecle ENTER:

"%windir%\Microsoft.NET\Framework\version\aspnet_regiis.exe" -i

onde:

  • %windir% é o diretório onde foi instalado o Windows;
  • version é o número da versão do .NET Framework instalado em seu computador;
  • -i é o argumento que indica à ferramenta que os mapeamentos para o IIS devem ser criados para a versão corrente do .NET Framework;

Para saber sobre as demais opções de parâmetros desta ferramenta, execute o seguinte comando:

"%windir%\Microsoft.NET\Framework\version\aspnet_regiis.exe" -?

Ricardo Oneda.

Dica: Upload de arquivos grandes no ASP.NET

O ASP.NET limita o tamanho de arquivos para upload em até 4096 KB (ou 4 MB). Para aumentar este limite, devemos incluir o elemento <httpRuntime> da seguinte maneira no arquivo web.config da aplicação:

<configuration>
   <system.web>
      <httpRuntime  maxRequestLength="8192"/>
       ...


O valor do atributo maxRequestLength indica o tamanho máximo do arquivo em KB. Caso se deseje alterar este valor para todas as aplicações do servidor, o parâmetro deverá ser alterado no arquivo machine.config

Ricardo Oneda.