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
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.
É
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.
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.
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.
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.
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.
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:
- 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
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