Esse artigo faz parte da revista Clube Delphi Edição 70. Clique aqui para ler todos os artigos desta edição

 

Atenção: por essa edição ser muito antiga não há arquivo pdf para download desta revista. os artigos disponíveis somente em doc.

 

Delphi + Aiax.NET

Otimizando o tráfego HTTP com chamadas assíncronas e
Callbacks em aplicações ASP.NET

Conforme já foi dito em outros artigos da ClubeDelphi, para desenvolver para Web é necessário quebrar paradigmas. Um deles é que um WebForm (ASP.NET) é limitado e não possui tantos recursos quanto um formulário tradicional (TForm da VCL). Ajax surge como uma opção para enriquecer as interfaces via Web e melhorar a usabilidade das páginas, deixando-as mais responsivas.

O funcionamento do protocolo HTTP é chamado de request/response, isto é, a cada ação do usuário (dique por ex.), uma requisição é enviada ao servidor e após uma espera, outra página HTML é devolvida ao browser (ou seja, há refresh total da página). Esse ciclo "dique, espera, atualiza página" é demorado, consome banda
e é pouco eficiente. E se pudéssemos atualizar apenas as partes da página onde de fato houve modificações? Ajax faz isso e também permite que o usuário continue interagindo com a página enquanto uma requisição paralela está em andamento.

Neste artigo veremos como são implementadas requisições síncronas e assíncronas usando a biblioteca Ajax. NET e como as páginas podem ser atualizadas sem efetuar postback (execução do método Submit do formulário da página).

Uma roupagem nova para tecnologias já conhecidas

O acrônimo Ajax significa Asynchronous Javascript + XML e consiste na combinação do objeto XmlHttpRequest com JavaScript e XML para envio e recebimento de informações sem a necessidade de se efetuar postback. Com ele é possível fazer requisições em background e atualizar a tela de modo transparente para o usuário, assemelhando-se a uma aplicação desktop.

O termo Ajax foi cunhado por Jesse James Garrett da empresa Adaptive Path (www.adaptivepath.com), mas o objeto XmlHttp Requestjá existia no Internet Explorer desde sua versão 5 como um componente ActiveX. Outros browsers já possuem uma implementação nativa desse objeto.

Ajax.Net

Ajax Net é uma biblioteca open source para .Net Framework que visa simplificar a programação com Ajax. Baixe-a no endereço: ajax.schwarz-interactive.de. No site existem duas versões: Ajax.Net e Ajax.Net Professional. Usaremos a primeira versão. Veja na Figura 1 a ilustração de uma solução Ajax.

No lado cliente uma função JavaScript cria um objeto XMLHTTP Request e faz uma

Requisição de dados ao servidor. No lado servidor um HttpHandler recebe a requisição, chama um dos métodos marcados com o atributo [AjaxMethodAttribute] e serializa o objeto de retorno usando JSON (JavaScript Object Notation). No cliente, a string JSON é transformada novamente em objeto, a função de callback é chamada e alguma parte da página é atualizada. Isso acontece de maneira transparente para o usuário.

Neste artigo, para ver como o Ajax funciona na prática, vamos criar uma aplicação simples com dois controles HtmlTextBox,onde iremos digitar no primeiro controle e uma descrição aparecerá no segundo.

Adicionando Ajax.dll ao projeto

No Delphi 2005 ou 2006 crie uma nova ASP.NET Web Apliication e salve-a como "DemoAjax" No Project Manager dê um dique de direita e escolha Add Reference (Figura 2). No editor, dique em Browse, localize o arquivo Ajax.dll e dique em OK. Adicione Ajax na cláusula uses da unit.

Editando o Web.Config

No Project Manager dê um duplo dique no arquivo Web.Config e insira o código a seguir dentro da tag system.web:

    ajax/*.ashx"

     type="Ajax.PageHand1erFactory, Ajax" />

 

Figura 1. Ilustração de uma solução Ajax baseada na imagem obtida de
www.adaptivepath.com

 

Figura 2. Adição de ajax.dll ao projeto

A seção httpHandlers do web.config permite configurar mapeamentos entre as requisições HTML e as classes do projeto que implementam a interface IHttpHandler. No exemplo anterior estamos definindo que todas as requisições de arquivos .ashx feitas através dos métodos POST ou GET serão tratadas pela classe Ajax. PageHandlerFactory. Para exemplificar, pode-se fazer uma analogia
entre HttpHandlers e as associações de extensões de arquivos no Windows Explorer, onde cada extensão é aberta por um programa específico.A pasta ajax informada no atributo path não existe fisicamente e serve apenas para evitar conflito com outros HttpHandlers que possam existir na aplicação.
 

Programação no lado Servidor

Dê um duplo dique no WebForm e no Page_Load digite:

Ajax.Utility.RegisterTypeForAjax(typeof(TMebForm1));

Essa função vai inserir as seguintes linhas no HTML em tempo de execução:

...

Quer ler esse conteúdo completo? Tenha acesso completo