2005-08-25 - RPC em ASP.NET com exemplo(chat)

25 de agosto

RPC em ASP.NET com exemplo(chat)

Olá
amigos... Uma dúvida frequente que respondo o caso do RPC(Remote
Procedule Calls)... vou tentar explicar como funciona e dar um exemplo
prático para que vocês entendam



  • O que é RPC?


RPC
significa Remote Procedule Calls e serve para fazer chamadas ao
servidor e retornar apenas os dados que queremos. claro que eu poderia
dar uma explicação kilométrica, mas simplificando, é isto e nos resolve
o problema do postback.



  • O que é PostBack?



PostBack é aquela atualização que ocorre em páginas da internet, no
nosso caso ASP.NET, que é "necessária" para buscar os dados do servidor
e é uma das maiores chatices da programação web, além de tirar o foco
do controle atual normalmente move a scrollbar para o topo da página e
algumas vezes até nos faz perder dados valiosos.



  • Como resolver isto?

Tem
várias formas de resolver isto, você pode usar um programa como o java
para criar applets que consultam o servidor para retornar os dados,
pode usar o flash que também nos permite isto ou algum outro meio como
parar de programar em asp.net
, mas a opção mais viável por não precisar de nenhum software adicional
no client e funcionar em todos os browsers (pelo menos nos que prestam)
é o RPC usando iframes.



  • O que são iframes?


iframe e uma tag de html e seve para abrir um espaço dentro de uma página html para que outra página seja aberta.



  • Como funciona o RPC usando iframe?

É
bem simples... teremos um iframe oculto(mas precisa ter alguns
parâmetros definidos como as bordas, caso contrário alguns browsers
podem ignorá-lo), quando digo oculto quero dizer que terá largura e
altura zerados...

e no momento que quisermos buscar os dados alteramos o src do iframe e
isto fará com que o iframe carregue a página que passarmos, mas ao
invés de uma página o que será carregado vai ser um script em
javascript para atualizar a página que a chamou. para isto usaremos o
document.parent.



  • Vamos ao exemplo prático?


É
verdade... posso explicar muito, mas sem prática vai ser difícil para
alguns entenderem o que é e pra que serve esse tal de RPC com
iframes... então vou fazer a rotina mais requisitada dos ultimos dias
em asp.net... um chat.


para nosso
exemplo usei o VWD2005 beta2 que pode ser encontrado gratuitamente em
http://lab.msdn.com/express (pelo menos até hoje).


mas vcs podem usar qualquer tipo de editor asp.net que o resultado será o mesmo.
também estou usando visualbasic.net para nosso exemplo.



  • então para nosso exemplo inicie um novo projeto no VWD2005 beta2

  • Crie um módulo, ele vai armazenar uma variável
    global em nossa aplicação que servirá como banco de dados do nosso
    chat... na verdade só ela é necessária...


    • para isto clique em file->new file... e digite ModChat.vb depois substitua o conteúdo do arquivo pelo código abaixo:


Imports Microsoft.VisualBasic

Public Module ModChat

Public TextoChat As String


End Module





  • crie um novo webform clicando em file->new file... e selecionando "web form" (altere o nome pra Chat.aspx)



  • altere o código para o que se segue e execute o
    projeto, no código estão as explicações das funções... estude-o e vai
    entender.... use a criatividade e fará maravilhas com isto.

  • Me ofereça um bom emprego, estou precisando.

INICIO DO CODIGO



<%@ Page Language="VB" ValidateRequest="false" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">


<script runat="server">
' Criado por Glaudiston Gomes da Silva
' demonstrando o potencial do RPC via iframe
' para maiores informações glaudiston@hotmail.com
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
If Not Request.Params("RPC_campo") Is Nothing Then

' Estamos sendo chamados via RPC...
' neste caso vamos retornar apenas o necessário

ModChat.TextoChat &= Now.ToString + " - " + Request.UserHostAddress
+ " disse: " + Request.Params("RPC_campo") & "<BR/>" '
Soma o texto na variável do chat



'Agora basta retornar o valor para a tag no formulario q chamou(owner)


Response.Write("<SCR" + "IPT>") ' crio o script separando a
string pra enganar a IDE do VWD2005


Response.Write("window.parent.document.getElementById('" &
div1.UniqueID & "').innerHTML='" & TextoChat.Replace("'", """")
& "'") ' Atualizo o conteúdo do chat por esta instrução de script


Response.Write("</SCR" + "IPT>") ' Fecho o script
Response.End() ' Processa o RPC
End If

Button1.Attributes.Add("onclick",
"document.getElementById('iframeRPC').src='Chat.aspx?RPC_campo='+document.getElementById('"
& TextBox1.UniqueID & "').value")


' cria um iframe para processar o RPC

Response.Write("<iframe id=""iframeRPC"" style=""BORDER-RIGHT: 0px;
BORDER-TOP: 0px; BORDER-LEFT: 0px; WIDTH: 0px; BORDER-BOTTOM: 0px;
HEIGHT: 0px""></iframe>")

' Agora vamos vazer o script pra enviar uma mensagem automática a cada 5 segundos
' pra isto vamos criar um segundo iframe pra não ter perigo de interferir
' no outro processo

' cria um iframe para processar o RPC

Response.Write("<iframe id=""iframeRPC1"" style=""BORDER-RIGHT: 0px;
BORDER-TOP: 0px; BORDER-LEFT: 0px; WIDTH: 0px; BORDER-BOTTOM: 0px;
HEIGHT: 0px""></iframe>")

Response.Write("<SCR" + "IPT>")
Response.Write("function AutoTimer()")

Response.Write("{")

Response.Write("
document.getElementById('iframeRPC').src='Chat.aspx?RPC_campo=Auto-Mensagem
chamada por: " & Request.UserHostAddress & "';")

Response.Write(" setTimeout('AutoTimer()',5000)")
Response.Write("}")
Response.Write("setTimeout('AutoTimer()',5000)")

Response.Write("</SCR" + "IPT>")
End Sub

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
ModChat.TextoChat = ""
End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">


<table height="100%" width="100%" style="overflow: scroll">
<tr>
<td height="90%">

<DIV ID="div1" runat="server" style="overflow: scroll; position:
static; height: 500px" >


Text="Digite seu texto e clique em enviar." </DIV>


</td>
</tr>
<tr>
<td style="height: 2px">

<asp:TextBox ID="TextBox1" runat="server" Width="537px">Digite
seu texto aki</asp:TextBox>



<input type=button ID="Button1" runat="server" value="Enviar" />


<asp:Button ID="Button2" runat="server" OnClick="Button2_Click"
Text="Reseta texto do chat" /></td>

</tr>
</table>
</form>

</body>
</html>



FIM DO CODIGO



É
eu sei... não é um chat completo... mas minha esposa está me chamando,
e eu tenho que atendê-la afinal já é de madrugada... e eu não preciso
desta rotina rodando 100%......
mas a parte difícil está ai... e com um pouco de esforço qualquer
programador consegue fazer um excelente chat com este código.


Espero ter ajudado

Precisando não se acanhem: glaudiston@hotmail.com

Abraços pessoal.


Comentários

Postagens mais visitadas