Por que eu devo ler este artigo:

As aplicações distribuídas vieram para ficar, e o modelo n-tier é adotado pelas empresas cada vez mais. Aliado a isso, no cenário atual, nota-se a presença forte da internet nas soluções de TI como canal de comunicação. E quando se pensa em multicamadas e internet, é impossível não lembrar de uma tecnologia em franca expansão: os Web Services.

Neste artigo, que está dividido duas partes, aprenderemos algumas técnicas avançadas do protocolo SOAP e de sua implementação feita pela CodeGear, e veremos como empregá-las em nossas aplicações.

Como de costume, vamos utilizar um exemplo prático de aplicação para ilustrar os conceitos aprendidos. Faremos um disco virtual, um aplicativo onde o usuário poderá enviar arquivos para um servidor remoto, listá-los e recuperá-los posteriormente.

Todos esses processos (envio, consulta e recebimento) poderão ser realizados de qualquer máquina com acesso ao servidor de aplicação.

O que você vai precisar

Será usado o Delphi 2006 Architect para o desenvolvimento da solução. Nada impede, porém, que você utilize alguma versão anterior que forneça os componentes do protocolo SOAP (em outras palavras, a paleta WebServices). Atente apenas para um ponto: muitos bugs da implementação foram corrigidos pela CodeGear e a versão 2006 do produto vem com muitas delas já instaladas.

Então, é altamente recomendável que você aplique essas atualizações no seu Delphi. Vamos ver como fazer isso no próximo tópico. É claro que você também pode usar a novíssima versão 2007, se a tiver instalada.

Também será necessário ter IIS (Internet Information Services) instalado, uma vez que o servidor de aplicação será desenvolvido sobre a tecnologia ISAPI. E como faremos acesso a banco de dados, será preciso ter um SGBD configurado. Neste artigo será usado o Firebird 2.0.

Nota: É esperado que o leitor já tenha alguma experiência com SOAP antes de ler este artigo. Vários artigos já foram publicados na revista ClubeDelphi, e, como referência, eu sugiro a edição 70, onde Guinther Pauli abordou o tema de forma brilhante.

Por último, você precisa instalar o HTTPRIOEx, desenvolvido por mim, disponível para download junto com os fontes desse artigo. Ele é essencialmente igual ao original que acompanha o Delphi, de fato, ele herda diretamente desse último, exceto pelo novo evento OnBeforeExecuteStream, necessário para algumas técnicas abordadas neste artigo.

Para instalá-lo, apenas abra o seu pacote no Delphi e clique sobre a opção Install.

Atualizando o SOAP

Como mencionado anteriormente, é extremamente importante atualizar a implementação do SOAP com os últimos releases disponíveis. Você pode encontrá-los no site da CodeGear, ou através dos news groups da empresa (veja a seção Links).

Quando este artigo foi escrito, o último pacote disponibilizava as correções feitas no Delphi 2007 para as versões anteriores do produto. É provável que quando você esteja lendo este artigo, um novo update tenha sido liberado. Novamente, é importante visitar periodicamente o site da CodeGear para ter acesso a essas informações.

Para aplicar as alterações, basta substituir as units antigas pelas novas (faça backup antes!). Caso alguma exista alguma mudança na interface dos componentes, talvez seja preciso reinstalar os pacotes do SOAP no IDE do Delphi. Em todo caso, um documento de instalação sempre é distribuído junto com os arquivos.

Nota: É possível que o primeiro update do Delphi 2007 traga modificações na implementação do SOAP que descartem a necessidade de instalar o HTTPRIOEx, citado no tópico anterior.

Preparando o banco de dados

Nossa aplicação vai precisar de um banco de dados para armazenar os usuários e os arquivos enviados por eles. Como já dito, vamos usar o Firebird 2.0 com SGBD. Entretanto, como o foco desse artigo é apenas o protocolo SOAP, não mostraremos como criar o banco e seus artefatos.

Basta você baixar os exemplos disponíveis e fazer uso do banco existente.

Iniciando os trabalhos

Com tudo preparado, já podemos começar a desenvolver nossa aplicação. Abra o Delphi, clique em File > New > Other e selecione o item Delphi Projects > WebServices. Marque o item SOAP Server Application e clique em OK. Quando for solicitado que você escolha o tipo de servidor a ser criado, selecione a caixa ISAPI/NSAPI Dynamic Link Library.

Clique em Sim quando aparecer a mensagem Create Interface for SOAP module. Na caixa seguinte, preencha o campo Service name como “DiscoVirtual” e em Unit identifier digite “uDiscoVirtual”. Mantenha as demais opções como estão e clique em OK.

O Delphi gerará todos os arquivos necessários para a criação de uma DLL ISAPI, e também uma interface para a classe remota. Salve todas as units em uma pasta chamada “server”, com exceção do arquivo “uDiscoVirtualIntf”, que deve ser armazenado em outro diretório, chamado “common”. Salve o WebModule como nome “uWebModule”, e o projeto como “DiscoVirtualServer”.

Abra a uDiscoVirtualIntf e monte a interface como mostrado na Listagem 1.

Listagem 1. Interface do servidor de aplicação

        IDiscoVirtual = interface(IInvokable)
        ['{972B0D6B-4B41-4136-859F-5B94DD697341}']
        { <-- O seu GUID será diferente! }
        procedure Login(const UserName,
        Password: string); stdcall;
        procedure Logout; stdcall;
        function GetFileList: OleVariant; stdcall;
        procedure UploadFile(const FileName: string;
        FileData: TByteDynArray); stdcall;
        function DownloadFile(
        const FileName: string): TByteDynArray; stdcall;
        procedure DeleteFile(
        const FileName: string); stdcall;
        end;
         ... 

Quer ler esse conteúdo completo? Tenha acesso completo