Na edição 70 da ClubeDelphi, propus uma solução baseada em SOAP, XML e ClientDataSet para permitir que aplicações se comunicassem através de Web Services. Entre algumas vantagens da solução, destacaria o acesso ao BD a partir de qualquer lugar da Internet e centralização do acesso a dados em uma única camada.
A aplicação cliente Win32 poderia, por exemplo, ficar em um determinado país e obter dados via Web Services de um servidor rodando em um outro canto do globo. Tudo trafegado através de XML sobre o HTTP. São as facilidades da distribuição Web aliadas ao RAD para Desktop.
Neste artigo vamos dar um passo a mais nessa proposta. Além de permitir todas essas vantagens já citadas, vamos adicionar mais um elemento importante na arquitetura: nossa mesma solução poderá ter clientes rodando em diferentes plataformas.
Nossa solução será, obviamente, multicamadas. Teremos uma camada servidora, na forma de um Web Service, que se encarregará de acessar o banco de dados. Diferentes tipos de aplicação farão acesso a esse Web Service, solicitando dados e chamando métodos para atualizar informações.
Arquitetura da solução
Para ter uma visão geral da arquitetura da aplicação que será criada, veja o esquema da Figura 1. Durante todo este tutorial, sempre que tiver uma dúvida de como a solução está sendo implementada e em que camada está sendo empregada determinada tecnologia, consulte essa figura. Ela será nosso “mapa”.
O Web Service será criado em Delphi for .NET e utilizará ADO.NET para comunicação com o banco de dados (SQL Server ou Firebird para este exemplo). Um cliente ASP.NET será a interface Web da solução, permitindo que a aplicação seja acessada por qualquer browser pela Internet.
Uma aplicação Win32 em Delphi 7 acessará os mesmos dados, comunicando-se com o Web Service através de SOAP pela Intranet ou Internet. E finalmente, uma aplicação Mobile construída com Delphi for .NET e Compact Framework vai permitir acesso aos mesmos dados a partir de Pocket PCs.
Usando as tecnologias abordadas neste artigo, você poderá ao final:
- Acessar seu banco de dados a partir de qualquer lugar da Internet, usando qualquer um dos três tipos de cliente. Mesmo a solução Desktop pode se conectar ao BD remotamente através da Internet, graças ao SOAP;
- Criar aplicações distribuídas para a Internet. Você pode, por exemplo, centralizar o banco de dados e servidor de aplicação na matriz da empresa e distribuir as aplicações clientes para as filiais, que terão acesso a dados em tempo real e que se mantêm sempre atualizados, sem a necessidade de sincronização;
- Poderá ter sua aplicação oferecida como um serviço: seus clientes podem acessar a aplicação através da Internet, sem a necessidade de nenhuma configuração local na empresa, tudo fica configurado e armazenado no servidor;
- Centralizar todo o acesso a dados em uma única camada servidora, que também contém as regras de negócio. Os aplicativos clientes compartilham essa mesma camada, garantindo independência de banco de dados e tecnologia de acesso. Por exemplo, uma única modificação em um SQL ou código de negócio deve ser feito apenas no servidor e automaticamente é refletido nas aplicações clientes;
- Oferecer ao seu cliente três tipos de acesso ao servidor. Poderá utilizar a interface Web para acesso via browser. A aplicação desktop pode ser usada tanto em ambiente Intranet quanto Internet. E finalmente, os clientes podem usar dispositivos móveis como Pocket PCs para acessarem o mesmo servidor e BD.
Criando o banco de dados
O primeiro passo será a criação do banco de dados. Para este exemplo, vou utilizar o banco de dados free SQL Server 2005 Express, que pode ser obtido no endereço indicado na seção Links. Nesse mesmo endereço você encontra para download o SQL Server Management Studio Express, front-end para trabalhar com o SQL Server 2005.
Usando o Management Studio, crie um novo banco de dados chamado CUSTOMERS e dentro dele crie uma nova tabela também chamada CUSTOMERS. A estrutura dessa tabela deve seguir o modelo mostrado na Tabela 1. Lembre-se de definir o campo chave como Identity para que os valores sejam criados automaticamente.
Coluna | Tipo |
---|---|
CustomerId | Integer (chave) |
FirstName | Varchar(50) |
Company | Varchar(50) |
Note que vamos criar uma tabela extremamente simples, para que possamos focar nossas atenções nos aspectos relativos à multicamadas, Web Services e multi-plataforma. Caso queira usar um banco de dados maior e pronto, como o Northwind ou Employee, fique a vontade.
A solução demonstrada neste exemplo funciona perfeitamente com o Firebird, caso queira utilizar esse banco de dados. No endereço para download deste artigo, você encontra uma versão do mesmo aplicativo deste artigo usando o banco de dados open source.
Após criado o banco de dados, insira alguns registros na tabela CUSTOMERS para facilitar nossos testes quando formos construir a aplicação no Delphi.
Construindo o servidor
Essa será a camada responsável por toda a comunicação com o banco de dados. Por ser baseada em XML Web Services, essa camada poderá ser acessada por diferentes tipos de aplicação rodando em diferentes plataformas. Além disso, esse acesso não precisa necessariamente ser feito em uma LAN, pois dados em XML e chamadas a métodos SOAP podem ser feitos através da Internet.
No Delphi, clique em File > New > Other e na categoria Delphi for .NET Projects escolha ASP.NET Web Service Application. Dê o nome de “DataServer” para a nova aplicação e salve o arquivo ASMX como “customer.asmx”, alterando o seu nome no Project Manager. O arquivo ASMX é o que define o nosso Web Service. Cada classe dentro de um ASMX representa uma tabela do banco de dados nessa solução que estou propondo.
Acesse o código do serviço, clicando na aba customer.pas logo abaixo no editor, e renomeie a classe criada para “TCustomer”. Lembre-se de fazer essa alteração em todo o código já criado. Se quiser, pode usar o recurso de SynchEdit para alterar todas as referências de uma única vez, bastando para isso selecionar todo o códigoe fazer a alteração (use o TAB).
Métodos para manutenção
Nossa classe TCustomer vai prover os métodos necessários para manipular os dados da tabela CUSTOMERS. Vamos começar implementando as operações básicas de manutenção de clientes.
Declare os métodos da Listagem 1 na seção public da classe. Observe que os métodos precisam ter o atributo WebMethod para poderem ser acessados através de SOAP. Aperte ...