Pesquise no Blog

 

terça-feira, 29 de janeiro de 2008

Trabalhando com Web Services

Bem, hoje vou falar um pouco sobre como trabalhar com web services. Como esse assunto é muito longo, vou passar apenas o básico do básico.

1º Passo: Antes de cair de cara neste artigo certifique-se que vc está por dentro dos seguintes assuntos:

.Conceito de Webservices: http://pt.wikipedia.org/wiki/Webservices
.SOAP: http://pt.wikipedia.org/wiki/Soap
.XML: http://pt.wikipedia.org/wiki/Xml

Os conceitos acima são de suma importância, não deixe de estuda-los.

Ok, agora que vc já leu todo material que citei, estamos prontos para entrar no mundo dos web services. Para este exemplo utilizei:

.Turbo Delphi Explorer;
.IIS

Não vou entrar em detalhes de como configurar o IIS, já que isso pode ser encontrado facilmente aqui:

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/bc0c4729-e892-4871-b8f3-fcbf489f2f09.mspx?mfr=true

Ok, vamos primeiro criar o servidor: Vá em File/New/Other/Webservices e selecione SOAP Server Application



2º Passo:Selecione a opção ISAPI/NSAPI Dynamic Link Library.

Essa é a carinha da nossa aplicação. Geralmente nada é programado nela, tudo dese ser deixado como está.

3º Passo: Ok, agora vamos criar um SOAPDataModule. Vá em File/New/Other/webservices/SOAP Server Data Module

Uma SoapApplication pode ter vários soap data módules. O soapDataModule pode ser entendido como o webservice em si. A quantidade de SOAPDataModule depende de seu projeto.

4ºPasso, Antes de começar a programar salve e faça os seguintes ajustes no código.

Substitua a linha NomeDaUnit = interface(IAppserverSOAP)

por

NomeDaUnit = interface(IAppserver)

e

nomedaClasse = class(TSoapDataModule, NomeDaInterface, IAppServer, IAppServerSOAP)

por

nomedaClasse = class(TSoapDataModule, NomeDaInterface, IAppServer)

Veja a fugura abaixo:

Agora vamos declarar um método chamodo testeWebService. Repare que podemos declarar métodos que serão usados internamente(só será utilizado dentro do web service) e externamente(Utilizado por outros aplicativos).

Para declarar um método externo precisamos utilzar a diretiva stdcall após a declaração do cabeçalho do método e copia-lo para dentro de interface, veja na figura abaixo:


repare que os metodos testeWebservice e getErrorCode são externos, já que tem a diretiva stdcall e foram declaradas na interface.

vamos fazer uma implementeção simples para o método testeWebservice:

result := 'seu web service está funcionando!'; //Melhor que Olá Mundo....

Pronto, nosso web service está pronto.

Agora basta salvar e dar um build. Pegue a dll compilada e jogue no seu servidor. Depois disso acesse-a pela browser:
localhost//[SuaDLL].dll

Você verá algo assim:

repare que nossos métodos aparecem logo abaixo. Clique no link WSDL, você vai visualizar um xml, copie o endereço que aparece no browser.

Agora vamos fazer o cliente:

Dê um file/New/VCL Forms Application

Depois dê um FILE/New/Other/WebServices/WSDL Importer


Na tela seguinte, cole o link do WSDL:

Clique em Next. Se tudo ocorrer bem, vc verá a seguinte tela:

Clique em finish. Salve a interface com um nome qqr. Se vc não conseguir importar o wsdl significa:

.Seu Servidor pode não estar funcionando;
.Vc não fez os ajustes corretamente.

Ok, Vá agora para o seu form principal e importe a interface do Webservice:
Ok, compile.

Agora coloque um button na tela e no evento Onclick coloque o seguinte código:

procedure TForm1.Button1Click(Sender: TObject);
var
ls_WsMessage: String;
begin
ls_WsMessage := IWebService.GetIUWebService().testeWebService;
try
ShowMessage( ls_WsMessage );
except
raise Exception.Create( 'Erro ao acessar o web service!' );
end;
end;



Resultado:


Espero que este pequeno tutorial ajude. Vou disponibilizar este exemplo em public.box.net/hatsumomo

Logo logo mais artigos.

Nenhum comentário: