Sie sind auf Seite 1von 24

Criando uma aplicao distribuda com C# .

NET,
WebServices e ADO.NET
Por Hudson Leonardo Mendes, especialista em desenvolvimento e projeto arquitetnico de
aplicaoes utilizando tecnologia .NET e Windows DNA, bem como sua integraao em ambientes
empresariais.
Introduo
O mercado corporativo descobriu, finalmente, o quanto podem se beneficiar com a
internet. Descobriram tambm que para utilizarem a internet em seu beneficio devem empregar a
tecnologia. Logo, as tecnologias comearam a, paulatinamente, dar um suporte mais robusto e
eficaz para soluoes que trabalham com a internet.
A Nicrosoft construiu a plataforma .NET pensando exatamente neste mercado. Com os
WebServices e o suporte de integraao destes servios via internet com as aplicaoes
desenvolvidas para a plataforma, podemos integrar facilmente aplicaoes distribuidas ao redor do
mundo.
Este artigo prev reproduzir de maneira simples a formataao da arquitetura de softwares
largamente utilizada em empresa no desenvolvimento de soluoes em .NET, no entanto, indicando
e reforando a utilizaao dos recursos de desenvolvimento rapido de aplicaoes de que carecem
tanto as equipes de desenvolvimento .NET empregadas hoje no mercado.
Em geral, asseguro-lhes que a utilizaao destes recursos asseguram realmente o ganho de
produtividade de desenvolvimento e aumentam em muito a simplicidade na construao de
softwares comprovadamente, pela experincia. venho aplicando este modelo vencedor em
aplicaoes ha 5 ou seis grandes projetos. Obtive bons resultados em cima dele. E agora, gostaria
de compartilhar estes conhecimentos com voc. vamos la?
A quem se destina este artigo?
Este artigo foca o ponto de vista pratico da construao da aplicaao (desenvolvimento).
Atualmente, o desenvolvimento arquitetnico de softwares em minha empresa foi padronizado e
sao poucos os softwares para o qual modifico o modelo.
Este artigo tambm carece de uma descriao geral sobre como organizar os objetos de
dados dentro dos DataSets (os objetos de dados). Assim, para complementar seus conhecimentos
do ponto de vista de arquiteto de sistemas, voc pode pesquisar em http:ffwww.msdn.com na area
destinada a arquitetos de sistemas.
Objetivo
Permitir ao desenvolvedor que esta lendo este artigo:

Compreender a construao de aplicativos utilizando objetos de dados
Compreender a construao de webservices
Conseguir integrar um webservice a uma aplicaao windows forms.
Compreender como criar facilmente webservices
Compreender como distribuir a lgica da aplicaao, levando-a para a camada de negcios
Como fazer...?
Criando nossa interface...
Abra o visual Studio .NET
Crie uma nova aplicaao do tipo windows forms, colocando-a dentro da pasta de uma nova
soluao, da seguinte maneira:


O visual Studio .NET ira abrir automaticamente o arquivo Form1.cs (form criado
automaticamente com o projeto) em seu form designer. Adicione o seguintes controles ao
seu formularo:
o Label
Name: label1
Text: Clientes
AutoSize: true
o DataGrid
Name: dataGrid1
o Button
Name: btnLoad
Text: 8Carregar
o Button
Name: btnSave
Text 8Salvar alteraoes
o Button
Name: btnEnd
Text: 8Finalizar
Disponha os controles da seguinte maneira:


Agora, vamos deixar nosso Form1 descansando enquanto criamos a parte de manipulaao
de dados de nosso software. Aponte File > Add Project > New Project...

Preparando nossa camada de negcios
Este deve ser um projeto baseado no template ASP.NET Web Services. Seu nome sera Core
e ele devera estar dentro da Pasta virtual DistribAppSample, como na figura abaixo:



Ao clicar em OK, o visual Studio .NET automaticamente cria um servio chamado
Service1.asmx que pode ser encontrado no Solution Explorer. Localique-o.
Ao localiza-lo, clique sobre ele como botao direito e renomeie-o para ClientesBIZ.asmx



Agora, d um duplo clique sobre o arquivo ClientesB!Z.asmx
Pressione a tecla F+ ou aponte o menu View > Property Window



Localize na Property Window a propriedade {Name) do seu Web Service
ClientesB!Z.asmx. Altere-a de Service1 para ClientesBIZ



Agora, deixemos um pouco nosso Web Service descansando tambm. Este webservice sera
utilizado para manipular dados. vamos criar nossa base de dados de testes.
Criando nossa base de dados...
Abra sua janela Server Explorer (menu View > Server Explorer ou pression Ctrl + Alt +
S). Agora, localize o item Data Connections na treeview. Clique sobre este item com o
botao direito e aponte Create New SQL Server Database.

