ASP.NET Tutorial 4
Olá a todos, hoje vamos falar de comunicação entre cliente e servidor numa aplicação ASP.NET. Comunicação essa que pode ser feita de duas maneiras, síncrona ou assincronamente, ou seja, vamos começar a entrar no mundo do Ajax.
Ajax?
O Ajax permite que a comunicação entre o cliente e o servidor seja feita sem interrupções no browser e sem o total PostBack da página ao servidor, o que melhora e muito a experiencia de utilização do nosso site.
A primeira aplicação no mundo a utilizar Ajax foi o Exchange Webmail da Microsoft, para tornar a aplicação Web o mais semelhante possível á aplicação Windows.
Depois veio a era Google e de todas as suas aplicações totalmente criadas com recurso ao Ajax, Gmail, Google Docs e até a simples sugestão na caixa de pesquisa da Google.
Neste momento podemos afirmar que a ideia de aplicações Web totalmente dependentes do servidor são coisa de 1995, neste momento está a ser cada vez mais usado o Ajax. Quem ganha com isso é a Web, aplicações mais interactivas e dando a sensação de ser uma aplicação Desktop.
Ajax ou AJAX?
Ao lerem livros ou pesquisas na Net vão encontrar muito estas duas nomenclaturas, porquê?
O nome original e globalmente utilizado desta tecnologia é Ajax.
A versão AJAX pertence á Microsoft, porque os rapazes de Redmond para ajudar os programadores de .NET criaram API’S para ser mais fácil utilizar Ajax em aplicações ASP.NET.
AJAX tem duas vertentes, servidor e cliente:
- A vertente servidor é para ser o mais simples possível de implementar utilizando controlos criados pela Microsoft (AJAX Control Toolkit) que permitem criar um site com suporte Ajax em poucos minutos.
Os principais controlos são o ScriptManager e o UpdatePanel que permite fazer partial postbacks do conteúdo que envolve.
- A vertente cliente é a que permite mais controlo e que mais se assemelha ao Ajax. (O futuro)
Comunicação cliente – servidor (vice-versa)
Para comunicar do cliente para o servidor existem duas maneiras:
Sem Ajax:
Qualquer controlo que faça PostBack para o servidor comunica do cliente para o servidor.
O ponto negativo é que a página tem de ir para o servidor e ser novamente renderizada, tudo isto causa impactos na performance, tráfego de rede e claro é uma má experiencia para o utilizador pois o browser faz refresh e fica todo branco.
Com Ajax:
Com Ajax o caso muda de figura, só enviamos para o servidor o que realmente precisa de ir e de forma assíncrona actualizamos o nosso browser sem que o cliente veja páginas a piscar.
Os métodos mais comuns:
- XMLHttpRequest: É um objecto da DOM que é invocado por Javascript ou outra linguagem de cliente (Jquery) e que envia um http request para o servidor e carrega a resposta directamente para a linguagem cliente. Como a resposta é enviada e recebida pelo cliente tudo isto é feito para que o cliente não faça nenhum PostBack. Essa resposta pode vir em texto ou XML. Foi graças a esta implementação que temos hoje o Ajax.
- PageMethods: Utilizados em conjunto com o ScriptManager, são uma maneira simples de implementar uma chamada ao Servidor de forma assíncrona criada pela Microsoft. Tem o mesmo funcionamento de um WebService.
- UpdatePanel: É um objecto criado pela Microsoft que permite simular chamadas assíncronas ao Servidor. É um PostBack camuflado, se forem programadores experientes aconselho a não o utilizarem.
- WebServices: Com as novas ferramentas (AJAX, Jquery) é muito simples chamar WebServices do lado do cliente.
ClientScript e ScriptManager:
Estes dois objectos disponibilizados pela Framework AJAX permitem chamar código de cliente do lado do Servidor, por exemplo:
ClientScript.RegisterClientScriptBlock(this.GetType(), "teste", "alert('Estou no servidor');", true);
Esta linha iria mostrar uma mensagem no nosso browser.
O ScriptManager tem as mesmas funções que o ClientScript mas é utilizado se o nosso controlo estiver dentro de um UpdatePanel.
Utilização
Vamos então fazer uns exemplos das tecnologias acima mencionadas (á excepção de Jquery, vamos ter um tutorial só sobre isso)
- XMLHttpRequest:
Adicionamos um botão
<input id="Button2" type="button" value="Teste XMLHttpRequest" onclick="TesteXmlHttpRequest();" />
Este botão vai chamar uma função JavaScript “TesteXmlHttpRequest();”
Esta função faz um pedido XMLHttpRequest a um Handler http que vai ao servidor e retorna uma mensagem com o numero de cliques que foram passados como querystring.
- PageMethods:
Adicionamos novamente um botão
<input id="Button3" type="button" value="Teste PageMethods" onclick="TestePageMethods();" />
Este botão chama uma função JavaScript "TestePageMethods();"
Esta função chama um método PageMethods.RetornaPageMethod.
Este método está definido no código c# (Code Behind)
Como vêem este método tem o atributo [WebMethod], o que lhe permite ser chamado através de código cliente (Javascript), quem faz com que tudo isto aconteça é o objecto ScriptManager no qual indicamos EnablePageMethods="true".
O método é simples
PageMethods.RetornaPageMethod(cliquesPM, oncompletePM);
Recebe um inteiro que são os cliques e como é assincrono tem de ter uma função de retorno que se chama “oncompletePM”.
- UpdatePanel:
Este é o caso mais simples de todos, a Microsoft realmente fez um excelente trabalho neste objecto, mas, se forem experientes aconselho não o utilizarem.
O que fazemos é adicionar um UpdatePanel e dentro dele abrir uma tag ContentTemplate onde vamos colocar o nosso botão e uma TextBox.
Ao clicar no botão vamos ao servidor e actualizamos a TextBox com a hora do servidor, tudo isto sem fazer refresh á página.
- WebServices:
Criamos um WebService (.asmx) por defeito vêm com o método HelloWorld, o qual vamos aproveitar.
Uma nota importante para o WebService funcionar tem de ter o atributo [System.Web.Script.Services.ScriptService]
Na nossa página temos de adicionar ao ScriptManager a tag “Services” e ServiceReference dando ao valor do “Path” o local do nosso WebService.
Adicionamos um botão, que irá chamar a função
“esteWebService();”.
Para chamar o WebService temo de fazê-lo desta maneira “Namespace.Nome Webservice.Método” fica assim:
WebApplication1.WebService1.HelloWorld(cliquesWS,completoWebservice);
Novamente passamos a variável de cliques e a função de retorno.
O resultado final da nossa aplicação
Download: ASP.NET - Tutorial 04 [24.24KB]
Este artigo tem mais de um ano
Já fiz esta pergunta nos outros posts mas ninguém me respondeu vou tentar novamente:
Fui a esta página http://www.microsoft.com/exPress/download/ mas não sei qual o visual studio adequado… Alguém me ajuda?
Cumprimentos.
Pedro,
Para estes tutoriais recomendo o Visual Studio Web Developer Express 2008 (SP1) em C#.
Cumprimentos,
Henrique Graça
Obrigado e parabéns pelo tutorial… Espero que continue!
Cumprimentos.
Olá,
@ Henrique Graça muito bom tutorial.
Espero que continues com a rubrica que certamente dará jeito a muita gente.
Cumps
Obrigado Luís,
Espero que realmente esteja a atingir muita gente.
Como vês nesta altura teve 250 visitas mas só 2 comentários.
Não se acanhem, perguntem, discutam… 🙂
Cumprimentos,
Henrique Graça
Porque não aconselhas a usar um UpdatePanel?
Rui,
Não aconselho a programadores mais experientes.
O UpdatePanel é realmente um controlo magnifico mas devido à facilidade de utilização trás menos performance e mais tráfego de rede, porque é apenas um PostBack “simulado”.
Se vires o HttpRequest com um programa de debug (firebug ou fiddler) vês que o que ele envia é praticamente todo o html do controlo e o viewstate, para além de teres de passar por todos os ciclos da página novamente.
Portanto se fores um programador mais experiente e adoras performance aconselho a não utilizar, por outro lado se preferes fazer tudo do lado do servidor é excelente.
Cumprimentos,
Henrique Graça
Antes de mais parabéns pelo tutorial.
Gostaria de dize que à alguns anos que o uso o ajax e uso com reularidade o update panel. Por considar ser a uma boa opção no que diz respeito ao tempo de desenvolvimento e à facilidade de manutenção (aspecto por vezes desvalorizao), principalmente quando a página tem muitos controlos e uma dinâmica complexa. Tem sem dúvida alguma penalização na performance, primcipalmente devido ao faco de a informação que é enviado ao servidor ser é quase a mesma do que um postabck normal. Além de que o fazer o debug do lado do servidor também é mais fácil.
Jorge,
Obrigado.
Sim tens razão em termos de tempo (que é o principal factor de um trabalho) o UpdatePanel é uma excelente opção e manutenção não tem nenhuma.
O outro lado da moeda é a performance e o controlo sobre o que estamos a fazer.
No meu local de trabalho que serve milhões de Portugueses era impossível utilizar um UpdatePanel, os servidores não aguentariam tantos pedidos e tanto tráfego, tem de ser tudo reduzido ao mínimo para isso utilizamos Ajax “puro” e JSON.
São duas maneiras interessantes de trabalhar com Ajax em ASP.NET, ainda bem que temos tantas opções.
Ainda irei falar aqui do que está para vir no ASP.NET AJAX 4, vai ser muito bom…
Cumprimentos
Henrique Graça
eu não percebo patavina desta temática mas não posso deixar de te congratular por partilhares este conhecimento com os leitores.
seguramente que é algo que dá trabalho e embora possa ter poucos leitores é provavelmente mais valorizado do que muitos outros artigos com imensos comentários.
obrigado e continua 😉
Bruno,
muito obrigado. São poucos mas bons 🙂
Cumprimentos,
Henrique Graça
Queria dar os parabéns a quem toma a iniciativa de fazer tutoriais neste blog. São bastante úteis e ainda para mais em PT. Já agora gostaria de saber se alguém sabe de uma ferramenta para desenvolver esta linguagem em ambiente MAC OSX.
Cumprimentos. Continuem com o bom trabalho.
Parabéns Henrique!
Tutoriais dignos de uma vénia! 🙂
Continua!