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.
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
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
Bá véio, me ajudou muito mesmo! Ao invés de criar um arquivo xml dá pra simplesmente imprimir ele na tela usando um
ResponderExcluirResponse.Write "< pre >" & retorno & "< pre >"
Havia mexido pouco com xml e nunca com WSDL e tive que dar um jeito. Valeu pela ajuda!
Abração!
Este comentário foi removido pelo autor.
ResponderExcluirFala 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
ResponderExcluirShow, obrigado!
ResponderExcluir