Dica: Com a instalaao do visual Studio .NET vem tambm o programa de instalaao do NSDE que
uma versao light da base de dados SQL Server 2000 e contm o suficiente para desenvolvedores
testarem aplicaoes que estao desenvolvendo em uma base de dados local. Caso ja possua um
servidor SQL Server 2000 instalado em sua maquina, voc pode utiliza-lo sem nenhum problema.
Caso nao o possua, execute o arquivo [SetupNSDEsetup.exe| dentro da pasta de seu visual
Studio .NET



Agora, nomeie-o de DistribAppSample, como abaixo:



Agora, temos de criar uma nova tabela para podermos utilizar em nosso programa. va
expandindo os itens de seu treeview no server explorer at localizar o item Tables, dentro
do database que voc criou.
Entao, crie uma nova tabela:



O visual Studio abrira uma interface para voc poder criar a estrutura de nossa nova
tabela. Adicione os campos ClienteId (identity), Nome e Email



Salve a tabela criada com o nome Clientes



Agora, novamente no Server Explorer d um duplo clique sobre a tabela Clientes que ns
acabamos de criar.
Adicione alguns dados a ela para ns
vamos fechar todas as janelas de documentos que abrimos e vamos voltar para nosso Web
Service ClientesB!Z.asmx
Implementando nossa camada de negcios / manipulao de dados
Basicamente, precisamos de implementar duas funcionalidades em nossa classe de
negcios: O carregamento de dados de nosso objeto de dados e atualizaao da base de dados a
partir de nosso objeto de dados.
O objeto de dados um container de informaoes sobre os dados da base de podem ser
carregados para a interface ou que levam dados da interface para serem atualizados na base de
dados por um objeto de negcios (que conhece o que fazer com os dados).
veremos a frente que nosso objeto de dados sera um DataSet e nosso objeto de negcios
um nosso ClientesBIZ.asmx (alias, B!Z uma contraao de Business).

Abra a Toolbox do visual Studio .NET, apontando o menu View > Toolbox ou
pressionando Ctrl + Alt + X
Localize a tab Data. Entao, d um duplo clique sobre o objeto Sql Data Adapter



Siga o Assistente:









Dica: Sempre que possivel, utilize o Assistente Query Builder para construir seus comandos SQL.
Eles previnem erros de digitaao dos comandos (pois grafico)



Selecione o data adapter criado e pressione F+ (para abrirmos a Property Window)
Altere a propriedade {Name) dele para datClientes.




D um clique com o botao direito do mouse sobre o objeto datClientes e aponte Generate
DataSet



Nosso dataset devera se chamar ClientesDataSet




Pronto! Temos nosso objeto de dados criado. O dataset tipado o melhor objeto de dados
que pode ser criado em .NET. Ja possue parse para Xml prprio, serializavel, tem uma
tipagem que pode ser resolvida com Early Bind e utilizar toda a potncia do !ntelisense do
visual Studio, pode ser levado para interface atravs de Web (pois XNL), enfim! o
nosso modelo de objeto de dados oficial. vamos adicionar uma instancia deste DataSet
para nosso webservice.
Abra sua Toolbox (View > Toolbox)
Localize sua Tab Data
D um duplo clique em DataSet
Selecione o Dataset tipado que ns acabamos de criar e clique em OK.



Altere a propriedade nome da nossa nova instancia do DataSet de clientesDataSet1 para
dsClientes
Pressione a tecla F7 ou aponte o menu View > Code para abrir o editor de cdigos com o
nosso webservice.
Adicione o mtodo abaixo para o WebService:

[WebMethod]
public DataSet FillClientes()
{
dsClientes.Clientes.Clear();
datClientes.Fill(dsClientes);
return dsClientes;
}

Este mtodo ira ser responsavel pelo carregamento de dados de nosso objeto de dados
ClientesDataSet. Precisamos de um outro mtodo para atualizar as alteraoes na base de
dados. !nsira o mtodo abaixo:

[WebMethod]
public void UpdateClientes(ClientesDataSet updateDataSet)
{
datClientes.Update(updateDataSet);
}

Nota: veja como ns digitamos pouco cdigo para atualizar nossa base de dados. !sto ocorre
porque o visual Studio ja fez grande parte do trabalho no nosso lugar, quando com o Assistente
criou aquela srie de objetos Sql Command com os comandos de SELECT, INSERT, UPDATE e
DELETE do SQL.

Agora que terminamos nosso WebService, podemos concluir o desenvolvimento de nossa
interface.
Dando vida a nossa interface
Agora, completamos toda a camada que manipula dados da base de dados. vamos linkar"
estas camadas com nossa interface.
Para vincularmos nosso projeto a um WebService temos de criar uma coisa chamada Web
Reference... vamos la.
Abra o formulario (Form1) em que colocamos nossos objetos.
Aponte o menu Project > Add Web Reference...



Aponte o seguinte URL para localizar nosso WebService:
o http:fflocalhostfDistribAppSamplefCorefClientesB!Z.asmx
Clique em seguida em Add Reference



Pronto! Agora o visual Studio .NET vai criar alguns arquivos. vou abrir um parnteses para
falar sobre eles.

Os WebServices sao ativados atravs de uma chamada SOAP, que nada mais sao do que
XNL em um HEADER de chamada HTTP. Entao, para fazer uma chamada de um WebService ns
precisariamos escrever a chamada SOAP em uma String, chamara as bibliotecas de chamadas
HTTP e enviar esta chamada para um URL...
Bom: isto seria um tanto chato, dificil e trabalhoso.
!magine ainda que teriamos de tratar o retorno XNL do nosso Web Service. Argh! !sto
poderia ser chamado de inviavel: sendo utilizado somente quando nao houvesse uma outra
soluao.
No entanto, o visual Studio .NET, apelando mais uma vez para o desenvolvimento rapido
de aplicaoes, cria uma srie de classes quando adicionamos uma WebReference que encapsula
todas estas dificuldades" e nos deixa transparecer somente uma srie de objetos com POO bem
claro e de facil utilizaao.
!sto simplesmente brilhante e torna extremamente viavel a utilizaao de WebServices
para diversas situaoes de software.

Olhando para o Solution Explorer voc podera ver que o vS.NET criou uma pasta com icone
de globo dentro da pasta Web References chamada localhost. Esta pasta guarda todos os
arquivos que o vS.NET gerou para encapsular as chamadas de Web Service de nossa
referncia.

Dica: Se sua curiosidade falar mais alto, voc pode tranquilamente navegar entre os arquivos
gerados na referncia. Sao todos arquivos conhecidos do vS.NET: Arquivos .cs (cdigo fonte de
csharp), .xml, .xsd (schemas xml), entre outros.
Nao irei explicar eles neste documento pois nao faz parte deste escopo, mas interessante
conhecer, ao menos o arquivo .cs que ele gera, pois muitas vezes voc pode querer alterar o
namespace que ele define (localhost).

Ative de novo nosso formulario Form1 e ative sua Toolbox (Ctrl + Alt + X)
Localize a tab Data e d um duplo clique sobre o item DataSet
Como no WebService, selecione o DataSet tipado ClientesDataSet e clique em OK



Altere a propriedade (Name) do nosso dataset de clientesDataSet1 para dsClientes
Selecione o objeto DataGrid1
Ative a Property Window (pressionando F+)
Defina as propriedades do datagrid da seguinte maneira
o DataSource: dsClientes
o DataNember: Clientes
Note que em nosso layout do form designer, apareceram algumas colunas ao nosso grid.



Agora vamos adicionar o cdigo a interface de nosso programa. D um duplo clique no
botao Carregar. Quando aparecer a janela Code, adicione o seguinte cdigo ao mtodo de
manipulaao do evento click do botao Carregar que foi criado pelo visual Studio .NET.

//limpanos nossa lista de clientes
dsClientes.Clientes.Clear();

//vamos criar uma instncia de nosso WebService
localhost.ClienteBIZ bizClientes = new localhost.ClienteBIZ();

//agora, vamos carregar a lista de clientes que conseguimos pegar de nosso webservice
dsClientes.Merge(bizClientes.FillClientes());

volte ao Form Designer. vamos dar um duplo clique sobre o botao Salvar alteraoes.
Adicione o seguinte cdigo:

try
{
//vamos pegar as alteraes ocorridas em nosso dataset
localhost.ClientesDataSet dsChanges =
(localhost.ClientesDataSet) dsClientes.GetChanges();

//verificaremos se existe alguma alterao
//caso no existir alterao samos do processo de grava
if (dsChanges == null)
return;

//vamos criar uma instncia de nosso WebService
localhost.ClienteBIZ bizClientes = new localhost.ClienteBIZ();

//vamos atualizar os dados modificados!!!
bizClientes.UpdateClientes(dsChanges);

//agora, caso no tenha ocorrido nenhum erro durante a atualizaa,
//vamos consolidar as mudanas de nosso dataset como j
//atualizadas no banco de dados
dsClientes.AcceptChanges();
}
catch (Exception ex)
{
//caso tenha ocorrido um erro, define que no foi atualizado
//na fonte de dados
dsClientes.RejectChanges();

//levanta novamente a exceo pois "no sabemos como trat-la"
throw ex;
}

Dica: muito importante utilizar o GetChanges{) de seu dataset para atualizar os dados pois, no
momento do envio, o xml serializado para envio ao webservice sera montado somente com as
informaoes alteradas no DataSet, diminuindo a quantidade de dados que esta sendo enviado via
Web e, assim, aumentando o desempenho.

volte novamente ao Form Designer. vamos adicionar o cdigo do nosso botao finalizar.
Clique duas vezes sobre ele e adicione o seguinte cdigo:

Application.Exit();

Ufa! Parecia que nao ia chegar ao Fim! Chegou a tao esperada hora de testar nossa
aplicaao. vamos la.
Aponte o menu Debug > Start Without Debugging



Funciona! :) Clique no botao carregar. veja que os dados sao carregados na tela.







Concluso
A utilizaao de aplicaoes baseadas em XNL Web Services integrando-se com sistemas
remotos viabilizam as novas necessidades do mercado com relaao aos sistemas de computadores.
A plataforma .NET e seus recursos (principalmente o ADO.NET) nos permitem a criaao de
aplicaoes neste modelo com muita facilidade, rapidez e versatilidade.

Das könnte Ihnen auch gefallen