
Clique aqui para ler todos os artigos desta edição
Chat
Crie uma aplicação de chat com ASP.NET 2.0 – Parte 1
Callback é uma nova característica do ASP.NET 2.0 que permite receber valores do servidor Web sem renderizar novamente a página. São feitas requisições XMLHTTP ao servidor, ao invés de HTTP.
Para trabalhar com Callback é necessário conhecimento básico em JavaScript para chamar o servidor via XMLHTTP e depois receber o retorno do mesmo. Mas espera aí! Requisições XML assíncronas! Usando JavaScript! Isso é AJAX! Na verdade o AJAX é callback e não o contrário. Callback pode ser considerado uma forma artesanal de AJAX, ou até mesmo o esqueleto de todo componente AJAX.
Quando um postback normal é realizado, é executada uma requisição HTTP, que é processada de acordo com os métodos da interface IPostbackEventHandler. A classe System.Web.UI.Page implementa essa interface. O ciclo de vida da página ao executar um postback normal é mostrado na Figura 1.

Figura 1. Ciclo de vida da página ao executar um postback
Agora, quando executamos um callback, chamamos uma função JavaScript que envia uma requisição XMLHTTP assíncrona ao servidor Web e são processados os métodos da interface ICallbackEventHandler. O ciclo de vida da página ao executar um callback é mostrado na Figura 2.

Figura 2. Ciclo de vida da página ao executar um callback
O chat deste artigo será composto por uma página com uma lista de salas de bate-papo cadastradas no banco. O usuário escolhe a sala e então é aberto um popup com um frameset com três frames. Um frame lateral para listar os usuários, um frame inferior para enviar mensagens e um central com as mensagens dos usuários do chat. O chat também terá a opção de espiar, onde o usuário apenas visualiza as mensagens.
Criando o banco de dados
Vamos primeiro criar o banco de dados para cadastrar as salas de bate-papo e logar as mensagens do chat. Abra o SQL Server Management Studio ou utilize o IDE do Visual studio 2005 e crie um novo banco de dados chamado “DBCHAT”. Depois rode o script da Listagem 1.
Listagem 1. Script do banco
USE DBCHAT
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[CHAT](
[COD_CHAT] [int] IDENTITY(1,1) NOT NULL,
[NOM_CHAT] [varchar](100) NULL,
[DSC_CHAT] [text] NULL,
[MAX_USERS] [int] NULL,
[DAT_CHAT] [datetime] NULL
CONSTRAINT [DF_CHAT_DAT_CHAT] DEFAULT (getdate()),
CONSTRAINT [PK_CHAT] PRIMARY KEY CLUSTERED
(
[COD_CHAT] ASC
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
SET ANSI_PADDING OFF
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[CHAT_MENSAGEM](
[COD_CHAT_MENSAGEM] [int] IDENTITY(1,1) NOT NULL,
[DAT_MENSAGEM] [datetime] NULL,
[NICK_AUTOR] [varchar](1000) NULL,
[DSC_MENSAGEM] [text] NULL,
[RESERVADO] [bit] NULL,
[NICK_DESTINO_RESERVADO] [varchar](1000) NULL,
[COD_CHAT] [int] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
SET ANSI_PADDING OFF
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[SP_CHAT_SALAS_LISTAR]
AS
BEGIN
SET NOCOUNT ON;
SELECT [COD_CHAT],[NOM_CHAT],[DSC_CHAT],[MAX_USERS],
[DAT_CHAT]
FROM [dbo].[CHAT]
ORDER BY
[NOM_CHAT]
END
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[SP_CHAT_INSERIR_MENSAGEM]
@DAT_MENSAGEM DATETIME,
@NICK_AUTOR varchar(1000),@DSC_MENSAGEM text,
@RESERVADO bit,
@NICK_DESTINO_RESERVADO varchar(1000) = null,
@COD_CHAT int
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[CHAT_MENSAGEM]
([DAT_MENSAGEM],[NICK_AUTOR],[DSC_MENSAGEM],
[RESERVADO],[NICK_DESTINO_RESERVADO],[COD_CHAT])
VALUES
(@DAT_MENSAGEM,@NICK_AUTOR,@DSC_MENSAGEM,@RESERVADO,
@NICK_DESTINO_RESERVADO,@COD_CHAT)
END
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[SP_CHAT_SALAS_GET]
@COD_CHAT int
AS