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

4 comentários:

  1. Bá véio, me ajudou muito mesmo! Ao invés de criar um arquivo xml dá pra simplesmente imprimir ele na tela usando um

    Response.Write "< pre >" & retorno & "< pre >"

    Havia mexido pouco com xml e nunca com WSDL e tive que dar um jeito. Valeu pela ajuda!
    Abração!

    ResponderExcluir
  2. Este comentário foi removido pelo autor.

    ResponderExcluir
  3. Fala cara, voce consegue me dar uma ajuda? Estou tentando implementar um webservice de logistica reversa dos correios mas sempre recebo como retorno o erro. soap:ClientError reading XMLStreamReader Consegue entrar em contato comigo pelo email danicpinho@gmail.com para eu passar o codigo completo se for necessario. Preciso muito fazer esse negocio funcionar usando vbscript. Obrigado

    ResponderExcluir