domingo, 12 de fevereiro de 2012

Consumindo um web services com o ASP 3.0 (Clássico)


Recentemente tive que "voltar as origens", fazer uma pequena implementação em um projeto com tecnologia ASP 3.0, é isso mesmo, o famoso ASP Clássico com VBScript e companhia... :) 

O desafio era consumir um web services criado em .NET (.asmx) a partir de uma página ASP 3.0. 
 
Através de uma pesquisa na internet encontrei muitos exemplos e dicas , contudo, a maioria dos artigos faziam referências a componentes de terceiros para realizar tal operação, este tipo de recurso não me agrada muito , não porque gosto de reinventar a roda, mas por motivo de disponibilização dos mesmos em servidores de terceiros, problemas de registros de componentes e etc... 

A escolha foi fazer um código o mais simples possível e poupando o máximo a utilização de tecnologias encapsuladas de terceiros. 

Vamos ao exemplo: 

Este artigo não pretende ensinar como criar um web service, desta forma , partimos do princípio que o web services já existe... ok? 


1o Passo: Vamos pegar a especificação (wsdl) do serviço, veja a seguir um exemplo: 

Eu fiz o seguinte para visualizar o xml: http://www.seuservico.com.br/srv.asmx?wsdl



Note na imagem que é apresentado o exato XML esperado pelo serviço.

Este web service foi feito em .NET (.asmx) , foi utilizada a versão 4.0 .NET Framework .


2o PASSO -  Com base no XML  , iremos dar início a nossa codificação, veja a seguir:


<%
  
Dim url_ws, urlws_wsdl    
Dim obj_http, retorno


    urlws = "http://www.seuservico.com.br/service.asmx" 'endereço do seu serviço
    urlws_wsdl = "http://tempuri.org/
LogOnASP" 'note na imagem acima no header do xml que consta a entrada SOAPAction , ou seja, copiei fielmente conforma a imagem, note que LogOnASP é à ação ou método do ws.  

'abaixo monto o xml conforme a especificação.

    xml = "<?xml version =""1.0"" encoding=""UTF-8"" ?>" & vbCrLf
    xml = xml & "<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">"
    xml = xml & "<soap:Body>"
    xml = xml & "<LogOnASP xmlns=""http://tempuri.org/"">"
    xml = xml & "<key>param1</key>"
    xml = xml & "<passwordMaster>param2</passwordMaster>"
    xml = xml & "<accountMaster>param3</accountMaster>"
    xml = xml & "<codeproduct>param4</codeproduct>"
    xml = xml & "<user>param6</user>"
    xml = xml & "<password>param7</password>"
    xml = xml & " </LogOnASP>"
    xml = xml & "</soap:Body>"
    xml = xml & "</soap:Envelope>"

 
'abaixo segue a codificação utilizada para enviar o xml para o serviço.   
    SET obj_http = Server.CreateObject("Microsoft.XMLHTTP")
    obj_http.open "post", urlws, False
    obj_http.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
    obj_http.setRequestHeader "SOAPAction", urlws_wsdl
    obj_http.send xml
    retorno = obj_http.responseText
 
'este código abaixo irá escrever em um arquivo o retorno do serviço.
 
    SET OBJFSO = Server.CreateObject("Scripting.FileSystemObject")
    SET ARQ = OBJFSO.CREATETEXTFILE("c:\ret.xml", true)
    ARQ.WRITELINE(retorno)

    SET OBJFSO = Nothing


    DIM OBJFSO, PASTA, ARQ

%>


Espero ter ajudado, contudo, havendo dúvidas por favor sinta-se a vontade para adicionar um comentário neste post.


Em outro artigo irei falar de XML DOM... 

Ivaldo de Oliveira é desenvolvedor sênior de softwares